Thread (6 messages) flat view 6 messages, 4 authors, 2021-06-18

RE: vmemmap alloc failure in hot_add_req()

From: Michael Kelley <hidden>
Date: 2021-06-18 00:17:00
Also in: linux-hyperv, lkml

From: David Hildenbrand <redacted> Sent: Thursday, June 17, 2021 1:43 AM
quoted
It does look like this kernel configuration has
CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y.
Okay, so then it's most likely really more of an issue with fragmented
physical memory -- which is suboptimal but not a show blocker in your setup.

(there are still cases where memory onlining can fail, especially with
kasan running, but these are rather corner cases)
quoted
quoted
If it's not getting onlined, you easily sport after hotplug e.g., via
"lsmem" that there are quite some offline memory blocks.

Note that x86_64 code will fallback from populating huge pages to
populating base pages for the vmemmap; this can happen easily when under
memory pressure.
Not sure if it is relevant or not but this warning can show up within a
minute of startup without me doing anything in particular.
I remember that Hyper-V will start with a certain (configured) boot VM
memory size and once the guest is up and running, use memory stats of
the guest to decide whether to add (hotplug) or remove (balloon inflate)
memory from the VM.

So this could just be Hyper-V trying to apply its heuristics.
Nathan --

Could you clarify if your VM is running in the context of the Windows
Subsystem for Linux (WSL) v2 feature in Windows 10?  Or are you
running a "traditional" VM created using the Hyper-V Manager UI
or Powershell?

If the latter, how do you have the memory configuration set up?  In
the UI, first you can specify the RAM allocated to the VM.  Then
separately, you can enable the "Dynamic Memory" feature, in which
case you also specify a "Minimum RAM" and "Maximum RAM".  It
looks like you must have the "Dynamic Memory" feature enabled
since the original stack trace includes the hot_add_req() function
from the hv_balloon driver.

The Dynamic Memory feature is generally used only when you
need to allow Hyper-V to manage the allocation of physical memory
across multiple VMs.  Dynamic Memory is essentially Hyper-V's way of
allowing memory overcommit.  If you don't need that capability,
turning off Dynamic Memory and just specifying the amount of
memory you want to assign to the VM is the best course of action.

With Dynamic Memory enabled, you may have encountered a
situation where the memory needs of the VM grew very quickly,
and Hyper-V balloon driver got into a situation where it needed
to allocate memory in order to add memory, and it couldn't.  If
you want to continue to use the Dynamic Memory feature, then
you probably need to increase the initial amount of RAM assigned
to the VM (the "RAM" setting in the Hyper-V Manager UI).

Michael
quoted
quoted
If adding memory would fail completely, you'd see another "hot_add
memory failed error is ..." error message from hyper-v in the kernel
log. If that doesn't show up, it's simply suboptimal, but hotplugging
memory still succeeded.
I did notice that from the code in hv_balloon.c but I do not think I
have ever seen that message in my logs.
Okay, so at least hotplugging memory is working.

--
Thanks,

David / dhildenb
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help