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?
Jawaban:
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.swappiness
pilihan adalah pengubah yang mengubah keseimbangan antara menukar halaman cache file mendukung halaman anonim. Cache file diberi nilai prioritas arbitrer 200 dari manavm.swappiness
pengubah 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 dimm/vmscan.c
dalam pohon sumber kernel.Diberikan salah
vm.swappiness
satu100
, 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.swappiness
untuk0
akan 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.swappiness
harus didasarkan pada data tolok ukur yang sebanding dengan beban kerja nyata, bukan sekadar perasaan.sumber
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.
sumber
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
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.
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,
sumber