[pve-devel] qemu memory hotplug limited to 64 dimm
Wolfgang Bumiller
w.bumiller at proxmox.com
Wed Dec 14 15:07:16 CET 2016
So I see a few options one or more of which we should consider:
1) Make the *static* memory size configurable:
It doesn't make sense to me to eg. want to go from 1G to 200G in
small steps. Worse is the fact that even when starting with a higher
amount knowing that I'm only going to increase it, I start with lots and
lots of tiny dimms. Eg. 8G = 1G static + 14 x 512M dimms.
This could be added as a separate option or even to the existing
`memory` option without breaking existing configs (by turning it into a
property string with the current amount as the default key.)
I could then do:
memory: 8192,static=8192
This example frees up 14 dimm slots alone.
The downside is this VM cannot go below 8G without a reboot.
The dimm size should then probably not start at 512M either. That's
where the next change comes in:
2) Change the steps one way or another:
a) Generally change the number of steps before increasing the step
size:
The current 32 makes sense for the first few gigs, but if we eg. have
a machine with 101G memory, we'd still be doing 2G steps. That
amounts to a 2% granularity. At 113G we bump this up to 4G steps,
which is a 3.5% granularity.
I propose we use no more than 16 dimms of each size. (Heck I'd even
be fine with 8 personally, although 14 of the 512M dimms would be
good to get to a "nice" 8G in small steps. ;-) )
This change is not backward compatible and would break memory
hot-unplugging of running machines after the upgrade.
Or well, it would still "happen", but our count would be out of
sync.
b) Make the _initial_ dimm size configurable:
This would work well in combination with (1). (This initial dimm
size would not be hot-pluggable as that would throw off our
counter.)
c) Have the option to use only 1 fixed dimm size.
Since we already have a way to get a list of a running VM's dimms,
this option could even be hot-pluggable. The unplug code would have
to be changed to fetch the list of dimms from qemu rather than
assume our fixed dimm list is used.
[*] This would probably be a good idea in any case ;-)
Of course this would allow the user to add a 16G dimm, change the
dimm size to 1G and then try to reduce memory by 1 and fail.
(I see no reason to protect people from too many of their own
mistakes, but we *could* of course limit the hot-plugging of the
dimm size to increasing only...)
c) Use an explicit dimm list.
This would be an alternative to (1), you define the static memory
and the dimms, the latter can be hot plugged:
memory: 8192,dimms=512x4:1024x4
or
memory: 8192
dimms: 512x4 1024x4
Would be the equivalent of 8G static memory plus 4 dimms of 512M
and 1G each - a total of 14G.
For backward compatibility we could require dimms to be "defined
but empty" to use the new method, and keep the old method
otherwise.
Downside: who wants to make a GUI for that? ;-)
3) Drop support for hot*UN*plugging altogether and simply always hot-add
one big dimm. ;-)
On that note, my guests currently hang when I unplug memory and I bet
that happens to all of you and nobody ever noticed because nobody needs
that feature anyway ;-)
More information about the pve-devel
mailing list