Mengapa kebanyakan orang merekomendasikan untuk mengurangi swappiness menjadi 10-20?


65

Saya telah melihat di beberapa situs yang merekomendasikan untuk mengurangi swappiness menjadi 10-20 untuk kinerja yang lebih baik.

Apakah ini mitos atau bukan? Apakah ini aturan umum? Saya memiliki laptop dengan Ram 4GB dan 128GB SSD, apa nilai yang Anda rekomendasikan untuk swappiness saya?

Terima kasih.


5
Situs-situs yang Anda daftarkan tidak menjelaskan mengapa mereka merekomendasikan untuk mengubah default. Jawabannya di sini jauh lebih baik, untuk pilihan rumit tentang masalah rumit ini.
nealmcb

Jawaban:


88

Karena kebanyakan percaya bahwa bertukar = buruk dan bahwa jika Anda tidak mengurangi swappiness, sistem akan bertukar ketika itu benar-benar tidak perlu. Tak satu pun dari itu benar. Orang-orang mengasosiasikan swapping dengan waktu di mana sistem mereka macet - namun, kebanyakan bertukar karena sistem macet, bukan sebaliknya. Ketika sistem bertukar, itu sudah memperhitungkan biaya kinerja dalam keputusannya untuk bertukar, dan memutuskan bahwa tidak melakukannya akan memiliki penalti keseluruhan yang lebih besar dalam kinerja atau stabilitas sistem.

Secara keseluruhan, pengaturan default menghasilkan kinerja dan stabilitas keseluruhan yang baik. Saya akan merekomendasikan untuk membiarkannya di default. Ada jalan lebih lanjut untuk Linux untuk meningkatkan manajemen memorinya untuk menyelesaikan beberapa kasus tepi, tetapi pada umumnya kontrol swappiness bukanlah solusi yang baik - sesuaikan dalam satu arah dan Anda dapat memperbaiki satu masalah dan membuat masalah lain. Jika memungkinkan, cukup pasang lebih banyak RAM fisik (dan biarkan swappiness sendiri) mengatasi semua solusi lainnya.

Bagaimana Linux menggunakan RAM

RAM apa pun yang tidak digunakan oleh aplikasi dapat digunakan sebagai "cache". Cache penting untuk sistem yang cepat dan lancar, mempercepat baca dan tulis ke disk.

Jika aplikasi Anda meningkatkan penggunaan memori hingga mencapai hampir semua RAM Anda gunakan, cache Anda akan menyusut dan sebagai hasilnya rata-rata operasi disk akan melambat. Tidak cukup hanya memiliki puluhan megabyte, atau kurang, untuk cache saat ini.

Jika aplikasi meningkatkan penggunaan memori mereka lebih jauh - dengan asumsi Anda tidak memiliki ruang swap - Anda tidak hanya tidak memiliki ruang untuk cache tetapi Anda akhirnya akan kehabisan memori dan sistem Anda harus mematikan proses yang sedang berjalan. Proses membunuh lebih buruk daripada memperlambat karena memberi Anda sistem yang tidak stabil dan tidak dapat diprediksi.

Bagaimana Linux menggunakan swap

Untuk mengatasi kedua masalah ini, sistem Anda dapat mengalokasikan kembali beberapa memori aplikasi yang jarang digunakan untuk ruang swap pada disk Anda, membebaskan RAM. RAM tambahan dapat mencegah proses mati karena kehabisan memori, dan dapat mengambil kembali sedikit cache sehingga operasi disk dapat beroperasi lebih lancar.

Alokasi ulang ini tidak dilakukan sesuai dengan cutoff yang pasti. Anda tidak mencapai persentase alokasi tertentu setelah Linux mulai bertukar. Ini memiliki algoritma "fuzzy". Dibutuhkan banyak hal untuk diperhitungkan, yang dapat dijelaskan dengan "berapa banyak tekanan yang ada untuk alokasi memori". Jika ada banyak "tekanan" untuk mengalokasikan memori baru, maka itu akan meningkatkan peluang beberapa akan ditukar untuk membuat lebih banyak ruang. Jika ada sedikit "tekanan" maka itu akan mengurangi peluang ini.

Sistem Anda memiliki pengaturan "swappiness" yang membantu Anda mengubah cara "tekanan" ini dihitung. Ini sering secara keliru direpresentasikan sebagai "persentase RAM" tetapi tidak, itu hanya nilai yang digunakan sebagai bagian dari formula. Nilai sekitar 40 hingga 60 adalah nilai waras yang direkomendasikan, 60 menjadi standar saat ini.

Membiarkan sistem Anda bertukar ketika harus secara keseluruhan adalah hal yang sangat baik, bahkan jika Anda memiliki banyak RAM. Membiarkan sistem Anda bertukar jika perlu memberi Anda ketenangan pikiran bahwa jika Anda pernah mengalami situasi memori rendah bahkan sementara (sambil menjalankan proses singkat yang menggunakan banyak memori), sistem Anda memiliki kesempatan kedua untuk menjaga semuanya berjalan. Jika Anda bertindak terlalu jauh dengan menonaktifkan swapping sepenuhnya, maka Anda berisiko proses mati karena tidak dapat mengalokasikan memori.

Apa yang terjadi ketika sistem macet dan bertukar banyak?

Swapping adalah operasi yang lambat dan mahal, jadi sistem menghindarinya kecuali jika menghitung bahwa trade-off dalam kinerja cache akan menebusnya secara keseluruhan, atau jika perlu untuk menghindari proses mematikan.

Banyak kali orang akan melihat sistem mereka yang meronta-ronta disk dan menggunakan banyak ruang swap dan menyalahkan menukar untuk itu. Itu pendekatan yang salah untuk diambil. Jika bertukar mencapai ekstrim ini, itu berarti bertukar adalah upaya sistem Anda untuk mengatasi masalah memori yang rendah, bukan penyebab masalah, dan bahwa tanpa bertukar proses berjalan Anda akan mati secara acak.

Bagaimana dengan sistem desktop? Tidakkah mereka membutuhkan pendekatan yang berbeda?

Pengguna sistem desktop memang mengharapkan sistem untuk "merasa responsif" dalam menanggapi tindakan yang diprakarsai pengguna seperti membuka aplikasi, yang merupakan jenis tindakan yang kadang-kadang dapat memicu swap karena peningkatan memori yang diperlukan.

Salah satu cara beberapa orang mencoba untuk men-tweak ini adalah dengan mengurangi parameter swappiness yang dapat meningkatkan toleransi sistem untuk aplikasi yang menggunakan memori dan kehabisan ruang cache.

Namun, ini hanya mengubah tiang gawang. Aplikasi pertama sekarang dapat memuat tanpa operasi swap, tetapi itu akan meninggalkan lebih sedikit kelonggaran untuk aplikasi berikutnya yang memuat. Swapping yang sama mungkin baru saja terjadi nanti, saat Anda selanjutnya membuka aplikasi. Sementara itu, kinerja sistem secara keseluruhan lebih rendah karena ukuran cache berkurang. Dengan demikian, setiap manfaat dari pengaturan swappiness berkurang mungkin sulit untuk diukur, mengurangi penundaan swapping pada beberapa waktu tetapi menyebabkan kinerja lambat lainnya di waktu lain. Mengurangi sedikit swappiness mungkin dibenarkan jika Anda tahu apa yang Anda lakukan, tetapi menguranginya serendah 10% dapat membuat sistem toleran terhadap ukuran cache yang sangat rendah dan membuat sistem lebih bertanggung jawab untuk bertukar dengan pemberitahuan singkat.

Menonaktifkan swap sepenuhnya harus dihindari karena Anda kehilangan perlindungan tambahan terhadap kondisi kehabisan memori yang dapat menyebabkan proses macet atau terbunuh.

Obat yang paling efektif sejauh ini adalah menginstal lebih banyak RAM jika Anda mampu membelinya.

Bisakah swap dinonaktifkan pada sistem yang memiliki banyak RAM?

Jika Anda memiliki RAM jauh lebih banyak daripada yang mungkin Anda perlukan untuk aplikasi, maka Anda jarang akan perlu swap. Menonaktifkan swap mungkin sebagian besar waktu tidak akan membuat perbedaan. Tetapi jika Anda memiliki banyak RAM, membiarkan swap diaktifkan juga tidak akan dikenakan penalti karena sistem tidak bertukar ketika tidak perlu.

Satu-satunya situasi di mana itu akan membuat perbedaan akan berada dalam situasi yang tidak mungkin sistem menemukan dirinya kehabisan memori dan akibatnya sistem cache semakin terhambat, dan itu dalam situasi seperti ini di mana Anda ingin bertukar paling. Jadi Anda dapat dengan aman meninggalkan swap pada pengaturan normal untuk menambah ketenangan pikiran tanpa itu memiliki efek negatif ketika Anda memiliki banyak memori.

Tetapi bagaimana cara swap mempercepat sistem saya? Tidak menukar hal-hal lambat?

Tindakan mentransfer data dari RAM ke swap adalah operasi yang lambat, tetapi hanya diambil ketika kernel cukup yakin manfaat keseluruhan sebagai hasil dari menjaga ukuran cache yang masuk akal akan lebih besar daripada ini.

Setelah data dalam swap, kapan keluar lagi?

Setiap bagian dari memori akan keluar dari swap segera setelah digunakan - baca atau tulis. Namun, biasanya memori yang ditukar adalah memori yang belum diakses dalam waktu lama dan diperkirakan tidak akan dibutuhkan segera.

Mentransfer data dari swap sama memakan waktu dengan memasukkannya ke sana. Kernel Anda tidak akan menghapus data dari itu jika tidak perlu. Sementara data di swap dan tidak digunakan, ia meninggalkan lebih banyak memori untuk hal-hal lain yang sedang digunakan, dan cache sistem yang lebih.

Apakah ada kasus di mana mengurangi swappiness sesuai?

Iya. Jika Anda menjalankan server yang didedikasikan untuk satu aplikasi server tertentu yang tidak mendapat manfaat dari cache sistem. Beberapa server database seperti server Oracle, MySQL / MariaDB merekomendasikan dalam beberapa kasus mengurangi swappiness menjadi 1 hingga 10 karena mesin database ini menggunakan caching mereka sendiri.

Perhatikan bahwa ini benar hanya jika sistem Anda didedikasikan untuk satu tugas itu, dan dalam kasus MySQL / MariaDB hanya jika Anda menggunakan murni InnoDB atau XtraDB, dan bukan MyISAM atau Aria, dll.


Terima kasih atas uraian lengkapnya. Saya pikir dalam kasus saya (Ram 4GB dan 128GB SSD keras) dan dengan penggunaan saya (pengembangan Java EE dan beberapa os in vitual box) swappiness = 20 cocok. Bagaimana menurut anda?
Saeed Zarinfam

Saya pikir default 60 akan menjadi yang terbaik, menurut saya.
thomasrutter

4
@BlancaHiggins apakah Anda membaca pos yang Anda komentari? Komentar Anda sepertinya tidak menggambarkan apa yang sebenarnya dilakukan swappiness.
thomasrutter

1
Ini jawaban yang sangat bagus. Terima kasih banyak atas penjelasannya.
Dan Barron

2
Bagian dari info di SwapFaq itu menyesatkan menurut saya: menetapkannya ke 100 akan "secara agresif" bertukar. Saya pikir ini lebih akurat untuk mengatakan bahwa ini adalah pengaturan yang sangat hati-hati, pro-aktif, bertukar pada tanda pertama bahwa memori atau cache yang tersedia semakin sedikit rendah. Sedangkan pengaturan rendah seperti 10 lebih berisiko, pengaturan thrillseeking, menghindari melakukan swapping sampai memori yang tersedia sangat rendah dan cache hampir sepenuhnya hilang, meninggalkan sistem tanpa banyak ruang gerak.
thomasrutter

14

Pada desktop biasa, Anda memiliki 4-5 tugas aktif yang menghabiskan 50-60% memori. Jika Anda menetapkan swappiness ke 60, maka sekitar 1 / 4-1 / 3 dari halaman tugas AKTIF akan diganti. Itu berarti, untuk setiap perubahan tugas, untuk setiap tab baru yang Anda buka, untuk setiap eksekusi JS, akan ada proses swapping.

Solusinya adalah dengan menetapkan swappiness ke 10. Dengan pengamatan praktis, ini menyebabkan sistem melepaskan cache io disk (yang tidak banyak berperan di desktop, karena cache baca / tulis hampir tidak digunakan sama sekali. Kecuali jika Anda terus-menerus menyalin BESAR file) alih-alih mendorong apa pun ke swap. Dalam praktiknya, itu berarti sistem akan menolak untuk menukar halaman, memotong io cache sebagai gantinya, kecuali jika itu mencapai 90% memori yang digunakan. Dan itu pada gilirannya berarti pengalaman desktop yang mulus, tanpa swap, dan cepat.

Pada file server, bagaimanapun, saya akan mengatur swappiness ke 60 atau bahkan lebih, karena server tidak memiliki tugas-tugas latar depan aktif besar yang harus disimpan dalam memori secara keseluruhan, tetapi lebih banyak proses yang lebih kecil yang bekerja atau tidur, dan tidak benar-benar mengubah keadaan mereka segera. Sebaliknya, server sering menyajikan (maaf) data yang sama persis kepada klien, membuat cache io cache jauh lebih berharga. Jadi di server, jauh lebih baik untuk menukar proses tidur, membebaskan ruang memori untuk permintaan cache disk.

Pada desktop, bagaimanapun, pengaturan yang tepat ini mengarah ke menukar blok memori aplikasi NYATA, yang hampir selalu memodifikasi atau mengakses data ini.

Anehnya, browser sering menyimpan potongan memori besar, yang terus-menerus mereka modifikasi. Ketika potongan-potongan seperti itu ditukar, dibutuhkan beberapa saat jika mereka diminta kembali - dan pada saat yang sama, browser keluar memperbarui cache-nya. Yang menyebabkan latensi besar. Dalam praktiknya, Anda akan duduk selama 2 menit menunggu satu halaman web di tab baru dimuat.

Desktop tidak terlalu peduli dengan disk io, karena desktop jarang membaca dan menulis cacheable yang mengulang sebagian besar data. Memotong disk io hanya untuk mencegah pertukaran sebanyak mungkin jauh lebih disukai untuk desktop, daripada memiliki 30% memori yang dicadangkan untuk cache disk dengan 30% RAM (penuh blok milik aplikasi yang aktif digunakan) diganti.

Cukup luncurkan htop, buka browser, GIMP, LibreOffice - muat beberapa dokumen di sana lalu telusuri selama beberapa jam. Sangat mudah.


3
+1 untuk deskripsi perbedaan server vs desktop. Tembolok disk server dapat dilakukan pada bidang disk.
Dee

Jika ini masalahnya, mengapa versi server dan desktop Ubuntu default ke swappiness of 60? Jika apa yang Anda nyatakan benar, maka akan lebih masuk akal jika versi desktop diberikan standar 20 atau bahkan 10, tetapi tidak.
JAB

1
Referensi untuk implikasi bahwa swappiness adalah persentase ram langsung yang ditukar? Saya tidak berpikir itu berfungsi seperti itu.
Xen2050

1
Tidak. Swappiness tidak terkait dengan persentase RAM. Ini adalah tombol yang mengubah algoritma fuzzy menjadi lebih atau kurang mungkin untuk bertukar dalam situasi masalah yang diberikan. Saya juga berpikir deskripsi beban kerja server vs desktop dalam jawaban ini membuat banyak asumsi yang tidak selalu berlaku.
thomasrutter

9

Jika Anda menjalankan server Java pada sistem Linux Anda, Anda harus benar-benar mempertimbangkan mengurangi swappiness jauh dari nilai default 60. Jadi 20 memang merupakan awal yang baik. Swapping adalah pembunuh untuk proses pengumpulan sampah karena koleksi setiap kali perlu menyentuh sebagian besar memori proses. OS tidak memiliki sarana untuk mendeteksi proses seperti itu dan mendapatkan hal yang tepat untuk mereka. Ini adalah praktik terbaik untuk menghindari bertukar sebanyak mungkin untuk server aplikasi yang produktif.


Memang benar bahwa jika Anda mendedikasikan server untuk beban kerja khusus yang Anda tahu tidak akan mendapat manfaat dari cache sistem (seperti server database) maka mengurangi swappiness mungkin masuk akal. Saya tidak berpikir bahwa pengumpulan sampah adalah kasus yang cukup khusus. Jika memori sering disentuh, itu tidak akan ditukar, itu akan disimpan dalam RAM fisik. Satu-satunya saat ini bukan masalahnya adalah jika Anda memiliki situasi memori rendah yang parah - dan bertukar tidak bertanggung jawab.
thomasrutter

4

Saya akan menyarankan untuk melakukan beberapa percobaan sementara monitor sistem terbuka untuk melihat dengan tepat berapa banyak beban mesin Anda, saya juga menjalankan dengan memori 4GB dan 128GB SSD sehingga mengubah nilai swappiness menjadi 10 yang tidak hanya meningkatkan kinerja sementara di bawah beban tetapi sebagai bonus juga akan meningkatkan umur drive SSD karena akan kurang menulis.

Untuk tutorial video sederhana tentang cara melakukan ini dengan penjelasan lengkap, lihat video YouTube di bawah ini

http://youtu.be/i6WihsFKJ7Q


1
Video hebat yang Anda buat, tetapi video itu tidak benar-benar menjawab pertanyaan secara langsung, ini lebih merupakan sebuah cara mengubah swappiness.
jmunsch

1 untuk petunjuk masa pakai SSD, untuk SSD adalah yang terbaik jika sistem sebanyak mungkin hanya baca, sisanya harus tetap dalam memori dan hari ini, memori biasanya bukan masalah besar pada PC desktop saat ini.
Dee

3

Saya ingin menambahkan beberapa perspektif dari insinyur Big Data Performance untuk memberi orang lain lebih banyak latar belakang tentang teknologi 2017.

Pengalaman pribadi saya adalah bahwa walaupun saya biasanya menonaktifkan swapping untuk menjamin bahwa sistem saya berjalan dengan kecepatan maksimal, di stasiun kerja saya untuk masalah tertentu, saya telah menemukan bahwa swappiness 1 dan 10 mengarah pada pembekuan (selamanya) dan jeda lama. Swappiness of 80 untuk aplikasi khusus ini menghasilkan kinerja yang jauh lebih baik dan jeda yang lebih pendek dari standar (60). Perhatikan bahwa saya memiliki 8GB RAM dan 4x 256GB swap yang didukung oleh 1 HDD. Saya biasanya akan menyatakan statistik yang tepat terlihat pada tolok ukur saya dan spesifikasi perangkat keras lengkap, tetapi saya belum melakukan apa pun dan ini adalah desktop low-end baru-baru ini yang tidak penting di sini.

Kembali ke perusahaan saya sebelumnya, alasan kami tidak mengaktifkan swappiness di server Spark dengan [500GB ke 4TB] x [10-100] node adalah bahwa kami melihat kinerja yang buruk sebagai tanda untuk mendesain ulang pipa data dan struktur data secara lebih efisien cara. Kami juga tidak ingin membandingkan HDD / SSD. Juga, menukar banyak RAM akan membutuhkan 10-30 disk per node dengan penulisan paralel untuk meminimalkan waktu akses disk.

Hari ini, 20 tahun yang lalu dan 20 tahun di masa depan, kasus ini akan tetap ada beberapa masalah yang terlalu besar untuk RAM. Dengan waktu dan uang tanpa batas, kita dapat membeli / menyewakan lebih banyak perangkat keras atau mendesain ulang setiap proses untuk mendapatkan kinerja ke tingkat yang diinginkan. Bertukar hanyalah peretasan untuk memungkinkan kita mengabaikan masalah sebenarnya (kita tidak memiliki cukup ram dan kita tidak ingin menghabiskan lebih banyak uang).

Bagi mereka yang berpikir swappiness lebih tinggi adalah saran yang buruk, berikut adalah sedikit perspektif. Di masa lalu, HD hanya memiliki beberapa kb cache jika ada. Antarmuka adalah IDE / Parallel ATA. Bus CPU juga jauh lebih lambat bersama dengan RAM dan banyak hal lainnya. Singkatnya, sistem sangat lambat (relatif terhadap hari ini) dalam segala hal. Beberapa tahun yang lalu, HDD menggunakan SATA3. Hari ini, mereka menggunakan protokol NVMe, yang memiliki peningkatan latensi yang signifikan. HD memiliki banyak MB cache. Dan bagian yang paling menarik adalah ketika Anda menggunakan SSD modern (ketahanan dan kinerja baca / tulis yang jauh lebih stabil) dengan NVMe atau PCIe sebagai penyimpanan swap Anda. Ini adalah kompromi terbaik antara biaya dan kinerja. Tolong jangan coba ini dengan SSD murah atau lama.

Tukar + SSD! Dengan penyimpanan volatile berkinerja tinggi, saya sangat merekomendasikan untuk bereksperimen dengan nilai swappiness tinggi. Ini terutama tergantung pada pola akses memori (secara acak mengakses semua memori vs jarang mengakses sebagian besar), penggunaan memori, jika bandwidth disk sudah jenuh, dan biaya aktual meronta-ronta.


1

Bisa jadi banyak perilaku swapping yang dirasakan saat startup atau saat membuka program adalah linux membaca file konfigurasi dll dari disk. Jadi mungkin yang terbaik adalah menggunakan program monitor sistem sebelum berasumsi bahwa akses hard drive disebabkan oleh swapping.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.