Saya telah menggunakan unix cukup lama, dan selama beberapa tahun terakhir saya merasa swap adalah sebuah anakronisme, tetapi saya ingin tahu apa yang dipikirkan orang lain.
Argumen saya kira-kira ini (dengan asumsi tidak ada ulimit global atau pengaturan OOM yang berputar-putar):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
Untuk layanan apa pun yang disetel untuk performa, menurut saya, memahami batas atas penggunaan sumber dayanya akan menjadi kunci untuk menyetelnya sejak awal, sehingga Anda tahu seberapa banyak yang Anda butuhkan.
Saya tidak dapat membayangkan banyak situasi (beberapa, tetapi tidak banyak) di mana Anda akan menangguhkan proses yang sedang berjalan dan itu dapat bertukar untuk memberi ruang bagi hal-hal lain, tetapi Anda masih akan kehilangan soket jika Anda melakukan itu, jadi memaksa core-dump melalui gcc atau menyalin memori dengan tangan akan setara secara fungsional.
Saya pasti tidak ingin menukar pada sistem yang disematkan (meskipun mungkin memiliki ram yang tersedia lebih kecil), jika Anda kehabisan ram, saya lebih suka proses saya mati daripada merobek satu juta-tulis-per-sektor memori flash berkendara selama akhir pekan dengan meratakan sektor hingga ke titik terendah.
Adakah unix-beards di luar sana yang memiliki alasan kuat untuk terus bertukar?
UPDATE jawaban &&analisis:
-
DIKONFIRMASI? – fork() membutuhkan jumlah memori yang sama untuk proses anak seperti induknya
Fork() modern adalah copy-on-write untuk anak-anak di POSIX (secara umum), tetapi Linux dan FreeBSD secara khusus, dan saya mengasumsikan OSX dengan ekstrapolasi. Saya menganggap ini bagian dari bagasi anakronistik yang dibawa oleh swap.
Anehnya, artikel Solaris ini mengklaim bahwa meskipun Solaris menggunakan Copy-on-Write dengan fork(), Anda harus memiliki setidaknya 2x (!) ukuran proses induk dalam memori virtual gratis untuk fork() agar tidak keluar di tengah. Sedangkan elemen Solaris agak mematahkan argumen bahwa swap adalah anakronisme – saya pikir cukup banyak sistem operasi yang mengimplementasikan Kontrak Karya dengan benar sedemikian rupa sehingga lebih penting untuk menghilangkan mitos daripada menandainya sebagai pembenaran lebih lanjut untuk swap. Sejak. Mari kita hadapi itu. Pada titik ini orang-orang yang benar-benar menggunakan Solaris mungkin hanya orang-orang Oracle. Jangan tersinggung Solaris!
-
DIKONFIRMASI – File tmpfs/ramfs dapat ditukar sebagai kemudahan saat tmpfs/ramfs terisi
Jangan gunakan tmpfs/ramfs tanpa batas! Selalu tentukan secara eksplisit jumlah ram yang ingin Anda gunakan tmpfs/ramfs.
-
DAPAT DIGUNAKAN – Lakukan sedikit pertukaran 'berjaga-jaga'
Salah satu bos lama saya pernah memiliki pepatah yang bagus, 'Anda tidak tahu apa yang tidak Anda ketahui' – pada dasarnya, Anda tidak dapat membuat keputusan berdasarkan informasi yang belum Anda miliki. Ini adalah argumen yang masuk akal untuk swap kepada saya, namun - saya menduga bahwa jenis hal yang akan Anda lakukan untuk mendeteksi apakah aplikasi Anda bertukar atau tidak akan lebih berat daripada memeriksa untuk melihat apakah malloc() berhasil atau menangkap pengecualian dari a baru yang gagal ().
Ini mungkin berguna dalam kasus di mana Anda menjalankan desktop dan memiliki banyak hal acak yang terjadi, tetapi tetap saja – jika ada yang tidak beres, saya lebih suka itu menuai OOM daripada menyelam ke neraka swap. Itu hanya saya.
-
DIHAPUS! – Di Solar , tukar adalah penting karena beberapa alasan
tmpfs – menyatakan Jumlah ruang kosong yang tersedia untuk tmpfs bergantung pada jumlah ruang swap yang tidak terisi dalam sistem. Ukuran sistem file tmpfs tumbuh untuk mengakomodasi file yang ditulis padanya, tetapi ada beberapa pengorbanan yang melekat untuk pengguna berat tmpfs. Tmpfs berbagi sumber daya dengan segmen data dan tumpukan program yang dijalankan. Eksekusi program yang sangat besar dapat terpengaruh jika sistem file tmpfs mendekati ukuran maksimum yang diizinkan. Tmpfs bebas mengalokasikan semua kecuali 4MB ruang swap sistem.
Fakta dan mitos Solaris tentang swap – menyatakan Memori virtual saat ini terdiri dari jumlah total RAM fisik dan ruang swap pada disk. Solaris TIDAK memerlukan ruang swap untuk dikonfigurasi sama sekali. Jika Anda memilih opsi ini, setelah RAM penuh, Anda tidak akan dapat memulai proses baru. .
Saya tidak yakin apakah ini berarti bahwa peta virtual maksimum yang dapat Anda buat adalah ram+swap , atau jika Anda masih bisa melakukan sesuatu seperti mmap() file yang lebih besar dari ram dan mengandalkan inisialisasi malas mmap() .. Meskipun Anda mungkin dapat menjalankan Solaris hari ini dengan baik tanpa swap, sepertinya itu kurang ramah daripada sistem operasi POSIXy lainnya.
-
DIHAPUS! Alat hibernasi Linux yang populer tampaknya mengandalkan swap
Secara default, TuxOnIce sepertinya bergantung pada swap untuk hibernasi – meskipun ada backend lain. Namun, jika Anda tidak menjalankan kotak yang perlu hibernasi, saya akan tetap mendukung pernyataan bahwa 'swap adalah anakronistik di linux'
Jawaban yang Diterima:
Jangan bingung (yang) swap (sebagai area disk) dan (untuk) swap (sebagai metode untuk memindahkan halaman memori dari RAM ke disk dan secara timbal balik).
Pertukaran yang berlebihan adalah sesuatu yang harus dihindari karena alasan kinerja, tetapi memiliki area pertukaran tidak selalu menjadi masalah.
Pada sistem, seperti Linux, yang overcommit memori, yaitu yang memungkinkan proses mengalokasikan lebih banyak memori daripada yang tersedia, kehabisan RAM dengan swap yang tidak cukup untuk menangani situasi akan memicu pembunuh OOM. Anda harus memercayai algoritme yang digunakan untuk memilih proses yang "benar" untuk dimatikan, dan menerima satu atau lebih proses Anda untuk dimatikan tanpa diberi kesempatan untuk dimatikan dengan benar. Berikut adalah analogi terkenal yang menjelaskan mengapa pembunuh OOM mungkin bukan ide yang bagus sama sekali.
Pada sistem seperti Solaris, yang tidak melakukan overcommit memori, yaitu memastikan reservasi memori selalu didukung oleh memori virtual, baik dalam RAM atau pada disk, memiliki area swap yang memadai mutlak diperlukan jika tidak, bagian RAM yang berpotensi signifikan akan sia-sia.
Terkait:Linux – Tukar ukuran partisi untuk RAM 4GB?