Mengapa kita perlu mengatur ruang swap dua kali lebih besar dari memori fisik kita?

11

Ketika kita ingin mengatur sistem linux, ada saran umum untuk mengatur ruang swap dua kali lebih besar dari memori fisik Anda. Saya ingin tahu mengapa kita membutuhkan ini, dan bagaimana saran ini muncul?

pengguna49137
sumber

Jawaban:

8

Jawaban singkatnya adalah "Anda tidak harus ".

Bergantung pada jenis kernel / sistem mungkin masuk akal untuk ukuran ruang swap seperti itu, misalnya dalam halaman tala FreeBSD (7) kita menemukan alasan berikut di balik ukuran swap setidaknya 2x ukuran memori fisik:

Anda biasanya harus mengubah ukuran ruang swap Anda menjadi sekitar 2x memori utama untuk sistem dengan RAM kurang dari 2GB, atau sekitar 1x memori utama jika Anda memiliki lebih banyak. Jika Anda tidak memiliki banyak RAM, Anda biasanya ingin swap lebih banyak. Anda tidak disarankan untuk mengkonfigurasi swap yang kurang dari 256 juta pada suatu sistem dan Anda harus mengingat ekspansi memori di masa mendatang ketika menentukan ukuran partisi swap. Algoritma paging VM kernel disetel untuk berkinerja terbaik ketika setidaknya ada 2x swap versus memori utama. Mengkonfigurasi terlalu sedikit swap dapat menyebabkan inefisiensi dalam kode pemindaian halaman VM serta membuat masalah di kemudian hari jika Anda menambahkan lebih banyak memori ke mesin Anda. Akhirnya, pada sistem yang lebih besar dengan beberapa disk SCSI (atau beberapa disk IDE yang beroperasi pada pengontrol yang berbeda), kami sangat menyarankan Anda mengkonfigurasi swap pada setiap drive. Partisi swap pada drive harus kira-kira berukuran sama. Kernel dapat menangani ukuran arbitrer tetapi struktur data internal berskala hingga 4 kali partisi swap terbesar. Menjaga partisi swap di dekat ukuran yang sama akan memungkinkan kernel untuk secara optimal menghapus ruang swap di seluruh disk N. Jangan khawatir tentang sedikit berlebihan, ruang swap adalah rahmat penghematan UNIX dan bahkan jika Anda biasanya tidak menggunakan banyak swap, itu dapat memberi Anda lebih banyak waktu untuk pulih dari program pelarian sebelum dipaksa untuk reboot. Menjaga partisi swap di dekat ukuran yang sama akan memungkinkan kernel untuk secara optimal menghapus ruang swap di seluruh disk N. Jangan khawatir tentang sedikit berlebihan, ruang swap adalah rahmat penghematan UNIX dan bahkan jika Anda biasanya tidak menggunakan banyak swap, itu dapat memberi Anda lebih banyak waktu untuk pulih dari program pelarian sebelum dipaksa untuk reboot. Menjaga partisi swap di dekat ukuran yang sama akan memungkinkan kernel untuk secara optimal menghapus ruang swap di seluruh disk N. Jangan khawatir tentang sedikit berlebihan, ruang swap adalah rahmat penghematan UNIX dan bahkan jika Anda biasanya tidak menggunakan banyak swap, itu dapat memberi Anda lebih banyak waktu untuk pulih dari program pelarian sebelum dipaksa untuk reboot.

Faktor-faktor lain mungkin penting ketika Anda memutuskan berapa banyak ruang swap untuk dialokasikan, di mana mengalokasikannya, dan sebagainya. Misalnya, jika Anda memasang server besar dengan memori fisik 128 GB, mungkin ide yang baik untuk menghindari pra-alokasi 256 GB ruang disk untuk swap yang tidak akan pernah digunakan.

Di sisi lain, memiliki beberapa ruang swap sering memungkinkan untuk mengambil dump kernel (misalnya di Open-, Net-, dan FreeBSD). Jadi itu ide yang baik untuk memiliki setidaknya ruang swap yang cukup untuk mengambil dump kernel penuh panik.

Tidak ada aturan absolut yang cocok untuk semua kasus. Anda harus membaca tentang perilaku sistem spesifik Anda, mempelajari cara kerjanya, memikirkan tujuan penggunaan sistem dan memutuskan ukuran ruang swap terbaik yang sesuai dengan kebutuhan Anda .

Giorgos Keramidas
sumber
5

Anda tidak perlu sama sekali. Windows versi lama akan memperlakukan setiap halaman dari memori yang dialokasikan sebagai dasarnya satu mmap pada file swap, jadi Anda membutuhkan setidaknya total ukuran RAM fisik Anda dalam swap agar berguna - ini tidak lagi terjadi hari ini, dan tidak pernah menjadi masalah saat ini. kasus di Linux, tetapi rumor itu tetap ada.

Namun, ada kasus di mana memiliki setidaknya swap sebanyak yang diinginkan - hibernasi. Karena Linux menggunakan file swap untuk hibernasi (alias, suspend-to-disk), Anda memerlukan swap yang cukup untuk menampung semua data dalam RAM, ditambah semua data yang sudah ditukar (minus RAM cache). Ini hanya kasus untuk mesin yang perlu hibernasi, seperti laptop, tentu saja.

Akhirnya, terlalu banyak bertukar bisa menjadi hal yang buruk , terlepas dari apa yang orang lain katakan. Pikirkan - jika Anda memiliki 4G RAM, dan di atas itu memerlukan 8G swap tambahan, apakah Anda pikir sistem Anda masih dapat digunakan, bagaimana dengan semua swapping ke / dari disk yang dilakukannya? Sering kali lebih baik untuk menghentikan proses memory-hogging ketika Anda kehabisan memori, daripada membiarkan seluruh sistem melambat ke level yang tidak dapat digunakan ketika ia mulai menghabiskan seluruh waktunya untuk mengatur data masuk dan keluar dari swap.

omong kosong
sumber
1

Dahulu kala, ada varian unix yang umum (saya pikir itu adalah BSD, tapi saya tidak dapat menemukan referensi sekarang) yang akan mengalokasikan setiap halaman memori virtual di ruang swap. Jadi jika Anda memiliki swap sebanyak RAM, ukuran memori virtual Anda masih akan sama dengan RAM Anda. Rekomendasi yang biasa kemudian adalah memiliki swap dua kali lebih banyak dari RAM, yang membuat memori virtual dua kali lebih besar dari RAM.

Unite modern tidak berperilaku seperti itu, jadi alasan aturannya usang (saya pikir itu sudah usang pada tahun 1992, jadi tidak pernah relevan untuk Linux). Tapi anehnya aturan itu bertahan. Jika Anda mengikutinya sekarang, Anda mendapatkan memori virtual yang tiga kali lipat dari jumlah RAM Anda, sedangkan maksud aslinya adalah mendapatkan dua kali lipat.

Hanya karena alasan historis di balik aturan itu salah bukan berarti itu bodoh. Ruang disk menjadi lebih murah, jadi masuk akal untuk mengalokasikan lebih banyak swap. Berapa banyak swap yang Anda miliki tergantung banyak pada berapa banyak RAM yang Anda miliki dan bagaimana Anda menggunakannya. Anda dapat menjalankan sistem tanpa swap, tetapi kemudian Anda tidak mendapatkan kesempatan untuk memilih program apa yang akan dimatikan jika RAM Anda terisi, dan sistem mungkin lebih lambat (kadang-kadang lebih baik menggunakan RAM untuk cache dan menukar beberapa memori program di luar). Mengalokasikan terlalu banyak swap membutuhkan sejumlah kecil RAM (untuk struktur data kernel) dan tentu saja ruang disk (tetapi saat ini biasanya sangat murah kecuali pada SSD). Diperlukan swap yang cukup untuk memenuhi semua memori virtual Anda jika Anda ingin hibernasi.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Windows juga melakukan hal itu: jika manajer memori memiliki ruang swap yang cukup, ia menyimpan di sana juga salinan halaman yang ada dalam memori (mulai dari yang paling baru dimodifikasi saya kira), jadi jika perlu menukar mereka, ia dapat melakukannya hanya dengan melemparkan halaman dari memori.
pqnet
0

Rekomendasi kuno yang didasarkan pada asumsi tentang kapasitas memori sistem yang khas, kecepatan bus memori vs kecepatan disk, dan persentase waktu yang dihabiskan proses di berbagai status tunggu. Saya ragu bahwa hari ini Anda menginginkan lebih dari 1/2 memori fisik dalam ruang swap - cukup untuk mencegah pembunuhan OOM acak ketika Anda menjalankan pemanfaatan memori penuh. Tetapi sepenuhnya tergantung pada beban kerja khas Anda, YMMV, dll.

llasram
sumber