Results 1 to 6 of 6

Thread: libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

  1. #1
    Join Date
    Jun 2023
    Beans
    10

    libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

    Hi!
    I have a "game server", AMD Ryzen 7 5800X on ROG STRIX X570-F GAMING mobo at home with couple of GPUs, running ubuntu 23.10 server. The plan was to run a bunch of Win virtual machines with GPU pass-through to play some games/other work, and then, after idling for a while, hibernate it to save current state, and release GPU for different user (there are more users then GPUs) this way, every home member has their own 'pc' with their system/config etc and also we can share resources a little.
    And the main issue here is that, hibernation doesn't work with windows 10/11 on this setup. BUT it works when I run this exact VM on my laptop (11th Gen Intel(R) Core(TM) i7-11850H @ 2.50GHz) without any isssue (with GPU pass OFF when testing this to exclude any pass through issues)

    It looks like win VM is hibernating (CPU usage goes through the roof and I can see some data saved on HDD) but on power on, instead of booting from the hibernated image, it starts all over again. Windows logs are compleatly useless (or I don't know how to collect them properly, I'll try to ask for help on some win forums)

    I need some guidance on how to even start debugging this

    full config
    Code:
    <domain type="kvm">
      <name>Windows_10</name>
      <uuid>d7b0cb9c-8579-41d8-b5a7-ca566216adde</uuid>
      <metadata>
        <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
          <libosinfo:os id="http://microsoft.com/win/10"/>
        </libosinfo:libosinfo>
      </metadata>
      <memory unit="KiB">10076000</memory>
      <currentMemory unit="KiB">10076000</currentMemory>
      <vcpu placement="static">16</vcpu>
      <os firmware="efi">
        <type arch="x86_64" machine="pc-q35-8.0">hvm</type>
        <firmware>
          <feature enabled="yes" name="enrolled-keys"/>
          <feature enabled="yes" name="secure-boot"/>
        </firmware>
        <loader readonly="yes" secure="yes" type="pflash">/usr/share/OVMF/OVMF_CODE_4M.ms.fd</loader>
        <nvram template="/usr/share/OVMF/OVMF_VARS_4M.ms.fd">/var/lib/libvirt/qemu/nvram/Windows_10_VARS.fd</nvram>
        <boot dev="hd"/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <hyperv mode="custom">
          <relaxed state="on"/>
          <vapic state="on"/>
          <spinlocks state="on" retries="8191"/>
        </hyperv>
        <vmport state="off"/>
        <smm state="on"/>
      </features>
      <cpu mode="host-passthrough" check="none" migratable="on">
        <topology sockets="1" dies="1" cores="8" threads="2"/>
      </cpu>
      <clock offset="localtime">
        <timer name="rtc" tickpolicy="catchup"/>
        <timer name="pit" tickpolicy="delay"/>
        <timer name="hpet" present="no"/>
        <timer name="hypervclock" present="yes"/>
      </clock>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>destroy</on_crash>
      <pm>
        <suspend-to-mem enabled="yes"/>
        <suspend-to-disk enabled="yes"/>
      </pm>
      <devices>
        <emulator>/usr/bin/qemu-system-x86_64</emulator>
        <disk type="file" device="cdrom">
          <driver name="qemu" type="raw"/>
          <target dev="sda" bus="sata"/>
          <readonly/>
          <address type="drive" controller="0" bus="0" target="0" unit="0"/>
        </disk>
        <disk type="network" device="disk">
          <driver name="qemu" type="raw" cache="unsafe" discard="unmap"/>
          <source protocol="nbd" name="windows10" tls="no">
            <host name="nas_server" port="10809"/>
          </source>
          <target dev="vdb" bus="virtio"/>
          <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
        </disk>
        <controller type="usb" index="0" model="qemu-xhci" ports="15">
          <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0"/>
        </controller>
        <controller type="pci" index="0" model="pcie-root"/>
        <controller type="pci" index="1" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="1" port="0x10"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/>
        </controller>
        <controller type="pci" index="2" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="2" port="0x11"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1"/>
        </controller>
        <controller type="pci" index="3" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="3" port="0x12"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2"/>
        </controller>
        <controller type="pci" index="4" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="4" port="0x13"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3"/>
        </controller>
        <controller type="pci" index="5" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="5" port="0x14"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/>
        </controller>
        <controller type="pci" index="6" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="6" port="0x15"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x5"/>
        </controller>
        <controller type="pci" index="7" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="7" port="0x16"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x6"/>
        </controller>
        <controller type="pci" index="8" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="8" port="0x17"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x7"/>
        </controller>
        <controller type="pci" index="9" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="9" port="0x18"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0" multifunction="on"/>
        </controller>
        <controller type="pci" index="10" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="10" port="0x19"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x1"/>
        </controller>
        <controller type="pci" index="11" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="11" port="0x1a"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x2"/>
        </controller>
        <controller type="pci" index="12" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="12" port="0x1b"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x3"/>
        </controller>
        <controller type="pci" index="13" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="13" port="0x1c"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x4"/>
        </controller>
        <controller type="pci" index="14" model="pcie-root-port">
          <model name="pcie-root-port"/>
          <target chassis="14" port="0x1d"/>
          <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x5"/>
        </controller>
        <controller type="sata" index="0">
          <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
        </controller>
        <controller type="virtio-serial" index="0">
          <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
        </controller>
        <interface type="direct">
          <mac address="52:54:00:b4:7e:26"/>
          <source dev="macvtap0" mode="bridge"/>
          <model type="virtio"/>
          <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
        </interface>
        <serial type="pty">
          <target type="isa-serial" port="0">
            <model name="isa-serial"/>
          </target>
        </serial>
        <console type="pty">
          <target type="serial" port="0"/>
        </console>
        <channel type="spicevmc">
          <target type="virtio" name="com.redhat.spice.0"/>
          <address type="virtio-serial" controller="0" bus="0" port="1"/>
        </channel>
        <input type="tablet" bus="usb">
          <address type="usb" bus="0" port="1"/>
        </input>
        <input type="mouse" bus="ps2"/>
        <input type="keyboard" bus="ps2"/>
        <tpm model="tpm-crb">
          <backend type="emulator" version="2.0"/>
        </tpm>
        <graphics type="spice" autoport="yes">
          <listen type="address"/>
        </graphics>
        <sound model="ich9">
          <address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
        </sound>
        <audio id="1" type="spice"/>
        <video>
          <model type="none"/>
        </video>
        <hostdev mode="subsystem" type="pci" managed="yes">
          <source>
            <address domain="0x0000" bus="0x09" slot="0x00" function="0x0"/>
          </source>
          <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
        </hostdev>
        <hostdev mode="subsystem" type="pci" managed="yes">
          <source>
            <address domain="0x0000" bus="0x09" slot="0x00" function="0x1"/>
          </source>
          <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
        </hostdev>
        <hostdev mode="subsystem" type="pci" managed="yes">
          <source>
            <address domain="0x0000" bus="0x09" slot="0x00" function="0x2"/>
          </source>
          <address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/>
        </hostdev>
        <hostdev mode="subsystem" type="pci" managed="yes">
          <source>
            <address domain="0x0000" bus="0x09" slot="0x00" function="0x3"/>
          </source>
          <address type="pci" domain="0x0000" bus="0x09" slot="0x00" function="0x0"/>
        </hostdev>
        <redirdev bus="usb" type="spicevmc">
          <address type="usb" bus="0" port="2"/>
        </redirdev>
        <redirdev bus="usb" type="spicevmc">
          <address type="usb" bus="0" port="3"/>
        </redirdev>
        <watchdog model="itco" action="reset"/>
        <memballoon model="virtio">
          <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
        </memballoon>
      </devices>
    </domain>

  2. #2
    Join Date
    Mar 2010
    Location
    USA
    Beans
    Hidden!
    Distro
    Ubuntu Development Release

    Re: libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

    RE:
    Code:
    <vcpu placement="static">16</vcpu>
    You overallocated your vcpu's. Your system only has 8 cores, which means 16 threads on that total. You need to leave some for the host to actually run the VM, right? Does that make sense?

    My KVM hosts have Intel i9's with 20 to 32 threads, and 256GB of RAM. For a power VM, I still start out allocating only 4 vcpu's, and 4 to 16GB RAM... and go up from there if needed. Same with vdisk. Start out with what you think you can get away with, then allocate more, when needed.

    That's a start in the right direction...

    "Concurrent coexistence of Windows, Linux and UNIX..." || Ubuntu user # 33563, Linux user # 533637
    Sticky: Graphics Resolution | UbuntuForums 'system-info' Script | Posting Guidelines | Code Tags

  3. #3
    Join Date
    Jun 2023
    Beans
    10

    Re: libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

    Yes you are right.
    But I want to fix the hibernation issue first, then start tweaking the VM configuration (changing the number of cores didn't help)

  4. #4
    Join Date
    Jul 2005
    Location
    I think I'm here! Maybe?
    Beans
    Hidden!
    Distro
    Xubuntu 22.04 Jammy Jellyfish

    Re: libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

    Interestingly, if you try to allocate too many cpu cores or too high a %age of total memory when using Virtualbox instead of KVM you are quickly warned that you are overstretching the system.

    I've never seen any warning in KVM but perhaps I've never overstretched the allocations set.
    Does KVM make any similar warnings at that point or just let you do whatever you want?

  5. #5
    Join Date
    Jun 2023
    Beans
    10

    Re: libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

    I have run out of memory multiple times already, without any warning from KVM so I assume that if you want to shot yourself in the foot, you can

  6. #6
    Join Date
    Mar 2010
    Location
    USA
    Beans
    Hidden!
    Distro
    Ubuntu Development Release

    Re: libvirt + kvm + win10/11 guest, hibernation not working on Ryzen

    You can over allocate KVM resources... It lets you do that. I do that often with allocations of between several Guests running at the same time, and it shares between...

    But with common sense, I haven't done that with just one VM guest... It would have 'nothing' to share between on the scheduler process(?)

    On hibernation and/or sleep issues... I look at cpu scheduling, swap, and graphics drivers... If vcpu is over allocated on a single VM guest, that it would surely be in play.

    "Concurrent coexistence of Windows, Linux and UNIX..." || Ubuntu user # 33563, Linux user # 533637
    Sticky: Graphics Resolution | UbuntuForums 'system-info' Script | Posting Guidelines | Code Tags

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •