Systemd-swap: Benar-benar tidak mungkin hibernasi?

Dibuat pada 28 Sep 2019  ·  7Komentar  ·  Sumber: Nefelim4ag/systemd-swap

T: Bisakah kita menggunakan ini untuk mengaktifkan hibernasi?
J: Tidak, karena hibernasi menginginkan blok fs yang persisten dan menginginkan akses untuk menukar data langsung dari disk, ini tidak akan berfungsi pada: zram, swapfu, swapfc (tanpa keajaiban tentunya).

Jelas hibernasi menggunakan file swap dan bukan partisi dimungkinkan. Solusi dengan zram untuk swap biasa dan file swap untuk hibernasi akan diinginkan.

Jadi sihir macam apa yang dibutuhkan untuk membuatnya bekerja?

enhancement help wanted

Komentar yang paling membantu

Bagaimana jika ada opsi untuk memformat & menukar file swap yang cukup bagi sistem untuk menghibernasi semua memori yang tersedia saat systemd-swap dijalankan? dan melakukan panggilan bootctl , atau menggunakan beberapa jenis lokasi tetap untuk menguji, untuk info mengakses data di swapfile ke kernel cmdline di systemctl-boot atau rEFInd atau grub atau apa pun?

Dengan begitu, satu-satunya kelambatan sebenarnya adalah menukar zram, sesuatu yang merupakan bagian tak terhindarkan dari penggunaan zram.

Cara saya mengetahuinya, jika Anda sudah akan mengalokasikan swap di awal saat startup , Anda mungkin juga mengalokasikan cukup banyak agar berguna.

Semua 7 komentar

@TeslaBargain , semacam sihir voodoo hitam.

Tentu saja itu mungkin untuk membuatnya sendiri - jadi Anda bisa melakukannya sendiri.


Untuk zram, Anda perlu mewujudkan semua itu sebelum hibernasi:

  1. Tambahkan file swap baru
  2. Format & swapon
  3. Tambahkan semua info untuk mengakses data di swapfile ke kernel cmdline (ubah konfigurasi grub, atau systemd-boot, atau lilo, atau u-boot & dll?)
  4. Tukar zram
  5. Hibernate (saya pikir Anda tidak tahu berapa banyak waktu yang hilang sebelum semua itu terjadi, untuk memungkinkan hibernasi)
  6. Setelah reboot / keluar dari hiberntation, Anda harus melakukan semua itu dalam urutan terbalik.

Dan itu hanya akan bekerja pada fs yang mendukung file swap semacam itu, yaitu untuk btrfs yang tidak memungkinkan.

@ Nefelim4ag , terima kasih telah memberi tahu saya, jadi secara keseluruhan terlalu banyak pekerjaan untuk membuatnya sepadan. Dengan solusi out-of-the box saya akan menggunakannya, tetapi dengan cara itu saya hanya akan tetap menggunakan partisi swap dan penggunaan swap + hibernasi biasa.

Bagaimana jika ada opsi untuk memformat & menukar file swap yang cukup bagi sistem untuk menghibernasi semua memori yang tersedia saat systemd-swap dijalankan? dan melakukan panggilan bootctl , atau menggunakan beberapa jenis lokasi tetap untuk menguji, untuk info mengakses data di swapfile ke kernel cmdline di systemctl-boot atau rEFInd atau grub atau apa pun?

Dengan begitu, satu-satunya kelambatan sebenarnya adalah menukar zram, sesuatu yang merupakan bagian tak terhindarkan dari penggunaan zram.

Cara saya mengetahuinya, jika Anda sudah akan mengalokasikan swap di awal saat startup , Anda mungkin juga mengalokasikan cukup banyak agar berguna.

Hai. Saya ingin tahu apakah skenario di mana Anda mendefinisikan partisi swap saat instalasi dan menggunakannya untuk hibernasi (tidak yakin bagaimana menunjukkan kernel untuk menggunakannya hanya untuk hibernate) dan kemudian menggunakan zram untuk sisa operasi swap (dan dapatkan dalam pertunjukan). Apakah itu sesuatu yang perlu dipertimbangkan? Ada pemikiran?

EDIT: ini https://gist.github.com/klingtnet/c972b8182e4e2818d6d551b0cbeac44b
ditambah systemd-swap (zram)

Saya pikir seseorang dapat mencapai ini melalui prioritas swap + kait untuk hibernasi systemd. Dengan cepat menjelajahi berbagai pertanyaan stackoverflow tidak menjawab ini jadi saya harus mengujinya secara manual. Ini sebenarnya adalah perbaikan yang jauh lebih mudah daripada yang saya pikirkan dan karena itu mungkin diterapkan sebelum 5.0 (meskipun perbaikan penuh harus di 5.0)

IIRC, hibernasi membutuhkan satu perangkat swap, jadi harus cukup besar untuk menyimpan semua memori yang dialokasikan di RAM / swap di tempat lain? (tetapi gambar hibernasi yang ditulis ini secara default menggunakan kompresi dengan target sekitar 40%).

Saya belum mencobanya sendiri, apakah hibernasi tidak menyimpan file swap pada disk atau perangkat zram di RAM seolah-olah dialokasikan seperti perangkat lunak lain? Anda melanjutkan status sistem, selama memori ditulis ke dalam gambar hibernasi, ia harus memulihkan / melanjutkan perangkat swap yang ditetapkan sebelumnya alih-alih harus menginisialisasi mereka seperti boot baru? Jadi tidak ada swap off / on yang diperlukan selain mengaktifkan perangkat swap hibernasi?

Saya hanya pernah hibernasi dengan satu perangkat swap (tanpa zswap atau zram). Saya tidak yakin apa yang terjadi pada disk swap (karena di lebih dari satu perangkat swap ada) dalam hal itu (jika perlu sesuai dengan gambar hibernasi, itu tampak berlebihan?), Demikian pula saya berasumsi zram akan mengalokasikan memori itu ditulis ke gambar hibernasi seperti memori lain yang dialokasikan oleh perangkat lunak, tidak yakin bagaimana bagian swap ditangani, jika perangkat swap tambahan perlu ditulis ke dalam gambar hibernasi, maka saya kira zram dan cache zswap dalam RAM akan terdekompresi dan seterusnya. resume perlu dikompresi ulang.

Saya tidak dapat menguji skenario atm untuk mengetahui apa yang terjadi. Mungkin tidak terlalu sulit untuk menguji melalui VM?


Perlu dicatat, kebanyakan distro yang menggunakan systemd harus menunda hibernasi menjadi systemd-sleep hibernate akhir-akhir ini, afaik? Sejak 2019-2020 (dalam rilis v239 + menurut saya?) Memiliki kemampuan untuk melanjutkan dari hibernasi tanpa memerlukan parameter kernel untuk menentukan perangkat swap target (hanya partisi dalam kasus ini iirc), dan akan menebak perangkat swap mana yang akan digunakan secara implisit. Jika hanya ada satu partisi swap maka itu harus dapat diandalkan tanpa perlu mengatur / memperbarui resume (dan resume_offset jika menggunakan file swap) parameter boot kernel.

Sekali lagi, bukan sesuatu yang belum saya uji untuk diverifikasi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat