Mengapa swappiness diatur ke 60 secara default?

109

Saya baru saja membaca beberapa hal tentang swappiness di Linux. Saya tidak mengerti mengapa pengaturan default ke 60.

Menurut saya parameter ini harus diatur ke 10 untuk mengurangi swap. Swap ada di hard drive saya sehingga kami jauh lebih lambat dari memori saya.

Mengapa mereka mengkonfigurasi kernel seperti itu?

Hugo
sumber
2
@Mat Lihat ini untuk cara melakukan pembandingan swappiness.
Geremia

Jawaban:

133

Sejak kernel 2.6.28, Linux menggunakan strategi penggantian halaman Split Least Recent Used (LRU). Halaman dengan sumber sistem file, seperti teks program atau pustaka bersama milik cache file. Halaman tanpa dukungan filesystem disebut halaman anonim, dan terdiri dari data runtime seperti ruang stack yang disediakan untuk aplikasi, dll. Biasanya halaman yang termasuk dalam cache file lebih murah untuk diusir dari memori (karena ini dapat dengan mudah dibaca kembali dari disk bila diperlukan) . Karena halaman anonim tidak memiliki dukungan sistem file, mereka harus tetap dalam memori selama mereka diperlukan oleh suatu program kecuali ada ruang swap untuk menyimpannya.

Ini adalah kesalahpahaman umum bahwa partisi swap entah bagaimana akan memperlambat sistem Anda. Tidak memiliki partisi swap tidak berarti bahwa kernel tidak akan mengusir halaman dari memori, itu hanya berarti bahwa kernel memiliki lebih sedikit pilihan dalam hal halaman mana yang akan diusir. Jumlah swap yang tersedia tidak akan mempengaruhi seberapa banyak swap digunakan.

Linux dapat mengatasi ketiadaan ruang swap karena, secara default, kebijakan akunting memori kernel mungkin membuat terlalu banyak memori . Kelemahannya adalah ketika kehabisan memori fisik, dan kernel tidak dapat menukar halaman anonim ke disk, mekanisme pembunuh-kehabisan memori (pembunuh-OOM) akan mulai membunuh proses "nakal" yang memonopoli memori untuk membebaskan memori untuk proses lainnya.

The vm.swappinesspilihan adalah pengubah yang mengubah keseimbangan antara menukar halaman cache file mendukung halaman anonim. Cache file diberi nilai prioritas arbitrer 200 dari mana vm.swappinesspengubah dikurangi ( file_prio=200-vm.swappiness). Halaman anonim, secara default, mulai dengan 60 ( anon_prio=vm.swappiness). Ini berarti bahwa, secara default, bobot prioritas cukup mendukung halaman anonim ( anon_prio=60, file_prio=200-60=140). Perilaku didefinisikan di mm/vmscan.cdalam pohon sumber kernel.

Diberikan salah vm.swappinesssatu 100, prioritas akan sama ( file_prio=200-100=100, anon_prio=100). Ini masuk akal untuk sistem berat I / O jika tidak ingin halaman dari file cache digusur demi halaman anonim.

Pengaturan sebaliknya vm.swappinessuntuk 0akan mencegah kernel mengusir halaman anonim demi halaman dari cache file. Ini mungkin berguna jika program melakukan sebagian besar caching mereka sendiri, yang mungkin terjadi pada beberapa database. Dalam sistem desktop ini mungkin meningkatkan interaktivitas, tetapi downside adalah bahwa kinerja I / O kemungkinan akan terkena dampak.

Nilai default kemungkinan besar dipilih sebagai perkiraan jalan tengah antara dua ekstrem ini. Seperti halnya parameter kinerja apa pun, penyesuaian vm.swappinessharus didasarkan pada data tolok ukur yang sebanding dengan beban kerja nyata, bukan sekadar perasaan.

Thomas Nyman
sumber
4
Bagaimana menginstal OS pada perangkat solid state mempengaruhi pengorbanan?
gerrit
3
@gerrit Jenis media penyimpanan yang mendasarinya tidak relevan. Detail seperti itu tidak terlihat oleh subsistem manajemen memori.
Thomas Nyman
Jenis media penyimpanan yang mendasarinya tidak relevan dari perspektif penggunaan memori. Anda dapat mempertimbangkan menurunkan swappiness yang didukung media dalam jumlah terbatas baca / tulis (yaitu memori flash) untuk meningkatkan umur panjangnya.
MatrixManAtYrService
2
@MatrixManAtYrService Berkat level-aus internal dan redundansi bawaan, SSD modern (yang mengacu pada pertanyaan dalam komentar sebelumnya) telah terbukti bertahan hingga 2 PB (!) Dari penulisan sebelum menunjukkan kesalahan. Bahkan drive yang lebih murah dalam percobaan itu berlangsung selama 300TB sebelum kesalahan terjadi, jauh melampaui peringkat garansi resmi sekitar 100TB. Setidaknya menurut saya menyesuaikan swappiness untuk mengakomodasi SSD pada workstation atau laptop tidak benar-benar dijamin.
Thomas Nyman
2
@ThomasNyman Anda membuat poin yang bagus, bagi sebagian besar pengguna itu tidak perlu dikhawatirkan. Kasing yang membawa saya ke pos ini melibatkan ruang swap pada kartu SD, yang saya kenali adalah kasing tepi.
MatrixManAtYrService
9

Masalahnya adalah tidak ada satu nilai default yang sesuai dengan semua kebutuhan. Mengatur opsi swappiness ke 10 mungkin merupakan pengaturan yang sesuai untuk desktop, tetapi nilai default 60 mungkin lebih cocok untuk server. Dengan kata lain swappiness perlu diubah sesuai dengan use case - desktop vs server, tipe aplikasi dan sebagainya.

Lebih lanjut, kernel Linux menggunakan memori untuk cache disk jika tidak maka RAM tidak akan digunakan dan ini tidak efisien dan dimaksudkan. Memiliki data disk dalam cache berarti bahwa jika sesuatu memerlukan data yang sama lagi, kemungkinan akan mendapatkannya dari memori. Mengambil data dari sana jauh lebih cepat daripada mendapatkannya dari disk lagi. Dan opsi swappiness adalah mekanisme berapa banyak kernel Linux lebih suka bertukar ke disk untuk mengecilkan cache disk. Haruskah lebih baik menghapus data yang lebih lama dari cache atau harusnya menukar beberapa halaman program?

Artikel ini juga dapat menjelaskan topik ini. Terutama, bagaimana kecenderungan swapping diperkirakan.

dsmsk80
sumber
Saya tidak mengerti mengapa 60 lebih cocok untuk server. Saya punya server dan beberapa proses masuk swap bahkan jika kita memiliki 40% dari RAM freem. tidak masuk akal bagi saya.
Hugo
7
Masuk akal untuk memindahkan bagian dari memori ke swap jika sangat tidak mungkin bahwa mereka akan diakses, dengan cara itu Linux menyimpan sebanyak mungkin ram yang sebenarnya agar siap untuk situasi ketika benar-benar membutuhkannya.
ulangan
Tautan ke artikel sudah mati tetapi Anda masih dapat melihatnya dari Mesin Wayback
drs
Artikel yang ditautkan bersifat informatif. Terima kasih telah membagikannya.
Pistos
5

Menambahkan lebih detail pada jawaban di atas.
Karena kita menggunakan VM semakin banyak, host linux mungkin merupakan vm di salah satu lingkungan cloud ini. Dalam kedua contoh 1 & 2 kami mendapat ide bagus tentang aplikasi yang berjalan dan berapa banyak RAM yang mereka konsumsi. Di 3, tidak begitu banyak

  • Contoh 1
    Awan pribadi berkinerja tinggi (kira-kira semacam bank membayar jutaan untuk) awan di mana disk disediakan oleh array penyimpanan yang sangat mahal dengan IO SANGAT baik. Sebagian dari penyimpanan itu mungkin dalam RAM (dalam array disk) yang didukung oleh disk SSD, didukung oleh disk biasa dengan spindel. Dalam situasi ini, disk yang dilihat VM mungkin hanya sedikit lebih lambat daripada RAM yang dapat diakses. Untuk vm tunggal tidak ada banyak perbedaan antara swap dan ram.
  • Contoh 2
    Sama seperti contoh 1 tetapi bukannya satu vm Anda memiliki ratusan, ribuan atau lebih. Dalam situasi ini kami mengetahui bahwa server (hypervisor) RAM murah dan berlimpah di mana penyimpanan RAM mahal (relatif berbicara). Jika kita membagi persyaratan RAM antara Hypervisor RAM dan SWAP yang disediakan oleh array penyimpanan kami yang sangat mahal, kami menemukan bahwa kami dengan cepat menggunakan semua RAM dalam array penyimpanan, blok-blok kemudian dilayani oleh SSD dan akhirnya oleh spindle. Tiba-tiba setiap awal menjadi sangat lambat. Dalam hal ini kami mungkin ingin menetapkan banyak RAM (dari hypervisor) ke VM dan mengatur swappiness ke 0 (hanya swap untuk menghindari kondisi memori) karena efek kumulatif dari semua vm itu akan berpengaruh pada kinerja penyimpanan,
  • Contoh 3 Laptop atau desktop modern mungkin dengan SSD. Persyaratan memori dianggap tidak dikenal. Browser mana yang akan digunakan pengguna, berapa banyak tab yang akan mereka buka, apakah mereka juga akan mengedit dokumen, gambar RAW atau mungkin video, mereka semua akan mengkonsumsi RAM. Mengatur swappiness ke nilai yang rendah dan melakukan tweak sistem file lainnya akan berarti bahwa ada lebih sedikit penulisan ke SSD sehingga akan bertahan lebih lama.
Timotius c
sumber
3
Perhatian daya tahan tulis SSD untuk sistem pengguna akhir dinilai terlalu tinggi. SSD modern biasanya bertahan dalam volume menulis ratusan terabyte. Sistem desktop yang khas bahkan dengan penggunaan swap yang berat tidak mungkin digunakan sebanyak itu selama bertahun-tahun beroperasi.
Jules