Neden takas varsayılan olarak 60'a ayarlanmıştır?


109

Sadece Linux'ta swappiness hakkında bir şeyler okudum. Varsayılan ayarın neden 60 olarak ayarlandığını anlamıyorum.

Bana göre takas miktarını azaltmak için bu parametre 10 olarak ayarlanmalıdır. Değişim sabit disklerimde olduğu için hafızamdan çok daha yavaş.

Çekirdeği neden böyle yapılandırdılar?


2
Bkz @Mat Bu swappiness karşılaştırmayı nasıl yapılacağı için.
Geremia

Yanıtlar:


133

2.6.28 numaralı çekirdekten beri Linux, En Son Kullanılan En Son Bölünmüş (LRU) sayfa değiştirme stratejisini kullanıyor. 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. Genellikle dosya önbelleğine ait sayfalar bellekten çıkarmak için daha ucuzdur (bunlar gerektiğinde diskten okunması kolay olabilir) . Anonim sayfalarda dosya sistemi desteği bulunmadığından, depolanacak takas alanı olmadığı sürece, bir programın ihtiyaç duyduğu süre boyunca bellekte kalmaları gerekir.

Takas bölümünün bir şekilde sisteminizi yavaşlatması yaygın bir yanılgıdır . Bir takas bölümünün olmaması, çekirdeğin sayfaları bellekten çıkarmayacağı anlamına gelmez, sadece çekirdeğin hangi sayfaların tahliye edileceği konusunda daha az seçeneğe sahip olduğu anlamına gelir. Mevcut takas miktarı ne kadar kullanıldığını etkilemeyecektir.

Linux, takas alanının yokluğuyla başa çıkabilir, çünkü varsayılan olarak çekirdek bellek muhasebesi politikası belleği aşabilir . Dezavantajı, fiziksel bellek tükendiğinde ve çekirdeğin anonim sayfaları diske değiştiremediği durumlarda, bellek dışı-katil (OOM-katil) mekanizmasının bellek boşaltma için "hileli" işlemleri öldürmeye başlaması diğer işlemler

Bu vm.swappinessseçenek, dosya önbellek sayfalarının değiştirilmesini anonim sayfaların lehine değiştiren bir değiştiricidir. Dosya önbelleğine, vm.swappinessdeğiştiriciden düşüldüğü ( file_prio=200-vm.swappiness) keyfi bir öncelik değeri 200 verilir . Anonim sayfalar, varsayılan olarak, 60 ( anon_prio=vm.swappiness) ile başlar . 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 . Davranış mm/vmscan.cçekirdek kaynak ağacında tanımlanmıştır .

Bir Verilen vm.swappinessait 100, öncelikler (eşit olacağını file_prio=200-100=100, anon_prio=100). Dosya önbelleğindeki sayfaların isimsiz sayfalar lehine çıkarılmasını istemiyorsa, bu bir G / Ç ağır sistemi için anlamlı olacaktır.

Tersine ayarı vm.swappinessiçin 0dosya önbellekten sayfalarda lehine anonim sayfaları kovması Kernel'den önleyecektir. Bu, programlar kendi önbelleklemelerinin çoğunu yaparsa, bazı veritabanlarında olduğu gibi faydalı olabilir. Masaüstü sistemlerde bu etkileşimi artırabilir, ancak olumsuz tarafı, G / Ç performansının büyük olasılıkla etkileyeceğidir.

Varsayılan değer büyük olasılıkla bu iki uç nokta arasında yaklaşık bir orta alan olarak seçilmiştir. Herhangi bir performans parametresinde olduğu gibi, ayarlamalar vm.swappinessyalnızca bir içgüdü duygusu değil gerçek iş yükleriyle karşılaştırılabilir kıyaslama verilerine dayanmalıdır.


4
İşletim sistemini katı hal cihazına kurmak tradeoff'ı nasıl etkiler?
gerrit

3
@gerrit Altta yatan depolama ortamının türü önemli değildir. Bu tür bir detay bellek yönetimi alt sistemi tarafından görülmez.
Thomas Nyman

Altta yatan depolama ortamının türü, bir bellek kullanımı açısından ilgisizdir. Uzun ömürlülüğünü arttırmak için ortamın sınırlı miktarda okuma / yazma (yani flash bellek) desteklediği değiş tokuşları azaltmayı düşünebilirsiniz.
MatrixManAtYrService

2
@MatrixManAtYrService İç aşınma dengelemesi ve dahili artıklık sayesinde, modern SSD'lerin (önceki yorumdaki sorunun atıfta bulunduğu) hataları göstermeden önce 2 PB'ye (!) Kadar dayandığı gösterilmiştir . Bu deneylerde daha ucuz sürücüler bile, hataların ortaya çıkmasından önce, 100TB civarında resmi garanti derecesinin çok ötesinde, 300TB'ye kadar sürdü. En azından benim görüşüme göre, iş istasyonlarında veya dizüstü bilgisayarlarda bir SSD'ye uyum sağlamak için swappiness ayarlama gerçekten garanti edilmez.
Thomas Nyman

2
@ThomasNyman iyi bir noktaya değindi, çoğu kullanıcı için endişelenmeye değmez. Beni bu göreve getiren dava, benim tanıdığım bir SD kartındaki takas alanını biraz etkiledi.
MatrixManAtYrService

9

Sorun, tüm ihtiyaçlara uyacak tek bir varsayılan değer olmamasıdır. Değiştirme seçeneğinin 10 olarak ayarlanması masaüstleri için uygun bir ayar olabilir, ancak 60'ın varsayılan değeri sunucular için daha uygun olabilir. Başka bir deyişle, kullanım durumuna göre masaüstü kullanımının değişmesi gerekir - masaüstü vs. sunucu, uygulama tipi vb.

Ayrıca, Linux çekirdeği disk önbelleği için bellek kullanır, aksi takdirde RAM kullanılmaz ve bu verimli ve amaçlanan değildir. Önbellekte disk verilerinin olması, bir şeylerin aynı veriye tekrar ihtiyaç duyması durumunda büyük olasılıkla bellekten alacağı anlamına gelir. Verileri oradan almak, tekrar diskten almaktan daha hızlıdır. Takas seçeneği, Linux çekirdeğinin, disk önbelleğini küçültmek için diske ne kadar yer değiştirmesini tercih ettiği bir mekanizmadır. Eski verileri önbellekten mi kaldırmalı yoksa bazı program sayfalarını mı değiştirmeli?

Bu makale konuya da ışık tutabilir. Özellikle değiş tokuş eğiliminin nasıl tahmin edildiği.


60'ın neden sunucular için daha uygun olduğunu anlamıyorum. Sunucularım var ve% 40 freem RAM'imiz olsa bile bazı işlemler takas işlemine giriyor. benim için anlamlı değil.
Hugo,

7
Erişilmeleri çok düşük bir ihtimal ise, bellekte yer alan parçaları takas haline getirmek mantıklı geliyor, bu şekilde Linux gerçekte ihtiyaç duyduğu durumlara hazır olmak için mümkün olan en fazla ramı serbest tutar.
tekrar


Makalenin bağlantısı
kesildi

Bağlantılı makale bilgilendiricidir. Paylaştığın için teşekkürler.
Pistos

5

Yukarıdaki cevaplara daha fazla detay eklemek.
VM'leri gittikçe daha fazla kullandığımız için, linux ana bilgisayarı bu bulut ortamlarından birinde vm olabilir. Her iki örnekte de 1 & 2 çalışmakta olan uygulamalar ve ne kadar RAM tükettikleri hakkında iyi bir fikrimiz var. 3'te, çok değil

  • Örnek 1
    Yüksek performanslı bir özel bulut (çoğu bankanın milyonlarca para ödeyeceğini düşünün), diskin VERY good IO özelliğine sahip çok pahalı bir depolama dizisi tarafından sağlandığı yer. Bu depolamanın bir kısmı, SSD diskleri tarafından desteklenen, iğleri olan normal disklerle desteklenen RAM'de (disk dizisinde) olabilir. Bu durumda, VM'nin gördüğü disk erişebildiği RAM’den yalnızca biraz daha yavaş olabilir. Tek bir vm için takas ve koç arasında fazla bir fark yoktur.
  • Örnek 2
    Örnek 1'dekiyle aynı, ancak tek bir vm yerine yüzlerce, binlerce veya daha fazla var. Bu durumda, RAM'in (nispeten konuşulan) pahalı olduğu durumlarda sunucunun (hiper yönetici) RAM'in ucuz ve bol olduğunu bulduk. RAM gereksinimlerini çok pahalı depolama dizimizin sağladığı Hypervisor RAM ve SWAP arasında bölersek, tüm RAM'leri depolama dizisinde hızlı bir şekilde kullandığımızı görüyoruz, bloklar SSD'ler ve nihayet miller tarafından sunuluyor. Aniden her başlar çok yavaşlıyor. Bu durumda, muhtemelen VM’e bol miktarda RAM (hiper denetleyiciden) atamak ve değiş tokuşu 0’a ayarlamak (sadece bellek koşullarından kaçınmak için takas etmek), tüm bu vms’lerin toplam etkisi üzerinde etkili olacaktır. depo,
  • Örnek 3 Muhtemelen SSD'li modern bir dizüstü bilgisayar ya da masaüstü. Hafıza gereksinimleri bilinmemektedir. Kullanıcı hangi tarayıcıyı kullanacak, kaç tane sekme açacak, bir belge, bir RAW resim veya muhtemelen bir video da düzenleyeceklerse, hepsi RAM'i tüketeceklerdir. Değişimin düşük bir değere ayarlanması ve diğer dosya sistemi ayarlarının yapılması SSD'ye daha az yazma olduğu ve bu yüzden daha uzun süreceği anlamına gelir.

3
SSD bir son kullanıcı sistemi için dayanıklılık endişelerini yazmaktadır. Modern SSD'ler tipik olarak, yüzlerce terabaytlık hacimlerden kurtulurlar. Yoğun takas kullanımında bile tipik bir masaüstü sisteminin uzun yıllar boyunca bu kadarını kullanması pek mümkün değildir.
Jules
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.