> From: Michael Kelley <mikelley@xxxxxxxxxxxxx> > Sent: Friday, August 23, 2019 12:50 PM > > From: Dexuan Cui <decui@xxxxxxxxxxxxx> Sent: August 19, 2019 6:52 PM > > > > When a Linux VM runs on Hyper-V and hibernates, it must disable the > > memory hot-add/remove and balloon up/down capabilities in the hv_balloon > > driver. > > I'm unclear on the above statement. I think the requirement is that > ballooning must not be active when hibernation is initiated. Is hibernation > blocked in that case? If not, what happens? Ballooning (and hot-addition of memory) must not be active if the user wants the Linux VM to support hibernation, not just when hibernation is initiated. This is because ballooning and hot-addition of memory are incompatible with hibernation according to Hyper-V team, e.g. upon hibernation the balloon VSP doesn't save any info about ballooned-out pages (if any), so after Linux resumes, Linux balloon VSC expects that the VSP will return the pages if Linux is under memory pressure, but the VSP will never return the pages, since the VSP thinks it never stole the pages from the VM. So, if the user wants Linux VM to support hibernation, Linux must completely forbid ballooning and hot-addition of memory, and hence the only functionality of balloon VSC is reporting the memory pressure to the host. Ideally, when Linux detects that the user wants it to support hibernation, the balloon VSC should tell the VSP that it does not support ballooning and hot-addition; however, the current version of the VSP requires the VSC should support these capabilities, otherwise the capability negotiation fails and the VSC can not load at all, so in my changes to the VSC driver, I still report to the VSP that Linux supports the capabilities, but the VSC ignores the host's requests of balloon up/down and hot add, and returns an error to the VSP, when applicable. BTW, in the future the balloon VSP driver will allow the VSC to not support the capabilities of balloon up/down and hot add. The remaining problem is: how can Linux know the user wants Linux VM to support hibernation? The ACPI S4 state is not a must for hibernation to work, because Linux is able to hibernate as long as the system can shut down. My decision is that: we artificially use the presence of the virtual ACPI S4 state as the indicator of the user's intent of using hibernation. BTW, I believe the Windows team made the same decision. Once all the vmbus and VSC patches are accepted, I'll submit a patch to forbid hibernation if the virtual ACPI S4 state is absent, e.g. hv_is_hibernation_supported() is false. > > By default, Hyper-V does not enable the virtual ACPI S4 state for a VM; > > on recent Hyper-V hosts, the administrator is able to enable the virtual > > ACPI S4 state for a VM, so we hope to use the presence of the virtual ACPI > > "we hope" sounds very indefinite. :-( Does ACPI S4 have to be enabled for > hibernation to be initiated? Goes back to my first question .... Technically, we don't have to enable ACPI S4, but in practice, as I mentioned, I'll submit a patch to forbid hibernation if ACPI S4 is absent. > > > S4 state as a hint for hv_balloon to disable the aforementioned > > capabilities. > > > > The new API will be used by hv_balloon. I'll add my above explanation into the changelog in v4. Thanks, -- Dexuan