Při použítí Qemu+VFIO nefunguje hibernace ani režim spánku

LarryLin

Ahoj, chci se zeptat jestli se někomu z vás co používají Qemu(q35)+VFIO (pro VGA passthrough) podařilo zprovoznit hibernaci (suspend-to-disk).
Před nějakým časem jsem to zkoušel v guestovi (win10):
- hibernace se tvářila, že proběhla v pořádu, ale po probuzení nebyla k dispozici rozdělaná práce, takže nefungovala.
- režim spánku (do RAM) fungoval, ale po probuzení, které trvalo cca 5sekund byly artefakty v obraze a navíc se mi poté virtuálka uspávala každých cca 5min i když bylo v ovládacích panelech nastaveno 60min. Takže taky šlo vidět, že je tam nějaký problém.

Nyní jsem zjistil, že hibernace nefunguje ani v hostileli (Archlinux):
- když Qemu přiřadím méně jak polovinu RAM, tak hibernace proběhne, ale po probuzení se guest (win10) resetuje.
- když Qemu přiřadím více jak polovinu RAM, tak hibernace vůbec neproběhne. Pouze na cca 20 sekund zamrzne obraz.
- suspend-to-ram také nefunguje. Po probuzení po pár sekundách vytuhne celý PC.

Podle této informace https://www.redhat.com/archives/vfio-users/2017-September/msg00011.html to vypadá že uvnitř guesta je opravdu S3 i S4 problém, ale naopak zde https://www.reddit.com/r/VFIO/comments/568mmt/saving_vm_state_with_gpu_passthrough/d8jyv56/ borec v komentářích píše, že s "virsh dompmsuspend disk" mu hibernace funguje. Libvirt nepoužívám, ale myslím, že "dompmsuspend disk" je také jen hibernace uvnitř guesta za pomoci guest-agenta.

Podařilo se tedy někomu z vás v hostu nebo hostiteli zprovoznit hibernaci nebo alespoň režim spánku (do RAM) při použítí VFIO? Děkuji za odpovědi.


JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Při použítí Qemu+VFIO nefunguje hibernace ani režim spánku
« Odpověď #1 kdy: 06. 05. 2018, 22:16:44 »
K hibernaci hosta nemam tuseni, ale k hibernaci hostitele se mrknete, jestli nemate aktivovany zram. Ma s tim hibernace nikdy nejak nechtela chrochtat, tusim se zram to parkrat hibernovalo a pak to prestalo fungovat a se zswap to nechodilo vubec. Symptomem se zswap tusim bylo prave to, ze stroj predstiral hibernaci a hned se proudil. Ale je to uz delsi dobu, tak si nejsem moc jisty.

Jinak zkousel jste hibernovat pomoci echo disk > /sys/power/state, jestli to nahodou probehne nejak jinak?

LarryLin

Re:Při použítí Qemu+VFIO nefunguje hibernace ani režim spánku
« Odpověď #2 kdy: 07. 05. 2018, 11:13:09 »
..., jestli nemate aktivovany zram. ... Jinak zkousel jste hibernovat pomoci echo disk > /sys/power/state, jestli to nahodou probehne nejak jinak?
Zram jako modul kernelu načtený nemám, takže nepoužívá se. Zswap jsem zkoušel když jsem si myslel, že problém je pouze když Qemu(s VFIO) přidělím víc jak 50% RAM, ale stejně to nepomohlo a pak jsem stejně zjistil, že je problém i s přiřazením méně jak 50% RAM.

Ono jde o to, že mně hibernace normálně funguje, ale problém je pouze když mám zaplé Qemu+VFIO. Jednoduše řečeno: VFIO zajišťuje, aby virtuálka win10 měla přímý (vyhrazený) přístup do grafické karty nVidia, tzn. VFIO je v hostiteli (linuxu) něco jako ovladač grafické karty. Bez použití VFIO problém s hibernací nebo režimem spánku v hostiteli není.

# echo disk > /sys/power/state u mě nefunguje, používám "systemctl hibernate" nebo tlačítko v GUI. Když hibernace v hostiteli neproběhne, (tzn dám qemu vic jak 50% RAM), tak jedna z hlášek v žurnálu je:
Kód: [Vybrat]
systemd-sleep[9058]: Failed to write 'disk' to /sys/power/state: Cannot allocate memorytakže se používá příkaz o kterém píšete.

LarryLin

Re:Při použítí Qemu+VFIO nefunguje hibernace ani režim spánku
« Odpověď #3 kdy: 15. 05. 2018, 22:32:02 »
Kdyby někdo řešil stejný problém, tak info na závěr:

  • Hibernace v guestovi mně začala fungovat, ale nevím jestli jsem něco změnil nebo pomohla nová verze qemu. Akorát když je ve Win10 v "Možnosti napájení" nastaven jiný než "Vysoký výkon", tak to z nějakého důvodu požaduje po probuzení heslo do Win. Přitom mám nastaveno automatické přihlašování.
  • Režim spánku v guestovi je pořád po probuzení nestabilní - artefakty v obraze, občas spadne program/hra.
  • Suspend-to-ram a Suspend-to-disk v hostiteli se mi nepodařilo zprovoznit. Podle hlášky "vfio_bar_restore:  reset recovery - restoring bars sleep" to vypadá, že při probuzení se GPU re-inicializuje a guest to zřejmě vyhodnotí tak, že došlo k odpojení GPU za chodu (nebo chybě) a resetuje se. Řešením by možná bylo kdyby se v biosu nebo linuxu nastavilo, aby se v režimu S3 "nevypínalo" GPU, nějaké ty ASPM režimy nebo jak se to jmenuje. Pátrat po tom už nebudu. Bude nutné počkat na chytré hlavy z Redhatu, aby VFIO fungovalo s S3/S4 nebo s příkazem "savevm" pro vytvoření snapshotu virtuálky.