Vm.swappiness parametresi gerçekten neyi kontrol ediyor?


36

Çekirdek belgelerine göre:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.

Ancak bu biraz belirsizdir. Sonunda parametrenin neyi kontrol ettiğini tam olarak anlamaya çalışıyorum. Çekirdeğin sayfaları ne kadar agresif bir şekilde değiştirmeye çalıştığını ayarladığını biliyorum, ancak çekirdek kodunda hangi karar verme sürecini etkiliyor?

Çekirdeğin yerini değiştirmeden önce bir sayfaya ne kadar süre önce erişilmesi gerektiğini ayarlıyor mu? Öyleyse, varsayılan 60 değeri neyi temsil eder? Ve 1'lik bir artış / azalma ile ne kadar değişti (bir formül iyi olurdu)?
Yoksa sayfaları erişim sıklıklarına göre değiştiriyor mu?
Veya başka bir şey?


1
Evet, swapiness olan belirsiz ;-)
ℝaphink

Yanıtlar:


27

Çekirdek 2.6.28 sürümünden bu yana, Linux bir Son Kullanılanlar Bölünmüş (LRU) sayfa değiştirme stratejisini kullanır. Program metni veya paylaşılan kütüphaneler gibi bir dosya sistemi kaynağına sahip sayfalar, dosya önbelleğine aittir. Dosya sistemi desteği olmayan sayfalara anonim sayfalar adı verilir ve uygulamalar vb. İçin ayrılmış yığın alanı gibi çalışma zamanı verilerinden oluşur. . Anonim sayfalarda dosya sistemi desteği bulunmadığından, depolanacak takas alanı olmadığı sürece, bir program tarafından ihtiyaç duyulduğu sürece bellekte kalmaları gerekir.

vm.swappinessSeçeneğini devreye giriyor get_scan_count()tanımlanan mm/vmscan.c. get_scan_count()Anonim ve dosya LRU listelerinin ne kadar agresif bir biçimde taranacak sayfaları ararken taranması gerektiğini belirler. Her bir vakanın değeri, sistemin değişen iş yükünü hesaba katmak için daha yeni referansların daha eski referanslardan daha fazla ağırlığa sahip olduğu yakın zamanda döndürülmüş ve yakın zamanda taranmış oranların değişken ortalaması ile belirlenir.

Bu vm.swappiness, dosya önbellek sayfalarının anonim sayfaların lehine değiştirilmesi arasındaki dengeyi değiştiren bir değiştiricidir. vm.swappinessisimsiz sayfalara verilen, varsayılan olarak 60 olarak ayarlanan öncelik değeridir . Dosya önbelleğine, vm.swappinessdeğiştiricinin çıkarıldığı ( file_prio=200-anon_prio) değerinden 200 öncelik değeri verilir . Bu, varsayılan olarak, öncelik ağırlıklarının adsız sayfaların ( anon_prio=60, file_prio=200-60=140) lehine ılımlı durduğu anlamına gelir . Ancak, sistem belleği yetersiz duruma yakın olduğunda, hem adsız hem de dosya LRU listeleri vm.swappinesssıfıra ayarlanmadıkça eşit olarak taranır .

Tüm vm.swappiness100'e ayarlanır, öncelikler (eşit olur anon_prio=100, file_prio=200-100=100). vm.swappinessSıfıra ayarlamak , çekirdeğin, dosya önbelleğindeki sayfalar lehine anonim sayfalar çıkarmasını önler.


File_prio'nun değiş tokuşunu değiştirmenin bir yolu var mı? Veya belirli bir dizine sınırlamak?
CMCDragonkai

13

Hangi sayfanın değiştirileceğini hesaplamak için kullanılan bir formül vardır. In vmscan.csize bu algoritmayı görebilirsiniz:

takas eğilimi = mapped_ratio / 2 + tehlike + vm_swappiness

Burada değiş tokuşun bazı algoritmalara eklenen bir ölçek olduğunu görebilir ve bu parametre ile çekirdeğin değişmesi gerektiğinde nasıl davranacağını kontrol edebilirsiniz. Bazı etkin olmayan bellek sayfalarının değiştirileceğini bir olasılık yüzdesi olarak görebilirsiniz. Değişkenliği 100 olarak ayarlarsanız, olasılık yoktur, ancak değiştirilebileceğinin garantisidir ve 0'a ayarlarsanız, çekirdek boş bir belleğe sahip olduğu sürece değiştirilmemeye çalışacaktır.


6

Asansörde “CLOSE DOOR” düğmesinin sık sık kırıldığı ya da hiçbir zaman ilk etapta bağlanmadığı söylenir (Bence Norman 1986). Bu, ersatz kontrol ünitesini asansörü manipüle etmenin bir yolu değil, aşırı acele edilmiş sürücüyü pasifize etmenin bir yolu yapar.

Benzer bir şekilde, takasın, bir çekirdek yükleminin iyi tanımlanmış, deterministik kontrolü ile ilgisi olmayan bir etkisi vardır. @Neon_overlord tarafından askubuntu.com'da belirtildiği gibi

Çünkü çoğu kişi değiş tokuş yapmanın kötü olduğuna ve değiş tokuş yapmazsanız sistemin gerçekten gerekmediğinde değiş tokuş edeceğine inanıyor. Bunların hiçbiri gerçekten doğru değil. İnsanlar takas sistemlerini tıkanmış zamanlarla ilişkilendirir - bununla birlikte çoğunlukla takas edilir, çünkü sistem tersine tıkanır, tersi olur. Takas işleminin gözle görülür bir ceza alabileceği belli zamanlar olduğu doğrudur, ancak bu durumda takasın azaltılması, daha sonra farkedilebilecek diğer şekillerde genel sistem performansını veya kararlılığı azaltabilir…

Peki gerçekten neyi kontrol ediyor? Geçerli bir cevap - önceden verilen hassas cevaplara ek olarak - sisteminiz üzerinde daha fazla kontrol sahibi olmanız ve bir topuzun titremesinin bu kontrolü anlamlı bir şekilde uygulamanıza izin vereceği yönündeki beklentinizi değiştirmesidir.

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.