it-swarm-id.com

Mengapa menggunakan swap ketika ada lebih dari cukup ruang kosong dalam RAM?

Menggunakan swap space bukannya RAM can melambat secara drastis a PC.

Jadi mengapa, ketika saya memiliki lebih dari cukup RAM tersedia, apakah sistem Linux saya (Arch) menggunakan swap?

Lihat output conky saya di bawah ini:

conky output

Juga, mungkinkah ini penyebab masalah kecepatan dan responsif sistem yang saya alami?

Output dari free -m:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          1257       1004        252          0         51        778
-/+ buffers/cache:        174       1082
Swap:          502        144        357
132
Stefan

Adalah normal bagi sistem Linux untuk menggunakan beberapa bertukar walaupun masih ada RAM gratis. Kernel Linux akan berpindah untuk menukar halaman memori yang sangat jarang digunakan (misalnya , contoh getty ketika Anda hanya menggunakan X11, dan beberapa daemon tidak aktif lainnya).

Penggunaan ruang swap menjadi masalah hanya ketika tidak ada cukup RAM tersedia, dan kernel dipaksa untuk terus memindahkan halaman memori untuk bertukar dan kembali ke RAM, hanya untuk menjaga aplikasi tetap berjalan. Dalam hal ini, aplikasi monitor sistem akan menunjukkan banyak aktivitas I/O disk.

Sebagai perbandingan, sistem Ubuntu 10.04 saya, dengan dua pengguna yang masuk dengan sesi X11 menjalankan desktop GNOME, menggunakan ~ 600MB swap dan ~ 1GB RAM (tidak termasuk buffer dan cache fs), jadi Saya akan mengatakan bahwa angka Anda untuk penggunaan swap terlihat normal.

96
Riccardo Murri

Perilaku ini dapat dikonfigurasi dengan menetapkan nilai:

/proc/sys/vm/swappiness

Nilai default adalah 60. Mengaturnya ke 0 berarti tidak pernah menggunakan swap saat masih ada RAM tersisa dan 100 sedang menukar memori sesegera mungkin.

Untuk mengubah nilai sementara (hilang saat reboot):

Sudo sysctl vm.swappiness=10

Untuk mengubah nilai secara permanen, edit file:

/etc/sysctl.conf

sebagai root (mis. Sudo nano /etc/sysctl.conf) dan ubah atau tambahkan (jika tidak ada) baris:

vm.swappiness

ke nilai yang diinginkan. Jika file ini tidak ada (mis. Di Arch Linux), maka coba /etc/sysctl.d/99-sysctl.conf sebagai gantinya.

Ada beberapa perdebatan tentang apakah menukar dengan memori bebas yang tersedia baik atau buruk, tetapi bantuan Ubuntu memang merekomendasikan nilai 10 untuk sistem Desktop . Lihat juga tutorial tentang Digital Ocean for CentOS .

96
Marcel Stimberg

Linux mulai bertukar sebelum RAM terisi. Hal ini dilakukan untuk meningkatkan kinerja dan daya tanggap:

  • Kinerja meningkat karena kadang-kadang RAM lebih baik digunakan untuk cache disk daripada untuk menyimpan memori program. Jadi lebih baik untuk menukar program yang tidak aktif untuk sementara waktu, dan alih-alih menyimpan file yang sering digunakan di cache.

  • Responsiveness ditingkatkan dengan menukar halaman ketika sistem idle, daripada ketika memori penuh dan beberapa program sedang berjalan dan meminta lebih banyak RAM untuk menyelesaikan tugas.

Bertukar tidak memperlambat sistem, tentu saja - tetapi alternatif untuk bertukar tidak bertukar, itu memiliki lebih banyak RAM atau menggunakan lebih sedikit RAM.

Ini adalah pos lama, bagaimanapun, saya masih akan mengambil kebebasan untuk meletakkan pikiran saya di sini.

Mulai dari bawah, Linux akan membagi memori menjadi beberapa halaman (biasanya 4K per halaman pada sistem x86_64). Setelah itu, memori virtual dibuat, yang pemetaannya dilakukan dengan memori fisik menggunakan MMU (Memory Management Unit).

Proses dialokasikan memori dari area memori virtual, jadi harap dicatat, ketika Anda melihat/proc/meminfo, Anda akan melihat VMalloc * sebagai detail memori virtual.

Katakanlah Anda memiliki proses yang meminta memori (katakanlah 300MB - browser web). Proses akan dialokasikan 300MB dari memori virtual, namun, tidak perlu itu dipetakan memori (yang dipetakan ke memori fisik). Ada konsep "Copy on Write" untuk manajemen memori, di mana, jika proses Anda benar-benar menggunakan memori yang dialokasikan dari memori virtual (yaitu melakukan beberapa penulisan pada memori), hanya kemudian dipetakan ke memori fisik. Ini membantu kernel untuk bekerja dengan baik di lingkungan multi-proses secara efisien.

Apa itu cache?

Banyak memori yang digunakan oleh proses dibagikan. Katakanlah pustaka glibc digunakan oleh hampir semua proses. Apa gunanya menyimpan banyak salinan glibc dalam memori, ketika setiap proses dapat mengakses lokasi memori yang sama dan melakukan pekerjaan itu. Sumber daya yang sering digunakan seperti itu disimpan dalam cache sehingga ketika memproses permintaan, mereka dapat dirujuk ke lokasi memori yang sama. Ini membantu mempercepat proses, karena membaca glibc (dll.) Lagi & lagi dari disk akan memakan waktu.

Di atas adalah untuk pustaka bersama, katakanlah, serupa juga berlaku untuk membaca file. Jika Anda membaca file besar (katakanlah 100-200MB) untuk pertama kalinya, itu akan memakan banyak waktu. Namun, ketika Anda mencoba dan melakukan baca yang sama lagi, itu akan lebih cepat. Data di-cache dalam memori, dan membaca ulang tidak dilakukan untuk semua blok.

Apa itu buffer?

Sejauh menyangkut buffer, ketika suatu proses melakukan file I/O, itu bergantung pada buffer kernel untuk menulis data ke disk. Proses, meminta kernel untuk melakukan pekerjaan. Jadi, atas nama proses, kernel menulis data ke "buffer" -nya, dan memberi tahu proses bahwa penulisan dilakukan. Dengan cara async, kernel akan terus menyinkronkan data ini dalam buffer ke disk. Dengan cara ini, proses bergantung pada kernel untuk memilih waktu yang tepat untuk menyinkronkan data ke disk, dan proses dapat terus bekerja di depan. Ingat, ini adalah I/O umum yang dilakukan proses normal. Namun, proses khusus, yang perlu mengkonfirmasi bahwa I/O sebenarnya dilakukan pada disk dapat menggunakan mekanisme lain untuk melakukan I/O pada disk. Beberapa utilitas opensource adalah libaio. Juga, ada cara untuk memanggil sinkronisasi eksplisit ke FD yang dibuka dalam konteks proses Anda, sehingga Anda memaksa kernel kernel untuk menyinkronkan data ke disk untuk penulisan yang mungkin telah Anda lakukan.

Apa itu kesalahan halaman?

Pertimbangkan sebuah contoh, ketika Anda memulai suatu proses (katakanlah browser web), yang binernya sekitar 300MB. Namun, 300MB lengkap dari biner browser web tidak mulai bekerja secara instan. Proses terus bergerak dari fungsi-ke-fungsi dalam kodenya. Seperti yang dikatakan sebelumnya, Memori Virtual akan dikonsumsi 300MB, tidak semua memori dipetakan ke memori fisik (RSS - memori penduduk akan lebih sedikit, lihat output atas). Ketika eksekusi kode mencapai titik, di mana memori tidak benar-benar dipetakan secara fisik, kesalahan halaman akan menjadi masalah. Kernel akan memetakan memori ini ke fisik, kaitkan halaman memori dengan proses Anda. Kesalahan halaman semacam itu disebut "Minor Page Faults". Demikian pula, ketika suatu proses melakukan kesalahan file I/O halaman utama dinaikkan.

Kapan dan mengapa Swap Out terjadi?

Situasi 1:

Sejalan dengan detail di atas, mari kita pertimbangkan skenario ketika jumlah memori yang baik menjadi memori yang dipetakan. Dan sekarang sebuah proses dimulai, yang membutuhkan memori. Seperti dibahas di atas, kernel harus melakukan pemetaan memori. Namun, tidak ada cukup fisik RAM tersedia untuk memetakan memori. Sekarang, kernel akan terlebih dahulu melihat ke dalam cache, ia akan memiliki beberapa halaman memori lama yang tidak digunakan. Ini akan menyiram mereka halaman ke partisi yang terpisah (disebut SWAP), membebaskan beberapa halaman, dan memetakan halaman yang dibebaskan saat permintaan baru datang. Karena penulisan disk jauh lebih lambat daripada RAM solid-state, proses ini membutuhkan banyak waktu, dan karenanya memperlambat terlihat.

Situasi 2:

Katakanlah Anda melihat banyak memori bebas yang tersedia di sistem. Bahkan kemudian Anda melihat bahwa ada banyak swap-out yang terjadi. Mungkin ada masalah kemungkinan fragmentasi memori. Pertimbangkan sebuah proses, yang membutuhkan 50 MB memori yang berdekatan dari kernel. (perlu diingat berdekatan). Jelas, kernel akan mengalokasikan halaman secara acak untuk proses yang berbeda, dan membebaskan sebagian dari mereka. Namun, ketika kita menuntut memori yang berdekatan, itu harus mencari potongan yang memuaskan proses permintaan. Jika tidak bisa mendapatkan memori seperti itu, ia harus melakukan swap-out dari beberapa halaman memori lama dan kemudian mengalokasikan yang berdekatan. Bahkan dalam kasus seperti itu SWAP akan terjadi. Mulai Kernel ver 2.6 dan di atas, masalah fragmentasi tersebut telah berkurang secara signifikan. Namun, jika sistem berjalan untuk waktu yang lama, masalah seperti itu masih bisa datang.

Lihat contoh ini ( keluaran vmstat )

2016-10-29 03:55:32 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2016-10-29 03:55:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2016-10-30 03:56:04 19 23 2914752 4692144 3344908 12162628 1660    1  8803 12701 4336 37487 14  7 40 38  0
2016-10-30 03:56:34  3 20 2889296 4977580 3345316 12026752 2109    2  8445 14665 4656 36294 12  7 46 34  0
2016-10-30 03:57:04  1 11 3418868 4939716 3347804 11536356  586 4744  2547  9535 3086 24450  6  3 59 33  0  <<<-----
2016-10-30 03:57:34  3 19 3456252 5449884 3348400 11489728 3291 13371  6407 17957 2997 22556  6  4 66 24  0
2016-10-30 03:58:04  7  6 4194500 5663580 3349552 10857424 2407 12240  3824 14560 2295 18237  4  2 65 29  0
2016-10-30 03:58:34  2 16 4203036 5986864 3348908 10838492 4601 16639  7219 18808 2575 21563  6  4 60 31  0
2016-10-30 03:59:04  3 14 4205652 6059196 3348760 10821448 6624 1597  9431  4357 1750 20471  6  2 60 31  0
2016-10-30 03:59:34  2 24 4206968 6053160 3348876 10777216 5221 2067 10106  7377 1731 19161  3  3 62 32  0
2016-10-30 04:00:04  0 13 4205172 6005084 3348932 10785896 6236 1609 10330  6264 1739 20348  4  2 67 26  0
2016-10-30 04:00:34  4 11 4206420 5996396 3348976 10770220 6554 1253 10382  4896 1964 42981 10  5 58 27  0
2016-10-30 04:01:04  6  4 4177176 5878852 3348988 10825840 8682  765 10126  2716 1731 32949  8  4 69 19  0

@ 2016-10-30 03:57:04, kita melihat bahwa masih ada jumlah yang baik dari gratis RAM tersedia. Namun, bahkan kemudian swap keluar terjadi. Kami memeriksa pohon proses pada titik ini , dan kami tidak melihat proses apa pun yang muncul yang akan menuntut jumlah memori yang tinggi (lebih dari memori bebas). Kecurigaan yang jelas adalah Situasi 2. yang dijelaskan di atas. Kami memeriksa log buddyinfo dan zoneinfo di atas (Gunakan echo m>/proc/sysrq -trigger untuk memeriksa ini, output masuk ke syslogs).

Untuk sistem normal kita, perbandingan info zona berlaku seperti ini. Dan grafik untuk cache/free/mem rendah juga disebutkan di bawah ini

zone info

swap free low free

Melihat info, jelas bahwa ada fragmentasi memori di simpul 0 & simpul 1 normal (Node itu adalah mesin berbasis NUMA, maka beberapa node (lihat numactl untuk memeriksa info untuk sistem Anda)).

Fragmentasi memori juga merupakan alasan mengapa penggunaan swap dapat meningkat bahkan ketika memori bebas ada.

15
Anugraha Sinha

Memiliki lebih banyak memori yang tersedia

Seperti semua orang katakan, ya swap akan membantu Anda menghilangkan memori yang tidak digunakan, sehingga dapat membantu Anda memiliki lebih banyak memori yang tersedia.

Hibernasi

Tetapi swap juga dapat digunakan untuk hibernasi yang dapat sangat berguna ketika Anda memiliki laptop atau ingin menghemat energi dan menempatkan komputer Anda dan bekerja dalam hibernasi sebelum meninggalkan pekerjaan. Jadi Anda bisa memulai lebih cepat di pagi hari sesudahnya.

Memiliki fungsi hibernasi adalah salah satu alasan utama kita masih melihat saat ini menyarankan untuk memiliki setidaknya ukuran RAM untuk swap. Dengan begitu sistem dapat menempatkan semua yang digunakan RAM ke swap dan masuk ke hibernasi.

Kedatangan pendek

Berhati-hatilah bahwa sekali proses pertukaran data dapat dibaca dalam swap bahkan setelah shutdown, kecuali swap itu dienkripsi (tentu saja).

Menggunakan swap terenkripsi dengan hibernasi tidak bekerja di luar kotak dengan semua distribusi. Anda perlu menggunakan kunci enkripsi konstan (beberapa pengaturan secara acak menghasilkan kunci enkripsi ruang swap pada setiap boot) dan initrd/initramfs untuk mengaktifkan volume terenkripsi sebelum melanjutkan.

5
Huygens

Dari buntu Swap F.A.Q. yang terhubung dengan Marcel

Sebagai basis minimum, sangat disarankan ruang swap harus sama dengan jumlah memori fisik (RAM). Juga, direkomendasikan bahwa ruang swap dua kali jumlah memori fisik (RAM) tergantung pada jumlah hard disk

Saya pikir Anda harus menambah ruang swap di sistem Anda. Swap mempercepat RAM alokasi memori dengan memungkinkan untuk membuang data yang sudah halaman).

3
Jader Dias

Banyak program modern dibangun di atas kerangka bengkak yang menyeret banyak sampah yang sebenarnya tidak Anda perlukan untuk menjalankan program. Mengganti halaman-halaman yang tidak terpakai akan membebaskan RAM untuk cache dan program yang benar-benar dapat menggunakan RAM.

Saya berbicara dari pengalaman pribadi yang menyakitkan di sini.

Tahun lalu, saya mengalihkan salah satu situs web saya ke kerangka server web baru yang menjanjikan yang dibangun di atas Firefox. Mungkin terdengar aneh untuk membangun sistem sisi-server di atas program yang berfokus pada klien seperti Firefox, tetapi memiliki beberapa manfaat besar. Firefox sangat kuat, menawarkan beberapa layanan internal yang sangat mengesankan, dan mengurangi ketidakcocokan impedansi antara server dan klien untuk memiliki keduanya menjalankan platform yang sama.

Tapi ada kekurangannya: Firefox itu besar. Sangat besar. Ini adalah proyek semacam versi 1.x, jadi mereka belum sempat melakukan hal-hal seperti menghapus dukungan GUI. [*] Situs saya tidak memerlukan semua itu, tetapi karena teknologi VPS yang digunakan penyedia hosting saya tidak melakukannya t memungkinkan ruang swap, kode GUI itu dan semua bagian lain Firefox yang tidak saya gunakan makan RAM sungguhan. Saya akhirnya membutuhkan 512 MB RAM minimum hanya untuk menjalankan situs tanpa menabrak karena kehabisan memori. Jika VPS saya memiliki beberapa ruang swap, saya mungkin bisa mendapatkan oleh dengan rencana 256 MB.

[*] Menghapus kode GUI dari kerangka kerja bahkan mungkin tidak diinginkan, karena salah satu manfaat platform ini adalah pengikisan web dengan kesetiaan tinggi, karena kerangka sisi server dapat mengunduh halaman web dari situs lain, dan Anda dapat memanipulasi mereka seperti halnya Anda akan di sisi klien. Pikirkan mashup. Banyak hal semacam itu akan pecah jika Anda tidak dapat "membuat" halaman web menjadi beberapa konteks grafis.

Ngomong-ngomong, kerangka kerja web ini pada dasarnya sudah mati sekarang, jadi tidak ada gunanya menamai dan mempermalukannya. Terbaik untuk mengambil pelajaran yang lebih luas ke hati: ya, swap masih berguna bahkan jika Anda memiliki gigs of RAM gratis.

3
Warren Young

Saya pikir "Gilles" telah menyebutkan fakta bahwa, walaupun Anda mungkin memiliki lebih dari cukup RAM, swap dapat berguna selama "kekurangan" tertentu serta secara tetap menyimpan beberapa data bahkan setelah penutupan - atau apakah saya salah dalam mengasumsikan itu? ( sejak RAM akan memerah setelah reboot) Saya memiliki 12GB RAM tersedia di sistem saya, dan saya juga telah memikirkan pertanyaan ini sebelumnya. Pada satu titik, ketika saya telah menonaktifkan semua swap dan hanya mengandalkan RAM saya, saya memiliki pengalaman sulit yang sulit untuk men-debug beberapa kesalahan sistem, atau crash, dll setelah sistem shutdowns Sejak itu, saya telah mengaktifkan kembali partisi swap.

2
ILMostro_7