From 13b9946eb598dd0fc22b77f5384b09d1df6366e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= Date: Wed, 5 Feb 2014 15:10:09 +0100 Subject: [PATCH] LXC from native: migrate memory tuning --- src/lxc/lxc_native.c | 40 +++++++++++++++++++ .../lxcconf2xml-memtune.config | 10 +++++ tests/lxcconf2xmldata/lxcconf2xml-memtune.xml | 29 ++++++++++++++ tests/lxcconf2xmltest.c | 1 + 4 files changed, 80 insertions(+) create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-memtune.config create mode 100644 tests/lxcconf2xmldata/lxcconf2xml-memtune.xml diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c index 1785e150c7..ecc63ded2d 100644 --- a/src/lxc/lxc_native.c +++ b/src/lxc/lxc_native.c @@ -607,6 +607,42 @@ lxcIdmapWalkCallback(const char *name, virConfValuePtr value, void *data) return 0; } +static int +lxcSetMemTune(virDomainDefPtr def, virConfPtr properties) +{ + virConfValuePtr value; + unsigned long long size = 0; + + if ((value = virConfGetValue(properties, + "lxc.cgroup.memory.limit_in_bytes")) && + value->str && STRNEQ(value->str, "-1")) { + if (lxcConvertSize(value->str, &size) < 0) + return -1; + size = size / 1024; + def->mem.max_balloon = size; + def->mem.hard_limit = size; + } + + if ((value = virConfGetValue(properties, + "lxc.cgroup.memory.soft_limit_in_bytes")) && + value->str && STRNEQ(value->str, "-1")) { + if (lxcConvertSize(value->str, &size) < 0) + return -1; + + def->mem.soft_limit = size / 1024; + } + + if ((value = virConfGetValue(properties, + "lxc.cgroup.memory.memsw.limit_in_bytes")) && + value->str && STRNEQ(value->str, "-1")) { + if (lxcConvertSize(value->str, &size) < 0) + return -1; + + def->mem.swap_hard_limit = size / 1024; + } + return 0; +} + virDomainDefPtr lxcParseConfigString(const char *config) { @@ -679,6 +715,10 @@ lxcParseConfigString(const char *config) if (virConfWalk(properties, lxcIdmapWalkCallback, vmdef) < 0) goto error; + /* lxc.cgroup.memory.* */ + if (lxcSetMemTune(vmdef, properties) < 0) + goto error; + goto cleanup; error: diff --git a/tests/lxcconf2xmldata/lxcconf2xml-memtune.config b/tests/lxcconf2xmldata/lxcconf2xml-memtune.config new file mode 100644 index 0000000000..ef07a5143d --- /dev/null +++ b/tests/lxcconf2xmldata/lxcconf2xml-memtune.config @@ -0,0 +1,10 @@ +lxc.rootfs = /var/lib/lxc/migrate_test/rootfs +lxc.utsname = migrate_test +lxc.autodev=1 + +# 1GiB +lxc.cgroup.memory.limit_in_bytes = 1073741824 +# 128MiB +lxc.cgroup.memory.soft_limit_in_bytes = 134217728 +# 2GiB +lxc.cgroup.memory.memsw.limit_in_bytes = 2147483648 diff --git a/tests/lxcconf2xmldata/lxcconf2xml-memtune.xml b/tests/lxcconf2xmldata/lxcconf2xml-memtune.xml new file mode 100644 index 0000000000..0264356748 --- /dev/null +++ b/tests/lxcconf2xmldata/lxcconf2xml-memtune.xml @@ -0,0 +1,29 @@ + + migrate_test + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 1048576 + 0 + + 1048576 + 131072 + 2097152 + + 1 + + exe + /sbin/init + + + + + + destroy + restart + destroy + + + + + + + diff --git a/tests/lxcconf2xmltest.c b/tests/lxcconf2xmltest.c index 7042bdf11b..3dd0a0bcf9 100644 --- a/tests/lxcconf2xmltest.c +++ b/tests/lxcconf2xmltest.c @@ -109,6 +109,7 @@ mymain(void) DO_TEST("physnetwork", false); DO_TEST("macvlannetwork", false); DO_TEST("idmap", false); + DO_TEST("memtune", false); return ret; } -- GitLab