Saya telah menggunakan unix selama beberapa waktu, dan selama beberapa tahun terakhir saya merasa pertukaran adalah sebuah anakronisme, tetapi saya ingin tahu apa yang dipikirkan orang lain.
Argumen saya kira-kira begini (dengan asumsi tidak ada global ulimit atau memutar-mutar pengaturan OOM):
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 kinerja, saya akan berpikir bahwa memahami batas atas penggunaan sumber daya itu akan menjadi kunci untuk menyetelnya terlebih dahulu, dalam hal ini Anda tahu berapa banyak yang Anda butuhkan.
Saya tidak bisa membayangkan banyak situasi (beberapa, tetapi tidak banyak) di mana Anda akan menunda proses yang sedang berjalan dan itu bisa bertukar keluar untuk memberikan ruang bagi hal-hal lain, tetapi Anda masih akan kehilangan soket Anda jika Anda melakukannya, sehingga memaksa core-dump via gcc atau menyalin memori dengan tangan akan setara secara fungsional.
Saya pasti tidak ingin swap pada sistem yang disematkan (walaupun mungkin memiliki ram yang tersedia lebih kecil), jika Anda kehabisan ram saya lebih suka proses saya mati daripada merobek memori flash sejuta-tulis-per-sektor berkendara selama akhir pekan dengan mengenakan-meratakan sektor ke inti.
Adakah unix-beard di luar sana yang memiliki alasan kuat untuk terus bertukar?
Jawaban && analisis UPDATE:
DIKONFIRMASI? - fork () membutuhkan jumlah memori yang sama untuk proses anak seperti induknya
Garpu modern () adalah copy-on-write untuk anak-anak di POSIX (secara umum), tetapi Linux dan FreeBSD khusus, dan saya mengasumsikan OSX dengan ekstrapolasi. Saya menganggap ini bagian dari bagasi anakronistis yang ditukar dengan barang bawaan itu.
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 () untuk tidak keluar di tengah. Sementara elemen Solaris agak membantah argumen bahwa swap adalah sebuah anakronisme - saya pikir cukup sistem operasi yang menerapkan KK 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 Oracle. Jangan tersinggung Solaris!
DIKONFIRMASI - file tmpfs / ramfs dapat digunakan untuk bertukar sebagai kenyamanan ketika tmpfs / ramfs terisi
Jangan gunakan tmpfs / ramf tanpa batas! Selalu secara eksplisit menentukan jumlah ram yang ingin Anda gunakan tmpfs / ramfs.
DAPAT DIAJUKAN - Miliki sedikit pertukaran 'berjaga-jaga'
Salah satu bos lama saya dulu sering berkata, 'Anda tidak tahu apa yang tidak Anda ketahui' - pada dasarnya, Anda tidak dapat membuat keputusan berdasarkan informasi yang belum Anda miliki. Namun, ini adalah argumen yang masuk akal untuk bertukar dengan saya - saya menduga 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 gagal baru ().
Ini mungkin berguna dalam kasus di mana Anda menjalankan desktop dan memiliki banyak hal acak yang terjadi, tetapi bahkan masih - jika sesuatu menjadi gila saya lebih suka itu OOM menuai daripada menyelam ke swap-neraka. Itu hanya aku.
PECAH! - Pada Solaris , Swap adalah penting untuk beberapa alasan
tmpfs - menyatakan Jumlah ruang kosong yang tersedia untuk tmpfs tergantung pada jumlah ruang swap yang tidak terisi dalam sistem. Ukuran sistem file tmpfs tumbuh untuk mengakomodasi file yang ditulis padanya, tetapi ada beberapa tradeoff yang melekat untuk pengguna berat tmpfs. Tmpfs berbagi sumber daya dengan segmen data dan tumpukan dari program yang dieksekusi. Eksekusi program yang sangat besar dapat terpengaruh jika sistem file tmpfs mendekati ukuran maksimum yang diizinkan. Tmpfs bebas untuk mengalokasikan semua kecuali 4MB ruang swap sistem.
Fakta dan mitos Solaris tentang swap - state 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 bergantung pada inisialisasi malas mmap () .. Sementara Anda mungkin dapat menjalankan Solaris hari ini dengan baik tanpa swap, sepertinya itu kurang ramah tentang hal itu daripada sistem operasi POSIXy lainnya.
PECAH! Alat hibernasi Linux populer tampaknya mengandalkan swap
Secara default, TuxOnIce sepertinya mengandalkan swap untuk hibernasi - meskipun ada backend lainnya. Namun, jika Anda tidak menjalankan kotak yang perlu hibernate, saya akan tetap mendukung pernyataan bahwa 'swap anacronistic on linux'