Apa yang terjadi pada data dalam swap saat komputer Anda hibernasi?

12

Ketika komputer masuk ke mode hibernasi, ia menyimpan isi RAM ke dalam ruang swap sehingga komputer dapat melanjutkan dengan tepat di tempat yang ditinggalkannya saat dinyalakan kembali.

Jadi, bagaimana jika Anda saat ini menggunakan lebih banyak memori daripada RAM Anda. Dalam hal ini, beberapa data yang seharusnya dalam RAM disimpan untuk ditukar.

Sebuah contoh. Komputer memiliki 1GB RAM dan 1GB ruang swap. Saat ini menggunakan semua kecuali 100MB RAM dan 500MB swap. Oleh karena itu, perlu diingat tentang memori 1,4GB untuk menyimpan kondisinya. Namun, swap hanya 1GB.

Apa yang akan terjadi dalam kasus ini?

~~ edit ~~

Seperti dijawab di bawah, hibernasi gagal. Jadi, pertanyaan lanjutan:

Ketika ini gagal, di mana kesalahan dilaporkan?

David Oneill
sumber

Jawaban:

11

Itu tergantung pada implementasi hibernasi. Bahkan jika Anda membatasi pertanyaan pada Linux, implementasinya telah berkembang seiring waktu.

Pertama, pertimbangkan bahwa beberapa RAM digunakan untuk cache disk. Ini tidak perlu dipindahkan ke swap karena dapat dimuat dari disk setelah sistem dilanjutkan. Pada sistem dengan keseimbangan biaya / efisiensi yang baik, ini tipikal untuk sekitar setengah dari RAM yang dialokasikan untuk cache. (Lihat juga Mengapa menggunakan swap ketika ada lebih dari cukup RAM .) Di Linux, beberapa implementasi awal akan menyimpan semua memori yang dialokasikan ke swap, tetapi implementasi saat ini (s?) Hibernasi melewati cache disk.

Kedua, beberapa sistem memampatkan memori karena ini ditulis untuk swap, yang dapat membuat jumlah swap yang tepat sulit diprediksi. Beberapa versi dukungan hibernasi Linux telah mendukung kompresi; Saya tidak tahu apakah yang sekarang melakukannya.

Apa yang secara umum dapat Anda harapkan jika tidak ada cukup ruang swap adalah hibernasi akan gagal: sistem akan mencoba untuk menyimpan (berguna) konten RAM ke dalam swap, dan segera setelah mendeteksi bahwa tidak ada cukup ruang, upaya hibernasi dibatalkan (biasanya dengan pesan kesalahan pada konsol dan dalam log sistem). Sejauh yang saya tahu, Linux selalu berperilaku seperti ini (bukan berarti benar-benar ada perilaku yang masuk akal).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Saya mencoba ini di mesin virtualbox dan itu gagal, meskipun tidak menampilkan pesan apa pun kepada pengguna (saya mencoba dengan ubuntu 10.4). Log sistem apa yang akan dilaporkan kesalahan ini?
David Oneill
3
@ David: Pasti ada sesuatu di dalamnya /var/log/kern.log. Saya tidak tahu apakah tidak adanya pesan pada konsol adalah kekhasan dari versi kernel khusus ini atau konfigurasi Ubuntu yang disengaja (saya tahu mereka sengaja menekan beberapa output konsol lainnya).
Gilles 'SO- stop being evil'