Apakah ada hubungan antara fragmentasi memori dan apakah swap diaktifkan atau tidak pada sistem?


8

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.


4
Karena penasaran, mengapa itu menjadi masalah jika ingatan terpecah? Ini tidak seperti hard disk di mana mencari waktu penting. Memori akan selalu tampak bersebelahan secara logis dalam ruang alamat virtual proses, jadi ruang pengguna bahkan tidak dapat mengetahui apakah memori terfragmentasi pada tingkat fisik. Apakah karena tabel terjemahan halaman menjadi lebih rumit?
Celada

Pertanyaan bagus. Kondisi itu dinaikkan sebagai alasan untuk menggunakan swap. Saya tetap skeptis jadi saya mencari koneksi antara pemanfaatan swap dan fragmentasi memori. Saya tidak berharap menemukan satu tetapi saya selalu bersedia mengubah sikap saya di hadapan informasi baru. Saya mungkin akhirnya menjawab yang ini sendiri setelah pengujian lebih lanjut.
Penatua Geek

Jawaban:


3

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:

  • Paravirtualization , di mana mesin virtual memutuskan siapa yang memiliki halaman fisik mana pada granularity yang lebih kasar dari satu halaman.
  • Demikian pula, cluster di mana beberapa node berbagi kumpulan RAM yang sama.
  • Memori yang digunakan oleh periferal, yang biasanya memang membutuhkan buffer bersebelahan besar.
  • Optimasi seperti halaman besar .

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.


Bukankah menarik bagaimana setiap jawaban mengarah ke pertanyaan baru? Sekarang saya menemukan diri saya ingin tahu tentang urutan manajemen memori operasi dan teknik apa untuk membebaskan memori harus gagal sebelum kondisi kehabisan memori tercapai. Asumsi saya adalah cache paling tidak penting dan akan dibuang terlebih dahulu. Saya tahu ada kernel kebenaran di sini di suatu tempat (pun intended). ;-)
Penatua Geek

@ElderGeek - Dokumentasi / cgroups / memory.txt mungkin merupakan tempat yang baik untuk memulai. Meskipun sudah ketinggalan zaman, ia melakukan tinjauan terhadap pengontrol memori kernel dengan cukup baik.
mikeserv

@ mikeserv Terima kasih untuk itu. Saya juga menemukan - landley.net/writing/memory-faq.txt yang juga terlihat "sudah ketinggalan zaman" tetapi setidaknya tampaknya teori saya mengenai dump logis dari cache terlebih dahulu untuk membebaskan RAM sebelum melakukan pembunuhan prosesnya akurat. Saya ragu saya akan belajar lebih banyak tentang hal itu tanpa mempelajari kode itu sendiri. Itu mungkin sedikit di luar saya karena saya belum menulis kode apa pun di luar bash scripting selama beberapa dekade ...
Penatua Geek
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.