Linux çekirdeğine arabellek önbelleği için yalnızca belirli bir bellek yüzdesini kullanmasını söylemenin bir yolu var mı? /proc/sys/vm/drop_caches
Önbelleği geçici olarak temizlemek için kullanılabileceğini biliyorum , ancak ana belleğin% 50'sinden fazlasına büyümesini önleyen kalıcı bir ayar var mı?
Bunu yapmak istememin nedeni, sürekli diskten veri sunan ve tüm fiziksel belleği birkaç saat içinde tampon önbellek olarak kullanmayı başaran bir Ceph OSD çalıştıran sunucum olmasıdır. Aynı zamanda, büyük miktarda (birkaç 10 GB GB) fiziksel bellek tahsis edecek uygulamaları çalıştırmam gerekiyor. Popüler inanışın tersine (tampon önbellekle ilgili hemen hemen tüm sorulara verilen tavsiyelere bakın), temiz önbellek girişlerini atmak suretiyle belleği serbest bırakmak otomatik değildir : başvurumu başlatmak, arabellek önbelleği dolduğunda bir dakika kadar sürebilir ( *), önbelleği temizledikten sonra (kullanarak echo 3 > /proc/sys/vm/drop_caches
) aynı uygulama neredeyse anında başlar.
(*) Uygulama başlangıç dakikası boyunca, uygulama yeni bellekte hata veriyor ancak Vtune'a göre çağrılan bir fonksiyonda zamanının% 100'ünü çekirdeğe harcıyor pageblock_pfn_to_page
. Bu işlev, devasa sayfalar bulmak için gereken bellek sıkıştırma ile ilgili gibi görünüyor, bu da bana parçalanmanın sorun olduğuna inanmamı sağlıyor.