NTFS ve HFS, ext3 ve diğerleri üzerindeki binlerce dosyada dosya işlemlerinin gerçekleştirilmesi


5

[ Ask HN gönderimden çarpı işareti . Soru süper kullanıcı için çok genişse, kapatmaktan çekinmeyin.]

Bu yıllardır merak ettiğim bir konu, ancak konu hakkında hiçbir zaman iyi bir tartışma bulamadım. Tabii ki, Google-fu'm beni mahvedebilir ...

Sıklıkla binlerce küçük dosya içeren projelerle uğraşıyorum. Bu, sık sık tüm bu dosyalar veya bunların büyük bir alt kümesinde işlemler gerçekleştirdiğim anlamına gelir; proje klasörünü başka bir yere kopyalamak, bir sürü geçici dosyayı silmek, vb. NTFS'nin bu görevleri bir Mac'teki HFS'den veya bir Linux kutusundaki ext3 / ext4'ten tutarlı bir şekilde yavaşladığını fark ettim. Ancak, söyleyebildiğim kadarıyla ham verim NTFS'de aslında daha yavaş değil (en azından önemli ölçüde değil), ancak her bir dosya arasındaki gecikme biraz daha uzun. Bu küçük gecikme gerçekten binlerce dosya için ekler.

(Yan not: Okuduklarımdan, bu, gitginin Windows için bu kadar acı verici olmasının sebeplerinden biri, çünkü nesne veri tabanı için dosya sistemine çok güveniyor.)

Benim verdiğim kanıtlar sadece bir anekdottur - şu anda herhangi bir gerçek performans numaram yok, fakat daha fazla test etmek istediğim bir şey (belki de Windows'ta Mac'le çift çizerek). Yine de benim geekiness, orada zaten birisinin olduğu konusunda ısrar ediyor.

Herhangi biri bunu açıklayabilir veya belki de kendimi daha fazla araştırmak için doğru yöne işaret edebilir mi?

Yanıtlar:


3

HFS uzmanı değilim ama NTFS ve ext3 dosya sistemlerine baktım. İki şeyi düşünmelisin gibi geliyor.

İlk olarak, ext2 / 3/4 dosya sistemleri, disk meta alanlarını (izinler, sahiplik, dosyanın verilerini oluşturan bloklar veya uzantılar) depolamak için diskteki alanları önceden tahsis eder. NTFS'in yaptığını sanmıyorum. Ext3 "inode" ifadesinin karşılığı $ MFT kaydıdır. Benim anladığım kadarıyla $ MFT kayıtları mutlaka bir dosya oluşturduğunuzda tahsis edilmiş değildir. Gerekirse $ MFT yetiştirilebilir. Bir ext2 / 3/4 dosya sistemindeki inode sayısını artırmak çok daha zor.

Herhangi bir NT içindekiler için özel değilim, ancak $ MFT kayıtları gerektiği gibi oluşturuluyor gibi okunan her şey, böylece küçük dosyalara, dizinlere, serpiştirilmiş büyük dosyalara sahip olabilirsiniz.

Ext2 / 3/4 dosya sistemlerinin kesinlikle olduğu BSD FFS tarzı dosya sistemleri, çoğu zaman diskteki inode'ları gruplamaya ve dizin dosyalarını inode'lardan ayırmaya başladı. Bir çok şey hem verimli hem de güvenli bir şekilde dizinleri ve meta verileri yazmaya başladı. Bakınız: örnek olarak http://www.ece.cmu.edu/~ganger/papers/softupdates.pdf .

İkincisi, doğru dosyaları okuduğumda küçük dosyaların verileri $ MFT kayıtlarında tutulur. Bu ext2 / 3/4 için geçerli değildir ve bu yüzden yukarıda küçük dosyalara ve büyük dosyalara biraz farklı davranıldığını söyledim.

Bana NT (işletim sistemi) $ MFT için çekişme çekiyor gibi geliyor. Müdürlükler güncellenmiştir, bu bir $ MFT kayıt güncellemesidir. $ MFT güncellemesi olan küçük dosyalar oluşturulur. İşletim sistemi okuma ve yazma işlemlerini verimli bir şekilde yapamaz çünkü tüm meta veri güncellemeleri ve verilerin tümü aynı "dosya", $ MFT'ye gider.

Ama dediğim gibi, sadece bir tahmin. NTFS hakkındaki bilgim temelde okumadan ve deneyimlemekten çok az. HFT'nin "dizinlerin" "inode" dan "dosya verilerinden" ayrı tutup tutmadığını görerek tahminimi iki kez kontrol edebilirsiniz. Eğer öyleyse, bu büyük bir ipucu olabilir.


Bilgilendirici yanıtınız için teşekkürler! Aslına bakarsanız Asıl Dosya Tablosu suçlu (en azından kısmen).
peterjmag

3
NTFS, MFT için gerçekten yer ayırıyor. Bkz. Msdn.microsoft.com/en-us/library/aa365230(VS.85).aspx - ayrıca NTFS Dosya Büyümesinin çok bilgilendirici Dört Aşamasına bakın
user4197

Mükemmel destek bilgisi, kullanıcı4197, ancak bu bilgi, $ MFT için çekişmenin, meta verileri sık sık güncellenen birçok küçük dosyayla çalışırken sorun olabileceğini onaylar.
Bruce Ediger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.