pc: count in 1Gb hugepage alignment when sizing hotplug-memory container
if DIMMs with different size/alignment are interleaved in creation order, it could lead to hotplug-memory container fragmentation and following inability to use all RAM upto maxmem. For example: -m 4G,slots=3,maxmem=7G -object memory-backend-file,id=mem-1,size=256M,mem-path=/pagesize-2MB -device pc-dimm,id=mem1,memdev=mem-1 -object memory-backend-file,id=mem-2,size=1G,mem-path=/pagesize-1GB -device pc-dimm,id=mem2,memdev=mem-2 -object memory-backend-file,id=mem-3,size=256M,mem-path=/pagesize-2MB -device pc-dimm,id=mem3,memdev=mem-3 fragments hotplug-memory container and doesn't allow to use 1GB hugepage backend to consume remainig 1Gb. To ease managment factor count in max 1Gb alignment for each memory slot when sizing hotplug-memory region so that regadless of fragmentaion it would be possible to add max aligned DIMM. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
b03541fa77
commit
085f8e88ba
|
@ -1247,6 +1247,11 @@ FWCfgState *pc_memory_init(MachineState *machine,
|
||||||
pcms->hotplug_memory_base =
|
pcms->hotplug_memory_base =
|
||||||
ROUND_UP(0x100000000ULL + above_4g_mem_size, 1ULL << 30);
|
ROUND_UP(0x100000000ULL + above_4g_mem_size, 1ULL << 30);
|
||||||
|
|
||||||
|
if (pcms->enforce_aligned_dimm) {
|
||||||
|
/* size hotplug region assuming 1G page max alignment per slot */
|
||||||
|
hotplug_mem_size += (1ULL << 30) * machine->ram_slots;
|
||||||
|
}
|
||||||
|
|
||||||
if ((pcms->hotplug_memory_base + hotplug_mem_size) <
|
if ((pcms->hotplug_memory_base + hotplug_mem_size) <
|
||||||
hotplug_mem_size) {
|
hotplug_mem_size) {
|
||||||
error_report("unsupported amount of maximum memory: " RAM_ADDR_FMT,
|
error_report("unsupported amount of maximum memory: " RAM_ADDR_FMT,
|
||||||
|
|
Loading…
Reference in a new issue