Kapan swap dipindahkan kembali ke memori fisik di Linux? Apakah hanya sesuai permintaan, yaitu. kapan dibutuhkan? Atau apakah swap perlahan ditransfer ke memori fisik ketika komputer tidak pada beban tinggi?
8
Sesuai permintaan. Bahkan, Linux perlahan akan mentransfer memori fisik untuk swap saat idle (lihat: "swappiness").
Selama operasi reguler, data dari swap dimuat ke memori sesuai permintaan, seperti dijawab orang lain, tetapi ada satu kasus lagi ketika ini terjadi: itu adalah ketika ruang swap dinonaktifkan, asalkan ada memori fisik yang cukup untuk memuat seluruh konten swap.
Kerjakan saja:
... dan semua data swap Anda akan 'kembali' ke memori. Efek sampingnya adalah buffer disk / cache bisa memerah.
Kadang-kadang mungkin diinginkan untuk dilakukan
swapoff -a ; swapon -a
, misalnya setelah beberapa proses kehabisan memori buggy, sebelum crash, membuat proses yang lebih penting tersapu keluar - untuk memastikan setiap proses yang berjalan dalam sistem dimuat ke dalam memori dan tidak akan menunggu swap di beberapa menit.sumber
swapoff
tidak akan gagal, tetapi sistem akan kehabisan memori segera setelahswapoff
dan OOM akan membunuh proses acak (dalam kasus terburuk shell akan memanggilswapon
atauswapon
perintah). Dalam praktiknya sangat tidak mungkin - banyak memori digunakan oleh cache sebelumswapoff
dipanggil sehingga harus cukup RAM untuk kedua perintah untuk dijalankan.Seperti yang telah ditunjukkan orang lain, halaman hanya akan disalin kembali ke dalam RAM bila diperlukan (sesuai permintaan) alih-alih mengambil RAM yang mungkin lebih baik tersedia untuk cache / buffer.
Fakta bahwa halaman disalin kembali ke RAM, tidak dipindahkan, adalah penting dan dapat menyebabkan kebingungan jika Anda tidak menyadarinya. Halaman tidak akan di-deallocated dari swap kecuali jika tidak diperlukan lagi sama sekali (yaitu halaman sepenuhnya di-deallocated), diubah dalam RAM (sehingga salinan dalam swap tidak lagi benar), atau swap semakin rendah (dan pada Blok-disk diperlukan untuk menukar beberapa halaman lain). Dengan cara ini jika halaman perlu ditukar lagi di masa depan tidak ada disk menulis diperlukan karena kernel tahu sudah ada salinan yang baik pada disk - ini dapat sangat mengurangi "meronta-ronta" ketika RAM yang tersedia menjadi sangat rendah tetapi ruang swap juga tidak padat.
Anda dapat melihat berapa banyak halaman saat ini dalam RAM dan swap dari
cat /proc/meminfo
-SwapCached
garis adalah jumlah data yang ada di halaman yang saat ini baik dalam RAM dan pada disk. Jika menurut Anda swap Anda saat ini menggunakannya lebih tinggi dari yang Anda harapkan, periksa nilai SwapCached karena ini dapat menjelaskan perbedaan tersebut.sumber
Ini biasanya terikat pada perangkat keras yang Anda gunakan. Pada sebagian besar perangkat keras (termasuk intel), MMU mengontrol seluruh proses.
Ketika suatu program mengalokasikan memori, ia akan memintanya ke MMU dan mendapatkan kembali alamat virtual. Pada gilirannya, MMU akan mendaftarkan halaman itu sebagai "sedang digunakan" di peta ruang alamat global.
Ketika program benar-benar mengakses ruang memori itu, MMU akan mencari halaman ke dalam peta alamat. Jika halaman itu dalam memori "live", itu akan mengirim kembali "live" pointer ke OS yang akan menangani memori baca / tulis atas nama program. Jika memori saat ini tidak dialokasikan, maka itu akan memicu kesalahan halaman. Pengecualian prosesor ini kemudian ditangkap oleh OS yang kemudian bertanggung jawab untuk mencari tahu di mana data ada dalam file swap, memuatnya ke dalam memori fisik dan memberikan halaman kembali ke MMU sehingga proses awal dapat dilanjutkan.
Ini berarti bahwa, kecuali halaman memori diakses, itu tidak akan pernah kembali ke memori "langsung" setelah ditukar. Itulah sebabnya biasanya ada OS API yang memungkinkan program menentukan bahwa blok memori tertentu TIDAK untuk ditukar ke disk dan harus disimpan dalam memori (saya tidak tahu tentang Linux, tetapi di Windows, itu adalah fungsi VirtualLock) .
sumber
mlock(2)
linux.die.net/man/2/mlock