EXT4 performansı çok sayıda küçük dosya içeren sistemde gerçekten kötü oldu


10

Yalnızca 128 MB RAM içeren küçük bir yerleşik cihazım var

bu cihaza bağlı 2 TB USB2 sabit disk

Dosya sayısı diskin kapasitesinin bir eşiğini geçtiğinde yakın zamana kadar cihazın performansından çok memnun kaldım (hangisi olduğundan emin değilim)

diskte birçok küçük dosya vardır, çünkü yazma uygulama dosyalarının doğası çok dengeli bir şekilde düzenlenmiştir - hiçbir yaprak düğümü dizininin 200'den fazla dosyası yoktur ve 800.000'den fazla dosya vardır.

Araştırılacak bir şeye öncülük etmeyi umuyorum. Disk performansı önemli ölçüde düştü, cihaz oldukça iyi bir şekilde sıkıştırıldı ve sonra ani bir performans bir kaya gibi düştü.

Benim varsayım, dosyalarım için diskte seçtiğim organizasyon yapısının inode önbelleklerinin zippy kalma yeteneğini bir şekilde zedelediğidir.

bir deneme olarak, diski söktüm (önbellekleri temizle, ücretsiz olarak doğrulandı). Sonra bir komut isteminden dizin yapısının derinliklerine geçtim. Hepsi bu dizinin (ve çocuklarının) altında sadece yaklaşık 3200 dosya bulunduğunu ve bu noktada 'boş' 117MB boş bellek gösterdiğini söyledi

bu noktada 'bul' komutunu ve ardından 'ücretsiz' komutunu yazdım

'find' yaklaşık 3000 dosya gösterdi, ancak bellek kullanımı ~ 117MB'dan ~ 2MB'ye gitti

Önbellek ve boş bellek arasındaki dengeleri ve çekirdeğin boş bir sayfayı nasıl kötü bir sayfa olarak gördüğünü anlıyorum. Birisinin ne olduğunu anlamama yardımcı olacağını umuyorum

dengeli bir ağacın birçok dosyaya sahip olmanın yolu olduğunu varsayabilir miyim?

Yanıtlar:


9

Çok iyi sorun açıklaması.

Söylediklerinize dayanarak, gördüğünüz şeyin slab kullanımının yüksek olması olduğunu düşünüyorum. İyi bir deney çalıştırmak olacaktır cat /proc/meminfove cat /proc/slabinfosiz fs hiyerarşi derinliklerine gidip 3000 dosya keşfetmek ederken 3 saniyelik gecikmeden bitti. Esasen, çekirdeğin fs yapısını geçeceği ve tek tek dosyaları ve inode'ları tarayacağı ve hepsinin bellekte saklanacağıdır. Kontrol /proc/slabinfoederseniz, ext4_inode_cacheher bir inodeun ne kadar bellek alacağını söyleyen bir nesne göreceksiniz . Bunu nesne no (obj_size * no_obj) ile çarpın ve nesne tarafından kullanılan bellek miktarını elde edin. Fs hiyerarşisine ne kadar derin girerseniz, sistem bellek bölgesinin yüksek filigranına ulaşana kadar o kadar çok bellek tüketilir. Bu noktada, çekirdek geri kazanmaya başlayacaktır.

Eğer meminfo ve slabinfo'ya poke ederseniz, aradığınız detayları alacaksınız. Eğer bakmamı istiyorsanız, yapıştırın;)

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.