Kötü NTFS performansı


21

Neden NTFS performansı örneğin Linux / ext3 ile karşılaştırıldığında bu kadar kötü ki? Çoğunlukla bunu Subversion'dan (büyük) kaynak ağaçları kontrol ederken görüyorum. Ödeme NTFS'de yaklaşık 10-15 dakika sürüyor, Linux'taki karşılık gelen ödeme (neredeyse aynı donanımda) daha hızlı (1 - 1,5 dakika) büyüklükte bir sipariş alıyor.

Belki bu, çok sayıda küçük dosyayı işlemeye özgüdür ve büyük dosyalar söz konusu olduğunda NTFS daha iyidir, ancak neden bu olmalıdır? Küçük dosyalar için NTFS performansını iyileştirmek genel olarak Windows performansı için oldukça faydalı olmaz mıydı?

EDIT: Bu bir "NTFS ext3 ile karşılaştırıldığında berbat" şeklinde değil; NTFS'nin neden bazı durumlarda kötü performans gösterdiğiyle gerçekten ilgileniyorum . Bu sadece kötü bir tasarım mı (şüpheliyim) mi, yoksa ortaya çıkan başka sorunlar var mı?


4
Belki de, NTFS'nin ext3'e niçin berbat olduğunu sormak yerine, çok sayıda küçük dosyayla çalışırken, NTFS'in performansını nasıl geliştireceğinizi sormanız için, yeniden cevaplanabilir.
ChrisInEdmonton

@Chris ile aynı fikirdeyim, bu soru biraz anlamsız.
Sasha Chedygov

4
NTFS'nin neden kötü performans gösterdiğiyle gerçekten ilgileniyorum. Cevap "daha hızlı yapmak için X yap" ise, o zaman harika, ama sorunu anlamak için razı olurdum.
JesperE

Tamam, seni yanlış anladığım için üzgünüm.
Sasha Chedygov

2
BTW'yi bir Windows makinesinde SVN kullanırken, bu makinede gerçek zamanlı korumanın etkin olduğu bir virüs tarayıcı var mı? Bu kötü olabilir.
dlamblin

Yanıtlar:


35

NTFS'de buna Ana Dosya Tablosu adı verilir . Hakkında okuduğunuzda çok güzel geliyor.

Ext3'ün% 95'e kadar disk kullanımı sağladığını görebilirsiniz, MFT'nin varlığı ise NTFS'nin diskinizin% 90'ından fazlasını kullanmanızı istemediği anlamına gelir. Fakat bunun sizin probleminiz olmadığını ve probleminizin birçok küçük dosyadaki birçok işlemle ilgili olduğunu varsayacağım.

Buradaki farklılıklardan biri, küçük bir dosya oluşturduğunuzda gerçekleşen şeydir. Bir dosya blok boyutundan daha küçükse, kendi bloğuna yazılmaz, MFT'ye kaydedilir. Dosya tam olarak oluşturulduğunda olduğu gibi kalırsa bu çok hoş olur. Uygulamada, svn oluşturmak için bir dosyaya dokunduğunda, o dosyaya eklerse, dosyadan kaldırırsa veya yalnızca kendi bloğuna taşıyacak kadar değiştirmeyecekse, işlemin oldukça yavaş olduğu anlamına gelir. Ayrıca sadece çok sayıda küçük dosyayı okumak, MFT'nin hepsinin bulunduğu yerde, blok başına katları ile biraz baskı yapar. Bunu neden yaptı? Önceden parçalanmadan kaçınmak ve daha fazla blok kullanmak daha etkilidir ve genel olarak bu iyi bir şeydir.

Buna göre ext2 ve 3'te, her dosyanın dosya blokları, meta verinin içinde bulundukları dizin için bulunduğu yerin yanında depolanır (mümkün olduğunda diskiniz parçalanmamışsa ve yaklaşık% 20 boş alanınız varsa). Bu, svn dizinleri açtığı için, sürücünüzdeki 16 MB önbellekte ve daha sonra tekrar çekirdek önbelleğinde birkaç blok temelde ücretsiz olarak önbelleğe alındığı anlamına gelir. Bu dosyalar, .svn dosyasını ve son güncellemenizin revizyon dosyalarını içerebilir. Bu kullanışlı, çünkü bunlar muhtemelen svn dosyalarının bir kısmına bakıyor. NTFS bunu yapamaz, ancak MFT'nin büyük bölümlerinin sistemde önbelleğe alınması gerekir, ancak bir sonraki isteyeceğiniz bölümler olmayabilir.


2
Küçük dosyaların yaşadığı yer burası doğru ancak bunun neden MFT'ye stres koyması gerektiğinden emin değilim. Bunlardan herhangi birini çektiğinizde bu dosyaların çoğunu önbelleğe çekeceğinizden emin olduğunuz için, bu dosyaları okumayı çok daha kolay hale getirmez mi?
ChrisInEdmonton

1
@ChrisInEdmonton Bu, onu vurgulayan MFT'nin güncellemeleridir, çünkü komşu alanın mevcut olduğu bloklara dokunmuyorsunuz, etrafta dolaşıyorsunuz ve MFT'nin önbellek kısımlarını geçersiz kılıyorsunuz. Size, kağıt üzerinde MFT'nin küçük dosyaları kullanmanın çok hızlı bir yolu olması gerektiğini size vereceğim. Sadece pratikte göze çarpmıyor.
dlamblin

6

Özel problemin şu ki;

  1. Subversion, UNIX dünyasından geliyor, bu nedenle Windows sürümü de benzer performans özelliklerine sahip.
  2. NTFS performansı gerçekten de milyarlarca küçük dosya için mükemmel değildir.

Gördüğünüz şey, o işletim sistemlerinde performans varsayımları olan belirli bir işletim sistemi için tasarlanan bir şeydir. Diğer sistemlere alındığında bu genellikle kötü bir şekilde bozulur. Diğer örnekler çatallaşma vs. UNIX'te, bir şeyi geleneksel olarak paralize etmenin hoş bir yolu, başka bir süreci ortaya çıkarmaktır. İşlemlerin başlaması en az beş kat daha fazla süren Windows'ta bu gerçekten kötü bir fikir.

Genel olarak, farklı bir mimariye sahip başka bir kişiye verilen belirli bir işletim sisteminin herhangi bir eserini alamazsınız. Ayrıca NTFS'nin UNIX dosya sistemlerinde bulunmayan ve bu noktada günlük tutma ve ACL'ler gibi yaygın olarak kullanılan birçok dosya sistemi özelliğine sahip olduğunu unutmayın. Bu şeyler bir bedeli var.


Bir gün, çok fazla boş vaktim olduğunda, işlem desteği ("milyonlarca küçük dosyaya dokunmaktan kurtulmalı") ve alternatif veriler gibi NTFS'deki özelliklerden yararlanan bir SVN dosya sistemi modülü yazmayı planlıyorum. akışlar (ayrı bir .svndizinin ihtiyacını ortadan kaldırmalıdır ). Sahip olmak güzel bir şey olurdu, ancak SVN devlerinin bu gibi şeyleri öngörülebilir bir gelecekte hayata geçireceğinden şüpheliyim.

Yan not: Kullandığım büyük bir SVN deposundaki tek bir güncelleme yaklaşık 250.000 dosya işlemi gerçekleştirdi. Bazı küçük sesler bunun değişen 24 dosya için gerçekten çok fazla olduğunu söylüyor.


1
Fakat neden küçük dosyalarla uğraşırken NTFS'nin performansı kötü? Başka bir şey almak için bunun feda edilmesi gerekiyor mu?
JesperE

3

İşte Microsoft'un var bilgileri NTFS nasıl çalıştığı hakkında. Aradığın şey için fazla ısırmış olabilir, ama incelemek NTFS'nin yaşadığı senaryolara biraz ışık tutabilir.

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.