Salah satu jawaban untuk Apakah saya perlu ruang swap jika saya memiliki jumlah RAM lebih dari cukup? membuat saya bertanya-tanya apakah ada hubungan antara fragmentasi memori yang diukur dengan cat /proc/buddyinfo
dan apakah swap digunakan atau tidak. Untuk lebih spesifik saya bertanya-tanya apakah menggunakan swap dapat mengurangi fragmentasi memori. Selama hari-hari normal bekerja dengan swap off pada sistem saya, saya memiliki ini:
tvbox@tvbox-G31M-ES2L:~$ cat /proc/buddyinfo
Node 0, zone DMA 3 3 4 14 16 6 2 0 0 1 0
Node 0, zone Normal 1564 1052 462 356 240 109 33 21 6 1 0
Node 0, zone HighMem 43 1972 839 285 183 109 98 34 16 0 0
tvbox@tvbox-G31M-ES2L:~$ free
total used free shared buffers cached
Mem: 2053888 1821904 231984 171376 299908 812940
-/+ buffers/cache: 709056 1344832
Swap: 0 0 0
Catatan: sistem ini memiliki waktu aktif yang tidak pernah melebihi 18 jam.
Pada sistem yang lebih banyak digunakan, saya memiliki ini:
me@me-zippy:~$ cat /proc/buddyinfo
Node 0, zone DMA 149 106 70 26 15 5 4 0 0 2 0
Node 0, zone Normal 2455 3527 4651 1421 367 157 61 19 14 3 0
Node 0, zone HighMem 7 43 75 266 166 162 91 43 27 0 0
me@me-zippy:~$ free -h
total used free shared buffers cached
Mem: 7.4G 7.0G 351M 281M 116M 6.0G
-/+ buffers/cache: 967M 6.4G
Swap: 0B 0B 0B
me@me-zippy:~$ uptime
12:01:49 up 3 days, 3:20, 2 users, load average: 0.52, 0.23, 0.17
Anda akan perhatikan bahwa kedua sistem ini tidak mengaktifkan swap.
Jawaban:
Bertukar memungkinkan halaman fisik untuk dipindahkan, dalam arti bahwa halaman yang digunakan untuk satu tujuan dapat memiliki isinya ditukar lalu digunakan untuk tujuan lain.
Di bawah berbagai sistem manajemen memori virtual kebun, tidak ada yang namanya fragmentasi memori fisik sejauh aplikasi yang bersangkutan. Setiap halaman yang dialokasikan oleh suatu aplikasi dapat diambil di mana saja dalam memori fisik, tidak ada alasan mengapa dua halaman berturut-turut dalam memori virtual perlu memiliki kedekatan tertentu dalam memori fisik.
Ada banyak kasus di mana fragmentasi memori menjadi perhatian: keadaan apa pun di mana lokasi memori fisik penting. Ini termasuk:
Dengan tidak adanya skenario "kompleks", fragmentasi memori fisik dapat menyebabkan masalah menghubungkan perangkat baru yang membutuhkan kumpulan memori yang berdekatan (kernel menyimpan kumpulan seperti itu untuk itu, tetapi mereka bisa perlu diperbesar jika driver tiba-tiba membuat besar permintaan). Jika penggunaan perangkat konstan, fragmentasi fisik tidak menjadi masalah dan khususnya tidak akan menyebabkan aplikasi berjalan lebih lambat atau kehabisan ruang.
Mungkin saja fragmentasi ruang alamat fisik dapat menyebabkan lebih banyak memori yang digunakan dalam kernel untuk mewakili daftar bebas. Saya tidak percaya bahwa ini adalah kasus di Linux tapi saya jauh dari menjadi ahli dalam manajemen memorinya.
Untuk meringkas, memungkinkan bagian dari aplikasi untuk bertukar tidak memungkinkan aplikasi ini untuk mengalokasikan lebih banyak memori, tetapi dapat memungkinkan beberapa driver perangkat keras untuk mengalokasikan memori yang mereka butuhkan.
Menambahkan swap tidak berpengaruh pada ruang memori virtual aplikasi. Lagipula itulah gunanya swap - transparan untuk aplikasi.
Namun, ada kemungkinan bahwa menambahkan swap ke mesin akan memiliki pengaruh tidak langsung pada fragmentasi di dalam ruang memori virtual aplikasi. Jika sistem kehabisan memori virtual, maka aplikasi harus puas dengan apa yang dimilikinya. Jika aplikasi menggunakan sebagian besar memori yang dialokasikan dari sistem operasi, ini akan menyebabkan fragmentasi di dalam ruang itu seiring blok kecil dibebaskan di sana-sini. Jika aplikasi memiliki lebih banyak memori virtual (beberapa di antaranya adalah swap), ini memberikan manajer memori lebih banyak ruang untuk bermanuver dan dengan demikian mengurangi risiko bahwa aplikasi akan kehabisan memori, dengan tiga blok 2kB terpisah yang tersedia ketika menginginkan satu Objek 4kB.
sumber