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'
Jawaban:
Jangan membingungkan swap (sebagai) area disk) dan (untuk) swap (sebagai metode untuk memindahkan halaman memori dari RAM ke disk dan secara timbal balik).
Swapping yang berlebihan adalah sesuatu yang harus dihindari karena alasan kinerja tetapi memiliki area swap tidak selalu menjadi masalah.
Pada sistem, seperti Linux, memori overcommit, yaitu yang memungkinkan proses mengalokasikan lebih banyak memori daripada yang tersedia, kehabisan RAM dengan pertukaran yang tidak cukup untuk menangani situasi akan memicu pembunuh OOM. Anda harus memercayai algoritma yang digunakan untuk memilih proses "benar" untuk dibunuh, dan menerima satu atau lebih proses Anda untuk dibunuh tanpa diberi kesempatan untuk mematikan dengan benar. Berikut adalah analogi terkenal yang menjelaskan mengapa pembunuh OOM mungkin bukan ide yang baik sama sekali.
Pada sistem seperti Solaris, yang tidak overcommit memori, yaitu yang memastikan reservasi memori selalu didukung oleh memori virtual, apakah dalam RAM atau pada disk, memiliki area swap yang memadai mutlak diperlukan jika tidak, bagian berpotensi signifikan dari RAM akan menjadi terbuang.
sumber
Saya tahu satu alasan untuk terus bertukar. Saya memiliki aplikasi yang membutuhkan banyak memori yang dapat saya konfigurasi untuk sistem saya. Ia menggunakan Hadoop, yang pada satu bagian dari pemrosesan melakukan fork dan exec untuk menjalankan perintah unix tunggal (saya pikir "uname" atau "user" atau sesuatu yang mereka tidak dapat menemukan yang setara dengan Java). Tampaknya java tidak melakukan vfork dengan menyalin pada semantik tulis seperti aplikasi asli. Jika saya memulai aplikasi saya menggunakan 4Gb RAM, ketika garpu, garpu menggunakan 4Gb RAM lain, tetapi kemudian dengan cepat melepaskannya. Jika saya tidak memiliki swap 4Gb untuk Hadoop untuk bertukar, saya harus membayar untuk 8Gb RAM hanya untuk memiliki 4Gb untuk aplikasi saya.
sumber
files_struct
, thestruct signals
, thetask_struct
,, dan lainnya). Juga, banyak halaman yang dapat dieksekusi bukan kode posisi-tergantung (PIC) dan dengan demikian halaman-halaman kode yang dapat dieksekusi yang dimodifikasi oleh loader dinamis (ld-linux.so
) harus memiliki ruang swap disediakan untuk mereka bahkan jika tidak ada yang ditulis untuk swap ruang segera. Itu sebabnya saya suka Linux; Anda dapat mematikan swap dan sistem masih berjalan. :)Saya tidak bisa menambah diskusi secara teknis, tetapi saya bisa memberikan beberapa contoh. Notebook lama saya (RAM 2GB RAM kunbuntu) biasanya berjalan dengan swap pada 0. Ketika saya menjalankan transmisi (klien bittorrent) dengan sejumlah torrent yang secara kolektif dapat menggunakan 100 koneksi, swap saya dapat naik. Semakin buruk ketika saya menjalankan XP vm yang menggunakan memori nyata 1GB.
Saya telah melihat orang lain berkomentar bahwa proses intensif memori seperti rendering grafis juga dapat masuk ke swap. Jika Anda hanya melakukannya sesekali, maka itu bukan masalah.
Sejauh masalah OOM, swap sebenarnya bisa menjadi penyelamat karena memberi Anda waktu antara mengidentifikasi masalah dan hal-hal yang terjadi di selatan. Banyak hal yang menggunakan hampir seluruh ingatan saya, jadi saya tidak memperhatikan hal itu, tetapi ketika swap mulai berjalan saya perhatikan itu dan mulai mencari masalah - sebelum itu menggigit saya.
sumber
Ada satu aplikasi yang sangat bagus untuk ruang swap: ekstensi RAM dengan meletakkan ruang swap pada perangkat penyimpanan yang menggunakan RAM, untuk mengatasi keterbatasan RAM sistem yang dapat diinstal
Lihat http://techreport.com/articles.x/16255 gadgest ini pada dasarnya antarmuka dari S-ATA ke DDR2-RAM. Anda bisa memasukkan RAM hingga 64GB ke dalamnya. Dengan menempatkan ruang swap pada salah satu dari mereka Anda mendapatkan beberapa RAM tambahan yang signifikan. Tentu saja itu tidak secepat RAM sistem biasa. Tapi itu semacam mengubah sistem RAM menjadi semacam lapisan cache tambahan.
sumber
Saya sudah menjalankan Linux dan Windows tanpa swap (file paging, dalam nomenklatur Windows), pada notebook / desktop dengan 4Gb atau lebih. Ada beberapa kesempatan ketika kehabisan memori terjadi, saya hanya berurusan dengan mereka. Saya merasa sistem ini lebih cepat, yang lebih saya pedulikan. Tidak ada persyaratan khusus pada beban kerja saya.
Hal yang saya pelajari:
sumber
Saya pikir argumen Anda cukup valid untuk server , di mana kinerjanya penting, dan mengetahui aplikasi mana yang akan bertindak selanjutnya mungkin tidak dapat diprediksi.
Namun untuk desktop , saya menemukan swap berguna ketika saya mendorong dan menjalankan tugas.
Misalnya, jika saya mengerjakan tugas menggunakan aplikasi
A
dan kemudian saya menemukan saya perlu menggunakan aplikasiB
untuk sesuatu (baik sub-tugas, atau gangguan), maka secara mental lebih mudah bagi saya untuk membiarkanA
swap ke disk saat saya bekerja masukB
daripada menutupA
dan kemudian ingat untuk memulainya lagi setelah itu.Ini terutama benar jika
A
memegang beberapa negara yang belum disimpan yang tidak akan dipulihkan saat dihidupkan ulang.Apakah lebih cepat untuk mendorong dan menarik
A
ke / dari swap, atau menutup dan memulai kembali, tergantung pada aplikasi. (Beberapa berhasil memiliki startup lambat tetapi ukuran perumahan kecil.)Namun saya setuju bahwa solusi yang lebih baik untuk meningkatkan produktivitas adalah dengan menginstal beberapa RAM tambahan.
sumber
Pada sistem saya, / tmp tumpah untuk menukar jika gobbles RAM terlalu banyak.
Ini jauh lebih cepat daripada menggunakan sistem file nyata untuk / tmp.
sumber
Ada banyak alasan, ketika swap digunakan.
Biasanya, ketika sistem tidak memiliki cukup memori fisik, kernel dapat meletakkan beberapa aplikasi (bahkan - beberapa bagian dari memori yang digunakan oleh tidak menjalankan aplikasi) untuk bertukar.
Kemudian, ketika aplikasi ini harus melakukan sesuatu (misalnya, beberapa data tiba pada soket atau beberapa penghitung waktu) - kernel akan menempatkan beberapa aplikasi lain untuk swap.
Contoh lain dari penggunaan swap ditangguhkan ke disk.
Mengenai perangkat yang disematkan, semuanya dapat dibagi pada (setidaknya) dua kelompok besar:
Tentu saja, ada perangkat yang hanya menjalankan beberapa kode (semacam mikrokontroler) dll. Saya tidak akan menjelaskannya karena perangkat semacam itu tidak memiliki OS, jadi membahas pertukaran tidak masuk akal untuk perangkat semacam itu.
Grup pertama perangkat yang disematkan (menjalankan beberapa OS) dapat menggunakan (dan biasanya mereka menggunakan) swap. Dan secara umum, perangkat tersebut menggunakan swap dengan cara yang sama seperti desktop dan server.
Grup kedua perangkat (menjalankan RTOS) tidak menggunakan swap sama sekali, karena RTOS memiliki keterbatasan waktu untuk merespons pada acara, dan
BTW, ada banyak deskripsi tentang bagaimana linux menggunakan swap, salah satunya adalah http://distilledb.com/blog/archives/date/2009/02/22/swap-files-in-linux.page
Windows menggunakan pendekatan serupa.
sumber
Sepertinya saya bahwa baik hibernasi dan tidur hybrid memerlukan ruang swap di Linux .
Saya tidak pernah menggunakan ruang swap / partisi di Linux sampai dihadapkan dengan kebutuhan untuk menggunakan Hybrid Sleep - karena sleep pada level baterai kritis tidak tersedia di sistem saya, seperti yang ditangani oleh Upower, yang hanya memilih antara Shut-Down, Hibernate dan Hybrid -tidur. (lebih lanjut di sini )
sumber
Beberapa kegunaan baik yang saya lihat adalah proses yang menggunakan banyak memori, tetapi tidak kritis terhadap kinerja. Satu kasus adalah Firefox kuno yang memiliki kebocoran memori buruk. Itu akan mengisi RAM dan melimpah untuk menukar tanpa efek buruk. Satu lagi yang kami miliki adalah potongan DNS rekursif kami (yang dengan cepat membangun cache besar yang jarang digunakan).
Penjelasan lain yang pernah saya lihat tentang swap berlari agak di sepanjang baris: "Anda diberitahu untuk selalu mengkonfigurasi SWAP = 2 * RAM. Ini omong kosong, tidak ada hubungan antara RAM dan swap. Swap adalah untuk mengakomodasi lonjakan dalam penggunaan memori. , Anda harus menambahkan memori yang cukup sehingga sebagian besar waktu Anda muat di RAM. Jika beban Anda stabil, Anda tidak perlu swap. Jika beban Anda sangat bervariasi, Anda perlu swap yang cukup untuk paku, dan atur agar swap digunakan jarang cukup sehingga tidak mempengaruhi kinerja secara keseluruhan secara keseluruhan. Meringkas, karena Anda tidak tahu apa lonjakan beban Anda, dan karena disk jauh lebih murah daripada RAM, lakukan konfigurasi SWAP = 2 * RAM. "
Beberapa versi lama Solaris tidak dapat menggunakan swap sama sekali kecuali ada setidaknya swap sebanyak RAM (saya ingat bahwa itu mengalokasikan ruang swap tetap untuk keluar dari RAM atau sesuatu seperti itu), jadi 2 * RAM benar-benar sekitar batas minimum yang masuk akal nilai. Tapi itu ribuan tahun yang lalu, ketika mesin besar kami memiliki 64 MiB RAM dan disk 1 GiB ...
sumber