diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index dc949db4dd..9673e8e7e5 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -428,8 +428,7 @@ qemuSetupMemoryCgroup(virDomainObjPtr vm) } } - if (virCgroupSetMemoryHardLimit(priv->cgroup, - qemuDomainMemoryLimit(vm->def)) < 0) + if (virCgroupSetMemoryHardLimit(priv->cgroup, vm->def->mem.hard_limit) < 0) return -1; if (vm->def->mem.soft_limit != 0 && diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 8b628d68d5..c8f7df227c 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9220,7 +9220,7 @@ qemuBuildCommandLine(virConnectPtr conn, } if (mlock) - virCommandSetMaxMemLock(cmd, qemuDomainMemoryLimit(def) * 1024); + virCommandSetMaxMemLock(cmd, def->mem.hard_limit * 1024); virObjectUnref(cfg); return cmd; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 393af6b68f..7f4d17d126 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2306,55 +2306,6 @@ cleanup: return ret; } - -unsigned long long -qemuDomainMemoryLimit(virDomainDefPtr def) -{ - unsigned long long mem; - size_t i; - - if (def->mem.hard_limit) { - mem = def->mem.hard_limit; - } else { - /* If there is no hard_limit set, compute a reasonable one to avoid - * system thrashing caused by exploited qemu. A 'reasonable - * limit' has been chosen: - * (1 + k) * (domain memory + total video memory) + (32MB for - * cache per each disk) + F - * where k = 0.5 and F = 400MB. The cache for disks is important as - * kernel cache on the host side counts into the RSS limit. - * Moreover, VFIO requires some amount for IO space. Alex Williamson - * suggested adding 1GiB for IO space just to be safe (some finer - * tuning might be nice, though). - * - * Technically, the disk cache does not have to be included in - * RLIMIT_MEMLOCK but it doesn't hurt as it's just an upper limit and - * it makes this function and its usage simpler. - */ - mem = def->mem.max_balloon; - for (i = 0; i < def->nvideos; i++) - mem += def->videos[i]->vram; - mem *= 1.5; - mem += def->ndisks * 32768; - mem += 409600; - - for (i = 0; i < def->nhostdevs; i++) { - virDomainHostdevDefPtr hostdev = def->hostdevs[i]; - if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && - hostdev->source.subsys.type == - VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI && - hostdev->source.subsys.u.pci.backend == - VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) { - mem += 1024 * 1024; - break; - } - } - } - - return mem; -} - - int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver, virDomainObjPtr vm) diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 0a4a51ec4e..21f116c6d3 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -365,8 +365,6 @@ extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks; extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace; extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig; -unsigned long long qemuDomainMemoryLimit(virDomainDefPtr def); - int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver, virDomainObjPtr vm); diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 85d2ca9fab..478f33183b 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1030,7 +1030,7 @@ int qemuDomainAttachHostPciDevice(virQEMUDriverPtr driver, */ vm->def->hostdevs[vm->def->nhostdevs++] = hostdev; virProcessSetMaxMemLock(vm->pid, - qemuDomainMemoryLimit(vm->def) * 1024); + vm->def->mem.hard_limit * 1024); vm->def->hostdevs[vm->def->nhostdevs--] = NULL; }