Şimdi zamanında, bunu kendim çözmeyi başardım, böylece en azından gelecek nesiller için kendim takip edebilirim.
Ne yazık ki, çekirdek yükseltmesinde orijinal sorunu kaybettim, ancak yerine yeni bir tane kazandım, performansta daha da kötüsü ve izlemesi zor. Bulduğum teknikler şunlardı:
Her şeyden önce, blktrace
/ blkparse
oldukça yararlı bulduğum bir araçtır. Tek tek G / Ç isteklerinin ilerlemesinin, isteği gönderen süreç gibi birçok yararlı ayrıntıyla izlenmesini sağlar. Çıktıyı koymak yararlıdır tmpfs
, böylece izin depolanmasının işlenmesi izlemeye başlamaz.
Ancak bu şimdiye kadar yardımcı oldu, bu yüzden daha fazla hata ayıklama işlevselliğine sahip bir çekirdek derledim. Özellikle, ftrace
çekirdek alanı içindeki zayıf performans gösteren süreci izlememe, ne yaptığını ve nerede engellediğini görmeme izin verdiğinden oldukça yararlı buldum . Bir hata ayıklama çekirdeğinin derlenmesi , en azından daha basit durumlarda, bir işlemin çekirdek içinde ne yaptığını görmenin daha kolay bir yolu olarak da çalışabilen çalışma WCHAN
çıktısı da sağlar ps
.
Ayrıca LatencyTop'un yararlı olmasını umuyordum , ancak oldukça buggy buldum ve aynı zamanda maalesef gerçekten "çok yüksek düzey" olan gecikme nedenlerini de gösterdi.
Ayrıca, iostat
içeriği /sys/block/$DEVICE/stat
çok yakın aralıklarla görüntülemek daha yararlı buldum , sadece şöyle:
while :; do cat /sys/block/sda/stat; sleep .1; done
Dosyanın Documentation/iostats.txt
biçimi için çekirdek kaynak ağacına bakın stat
. Yakın aralıklarla izlemek, G / Ç patlamalarının ve bu gibi şeylerin tam zamanlamasını ve boyutunu görmemi sağladı.
Sonunda, çekirdek yükseltmesinden sonra yaşadığım sorunun Linux 3.0'da tanıtılan ve benim durumumda Berkeley DB'nin mmap'lerindeki sayfaları kirletirken uzun süre durmasına neden olan kararlı sayfalardan kaynaklandığını öğrendim. bölge dosyaları. Bu özelliği düzeltmek mümkün gibi görünse de, neden olduğu sorunların Linux 3.9'da düzeltilmiş olabileceği halde , bölge dosyalarını farklı bir dizine koymamı sağlamak için Berkeley DB'yi yamalayarak şimdiye kadar yaşadığım en kötü sorunu çözdüm. (benim durumumda /dev/shm
) sorundan tamamen kurtulmama izin verdi.