Bir çökme durumunda tutarlılık sağlamak için Linux 2.6'daki uygulamamda msync kullanıyorum. Msync kullanımımı iyice test etmem gerekiyor ama uygulama benim için tüm ilgili sayfaları yıkıyor gibi görünüyor. Mmap'd sayfalarının otomatik olarak temizlenmesini engellemek için disk üzerinde msync hatalı kullanımını açığa çıkarmanın bir yolu var mı?Son Linux kernellerinde msync kullanımını test etmenin iyi bir yolu nedir?
cevap
@samold'dan özür dileriz, "swappiness" ile ilgisi yoktur. Swappiness, kernelin, bellek az olduğunda sayfa önbellek sayfalarını tahrif etmek yerine kirli anonim sayfaları değiştirmeyi nasıl etkilediğini etkiler.
Linux VM tunables controlling the pdflush task ile oynamanız gerekiyor. Yeni başlayanlar için, ben öneririm:
Varsayılan olaraksysctl -w vm.dirty_writeback_centisecs=360000
, vm.dirty_writeback_centisecs
çekirdek "çok yaşlı" olarak 30 saniyeden daha herhangi kirli sayfa yaşlı düşünün ve diske bunu temizlemek için çalışacağız anlamına 3000'dir. En fazla 1 saat kadar çalıştırarak, en azından kısa bir test sırasında kirli sayfaları diske süpürmekten kaçınmalısınız. Varsayılan olarak
sysctl -w vm.dirty_background_ratio=80
... hariç vm.dirty_background_ratio
yüzde 10 gibi 10'dur. Bu, fiziksel belleğin yüzde 10'undan fazlasının kirli sayfalar tarafından işgal edildiği anlamına gelir; çekirdek, dirty_writeback_centisecs
'dan daha küçük olsa bile, diske bir şeyler atmakla meşgul olması gerektiğini düşünecektir. Bunu 80 veya 90'a kadar kranklayın ve çekirdek, RAM'in çoğunun kirli sayfalar tarafından işgal edilmesine tahammül etmeye hazır olmalıdır. Yalnız ... Varsayılan olarak
sysctl -w vm.dirty_ratio=90
, vm.dirty_ratio
, 40 olan bir kere tertibatı 40 (Bu çok Kimseyi bahis beri yüksek olsa da, şimdiye kadar bunu yapar ve garip davranışlar tetikleyebilir. Set olmaz) RAM'in% 'si kirli sayfalar, daha kirli sayfalar oluşturmaya çalışan süreçler bir şeyler tahliye edilinceye kadar numaralı bloğu engelleyecektir. Bunu her zaman dirty_background_ratio
'dan daha büyük yapın. Hm, bunu düşünmeye gel, bunu bir öncekine koy, sadece bunun her zaman daha büyük olduğundan emin olmak için.
Bu benim ilk önerim için. Çekirdeğiniz yine de sayfaları tahliye etmeye başlayabilir; Linux VM gizemli bir canavardır ve her sürümde çimdiklenmiş gibi görünüyor. Umarım bu bir başlangıç noktası sağlar.VM tunel öğelerinin tam listesi için çekirdek kaynaklarda bkz Documentation/sysctl/vm.txt. (Tercihen kullandığınız çekirdek sürümü için belgelere bakın.)
Son olarak, hangi sayfaların aslında kirli olduğunu görmek için /proc/PID/pagemap interface kullanın.
Birkaç tahmin:
Sen /proc/sys/vm/swappiness
tunable yoluyla sistemin swappiness ile oynama işini: (.. Vay proc(5)
bir yazım denetleyicisi ile çalıştırılması gerekiyor)
/proc/sys/vm/swappiness
The value in this file controls how aggressively the
kernel will swap memory pages. Higher values increase
agressiveness, lower values descrease aggressiveness.
The default value is 60.
swappiness
'un 0
'a ayarlanması işlemi yapmazsanız, daha ayarlanabilir düğmeler vardır; Documentation/laptops/laptop-mode.txt
dosya laptop_mode
scriptin davranışlarının iyi bir açıklamasını içerir:
To increase the effectiveness of the laptop_mode strategy, the laptop_mode
control script increases dirty_expire_centisecs and dirty_writeback_centisecs in
/proc/sys/vm to about 10 minutes (by default), which means that pages that are
dirtied are not forced to be written to disk as often. The control script also
changes the dirty background ratio, so that background writeback of dirty pages
is not done anymore. Combined with a higher commit value (also 10 minutes) for
ext3 or ReiserFS filesystems (also done automatically by the control script),
this results in concentration of disk activity in a small time interval which
occurs only once every 10 minutes, or whenever the disk is forced to spin up by
a cache miss. The disk can then be spun down in the periods of inactivity.
Onların aşırı bu numaraları almak isteyebilirsiniz
; Uygulamanızın davranışını gerçekten merak ediyorsanız, bu değerleri oldukça yüksek bir değere ayarlamak ve hepsi bittiğinde bir sync(1)
komutunun ne kadar sürdüğünü görmek mantıklı geliyor. Fakat bunlar sistem çapında akortçulardır - diğer uygulamalar çok mutlu olmayabilir.
- 1. Bir RedirectToAction'ı test etmenin en iyi yolu nedir?
- 2. Spring-Batch'de iş akışını test etmenin en iyi yolu nedir?
- 3. Birleştirmeyi test etmeden Laravel'de bir denetleyiciyi test etmenin en iyi yolu nedir?
- 4. Son eklenen satırın kimliğini elde etmenin en iyi yolu SQLite
- 5. Bir dosyayı görmek için test etmenin hızlı bir yolu nedir?
- 6. RSPec Denetleyici özelliklerinde RJS'yi test etmenin en iyi yolu?
- 7. Bir üst düzey işlev içinde tanımlanan iç işlevleri test etmenin ve etkileşimin en iyi yolu nedir?
- 8. C++ kullanarak linux içinde bir dosyanın varlığını ve dosya izinlerini kontrol etmenin en iyi yolu nedir
- 9. Bir Yerel iOS Uygulamasını React etmenin en iyi yolu nedir?
- 10. Film dosyalarından kapalı altyazı elde etmenin en iyi yolu nedir?
- 11. , ayrıştırılmış json haritalarını eşitlik açısından test etmenin iyi bir yolu nedir?
- 12. 'link_to' ve diğer görüntü yardımcılarını raylar konsolundan test etmenin iyi bir yolu nedir?
- 13. Coffeescript'te sınıf üyeliğini test etmenin en kolay yolu nedir?
- 14. C++ 'da bellek sızıntılarını kontrol etmenin en iyi yolu nedir?
- 15. Perl'de UTC ofsetini elde etmenin en iyi yolu nedir?
- 16. Perl'de zaman matematiği ile baş etmenin en iyi yolu nedir?
- 17. Reaktif redüksiyonda getirme hatasıyla baş etmenin en iyi yolu nedir?
- 18. XHR2 dosya yükleme desteğini kontrol etmenin en iyi yolu nedir?
- 19. Renk kullanmadan matplotlib'deki yoğunluğu temsil etmenin en iyi yolu nedir?
- 20. Perl dizisinin son N öğelerini elde etmenin en iyi yolu nedir?
- 21. TensorFlow'da başka bir tensör tarafından kısmen indekslenen bir dilim elde etmenin iyi bir yolu nedir?
- 22. Google uygulama motoru uygulamasını optimize etmenin/optimize etmenin en iyi yolu nedir?
- 23. "isForEachable" için bir değişken test etmenin bir yolu var mı
- 24. Perl uygulamasını dağıtmanın iyi bir yolu nedir?
- 25. SQLAlchemy Bağlantısını test etmenin bir yolu var mı?
- 26. HTTP üzerinden iletişim kuran bir birimi test etmenin iyi yolları
- 27. Eşitlik açısından test edilebilecek değerler içerdiğinde iki Opsiyon eşitliğini test etmenin en çılgın yolu nedir?
- 28. Denemekten kaçınmanın en iyi yolu nedir?
- 29. Bir tuple'ın Python'da boş/Hiçbir değeri olup olmadığını kontrol etmenin en iyi yolu nedir?
- 30. Test Oranı için iyi bir kod nedir?
Bu, belirtildiği gibi soruna bir cevap gibi görünüyor, ama sanırım yanlış soruyu sordum. Gerçekten sevdiğim şey, otomatik temizleme olmadığında (en kötü durum için benim varsayımım olan), kapatıldıktan/kapatıldıktan sonra dosyanın içeriğinin nasıl olacağını görmek için bir yoldur. Ancak, sayfalar temizlenmediyse bile, anladığımdan dolayı değişiklikler diğer süreçlere yansıtılabilir. Soru şu ki, akışsız değişiklikler hariç dosyanın anlık görüntüsünü nasıl alabilirim? Mmap için sahte bir sarmalayıcı yazdığım için mutluyum, ancak bu, tekerleği yeniden icat etmek istemiyorum. – user836336
O_DIRECT, sayfa önbelleğini atlayan bir dosyayı okumanıza izin verecek, ancak sayfanın önbelleğe alınmasının ne gibi bir etkisinin olacağından emin değilim ... Ve tüm bu okumaların 512 baytlık olması gerektiğini unutmayın (ya da 4096) ? Unuttum). Bu ayarlar arasında (kirli sayfaları temizlemeyi önlemek için),/proc/PID/pagemap (hangi sayfaların kirli olduğunu belirlemek için) ve O_DIRECT (dosya verilerini doğrudan diskten oku), istediğiniz şeyi elde edebilirsiniz . – Nemo