mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 03:21:19 +00:00
qemu: Move @prealloc into qemuBuildMemoryGetPagesize()
The qemuBuildMemoryGetPagesize() function has everything is needs to decide whether preallocation is needed or not. Move the logic from qemuBuildMemoryBackendProps() into qemuBuildMemoryGetPagesize(). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
117ede19fb
commit
d198351faa
@ -3610,12 +3610,14 @@ qemuBuildMemoryGetPagesize(virQEMUDriverConfig *cfg,
|
|||||||
const virDomainMemoryDef *mem,
|
const virDomainMemoryDef *mem,
|
||||||
unsigned long long *pagesizeRet,
|
unsigned long long *pagesizeRet,
|
||||||
bool *needHugepageRet,
|
bool *needHugepageRet,
|
||||||
bool *useHugepageRet)
|
bool *useHugepageRet,
|
||||||
|
bool *preallocRet)
|
||||||
{
|
{
|
||||||
const long system_page_size = virGetSystemPageSizeKB();
|
const long system_page_size = virGetSystemPageSizeKB();
|
||||||
unsigned long long pagesize = mem->pagesize;
|
unsigned long long pagesize = mem->pagesize;
|
||||||
bool needHugepage = !!pagesize;
|
bool needHugepage = !!pagesize;
|
||||||
bool useHugepage = !!pagesize;
|
bool useHugepage = !!pagesize;
|
||||||
|
bool prealloc = false;
|
||||||
|
|
||||||
if (pagesize == 0) {
|
if (pagesize == 0) {
|
||||||
virDomainHugePage *master_hugepage = NULL;
|
virDomainHugePage *master_hugepage = NULL;
|
||||||
@ -3676,9 +3678,24 @@ qemuBuildMemoryGetPagesize(virQEMUDriverConfig *cfg,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (def->mem.allocation == VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE)
|
||||||
|
prealloc = true;
|
||||||
|
|
||||||
|
/* If the NVDIMM is a real device then there's nothing to prealloc.
|
||||||
|
* If anything, we would be only wearing off the device.
|
||||||
|
* Similarly, virtio-pmem-pci doesn't need prealloc either. */
|
||||||
|
if (mem->nvdimmPath) {
|
||||||
|
if (!mem->nvdimmPmem &&
|
||||||
|
mem->model != VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM)
|
||||||
|
prealloc = true;
|
||||||
|
} else if (useHugepage) {
|
||||||
|
prealloc = true;
|
||||||
|
}
|
||||||
|
|
||||||
*pagesizeRet = pagesize;
|
*pagesizeRet = pagesize;
|
||||||
*needHugepageRet = needHugepage;
|
*needHugepageRet = needHugepage;
|
||||||
*useHugepageRet = useHugepage;
|
*useHugepageRet = useHugepage;
|
||||||
|
*preallocRet = prealloc;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -3768,15 +3785,12 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,
|
|||||||
if (discard == VIR_TRISTATE_BOOL_ABSENT)
|
if (discard == VIR_TRISTATE_BOOL_ABSENT)
|
||||||
discard = def->mem.discard;
|
discard = def->mem.discard;
|
||||||
|
|
||||||
if (def->mem.allocation == VIR_DOMAIN_MEMORY_ALLOCATION_IMMEDIATE)
|
|
||||||
prealloc = true;
|
|
||||||
|
|
||||||
if (virDomainNumatuneGetMode(def->numa, mem->targetNode, &mode) < 0 &&
|
if (virDomainNumatuneGetMode(def->numa, mem->targetNode, &mode) < 0 &&
|
||||||
virDomainNumatuneGetMode(def->numa, -1, &mode) < 0)
|
virDomainNumatuneGetMode(def->numa, -1, &mode) < 0)
|
||||||
mode = VIR_DOMAIN_NUMATUNE_MEM_STRICT;
|
mode = VIR_DOMAIN_NUMATUNE_MEM_STRICT;
|
||||||
|
|
||||||
if (qemuBuildMemoryGetPagesize(cfg, def, mem, &pagesize,
|
if (qemuBuildMemoryGetPagesize(cfg, def, mem, &pagesize,
|
||||||
&needHugepage, &useHugepage) < 0)
|
&needHugepage, &useHugepage, &prealloc) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
props = virJSONValueNewObject();
|
props = virJSONValueNewObject();
|
||||||
@ -3785,13 +3799,10 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,
|
|||||||
def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_MEMFD) {
|
def->mem.source == VIR_DOMAIN_MEMORY_SOURCE_MEMFD) {
|
||||||
backendType = "memory-backend-memfd";
|
backendType = "memory-backend-memfd";
|
||||||
|
|
||||||
if (useHugepage) {
|
if (useHugepage &&
|
||||||
if (virJSONValueObjectAdd(&props, "b:hugetlb", useHugepage, NULL) < 0 ||
|
(virJSONValueObjectAdd(&props, "b:hugetlb", useHugepage, NULL) < 0 ||
|
||||||
virJSONValueObjectAdd(&props, "U:hugetlbsize", pagesize << 10, NULL) < 0) {
|
virJSONValueObjectAdd(&props, "U:hugetlbsize", pagesize << 10, NULL) < 0)) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
|
||||||
prealloc = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qemuBuildMemoryBackendPropsShare(props, memAccess) < 0)
|
if (qemuBuildMemoryBackendPropsShare(props, memAccess) < 0)
|
||||||
@ -3805,15 +3816,9 @@ qemuBuildMemoryBackendProps(virJSONValue **backendProps,
|
|||||||
|
|
||||||
if (mem->nvdimmPath) {
|
if (mem->nvdimmPath) {
|
||||||
memPath = g_strdup(mem->nvdimmPath);
|
memPath = g_strdup(mem->nvdimmPath);
|
||||||
/* If the NVDIMM is a real device then there's nothing to prealloc.
|
|
||||||
* If anything, we would be only wearing off the device.
|
|
||||||
* Similarly, virtio-pmem-pci doesn't need prealloc either. */
|
|
||||||
if (!mem->nvdimmPmem && mem->model != VIR_DOMAIN_MEMORY_MODEL_VIRTIO_PMEM)
|
|
||||||
prealloc = true;
|
|
||||||
} else if (useHugepage) {
|
} else if (useHugepage) {
|
||||||
if (qemuGetDomainHupageMemPath(priv->driver, def, pagesize, &memPath) < 0)
|
if (qemuGetDomainHupageMemPath(priv->driver, def, pagesize, &memPath) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
prealloc = true;
|
|
||||||
} else {
|
} else {
|
||||||
/* We can have both pagesize and mem source. If that's the case,
|
/* We can have both pagesize and mem source. If that's the case,
|
||||||
* prefer hugepages as those are more specific. */
|
* prefer hugepages as those are more specific. */
|
||||||
|
Loading…
Reference in New Issue
Block a user