> From: Michael Kelley <mikelley@xxxxxxxxxxxxx> > Sent: Wednesday, January 6, 2021 9:38 AM > From: Dexuan Cui <decui@xxxxxxxxxxxxx> > Sent: Tuesday, December 22, 2020 4:12 PM > > > > When a Linux VM runs on Hyper-V, if the host toolstack doesn't support > > hibernation for the VM (this happens on old Hyper-V hosts like Windows > > Server 2016, or new Hyper-V hosts if the admin or user doesn't declare > > the hibernation intent for the VM), the VM is discouraged from trying > > hibernation (because the host doesn't guarantee that the VM's virtual > > hardware configuration will remain exactly the same across hibernation), > > i.e. the VM should not try to set up the swap partition/file for > > hibernation, etc. > > > > x86 Hyper-V uses the presence of the virtual ACPI S4 state as the > > indication of the host toolstack support for a VM. Currently there is > > no easy and reliable way for the userspace to detect the presence of > > the state (see ...). Add > > /sys/bus/vmbus/supported_features for this purpose. > > I'm OK with surfacing the hibernation capability via an entry in > /sys/bus/vmbus. Correct me if I'm wrong, but I think the concept > being surfaced is not "ACPI S4 state" precisely, but slightly more > generally whether hibernation is supported for the VM. While > those two concepts may be 1:1 for the moment, there might be > future configurations where "hibernation is supported" depends > on other factors as well. For x86, I believe the virtual ACPI S4 state exists only when the admin/user declares the intent of "enable hibernation for the VM" via some PowwerShell/WMI command. On Azure, if a VM size is not suitable for hibernation (e.g. an existing VM has an ephemeral local disk), the toolstack on the host should not enable the ACPI S4 state for the VM. That's why we implemented hv_is_hibernation_supported() for x86 by checking the ACPI S4 state, and we have used the function hv_is_hibernation_supported() in hv_utils and hv_balloon for quite a while. For ARM, IIRC there is no concept of ACPI S4 state, so currently hv_is_hibernation_supported() is actually not implemented. Not sure why hv_utils and hv_balloon can build successfully... :-) Probably Boqun can help to take a look. > > The guidance for things in /sys is that they generally should > be single valued (see Documentation/filesystems/sysfs.rst). So my > recommendation is to create a "hibernation" entry that has a value > of 0 or 1. > > Michael Got it. Then let's use /sys/bus/vmbus/hibernation. Will post v3. Thanks, -- Dexuan