[libvirt][PATCH v5 0/3] introduce 'restrictive' mode in numatune
Martin Kletzander
mkletzan at redhat.com
Fri Apr 16 10:05:39 UTC 2021
On Tue, Apr 13, 2021 at 02:38:05PM +0800, Luyao Zhong wrote:
>Before this patch set, numatune only has three memory modes:
>static, interleave and prefered. These memory policies are
>ultimately set by mbind() system call.
>
>Memory policy could be 'hard coded' into the kernel, but none of
>above policies fit our requirment under this case. mbind() support
>default memory policy, but it requires a NULL nodemask. So obviously
>setting allowed memory nodes is cgroups' mission under this case.
>So we introduce a new option for mode in numatune named 'restrictive'.
>
><numatune>
> <memory mode="restrictive" nodeset="1-4,^3"/>
> <memnode cellid="0" mode="restrictive" nodeset="1"/>
> <memnode cellid="2" mode="restrictive" nodeset="2"/>
></numatune>
>
>The config above means we only use cgroups to restrict the allowed
>memory nodes and not setting any specific memory policies explicitly.
>
>For this new "restrictive" mode, there is a concrete use case about a
>new feature in kernel but not merged yet, we call it memory tiering.
>(https://lwn.net/Articles/802544/).
>If memory tiering is enabled on host, DRAM is top tier memory, and
>PMEM(persistent memory) is second tier memory, PMEM is shown as numa node
>without cpu. Pages can be migrated between DRAM node and PMEM node based on
>DRAM pressure and how cold/hot they are. *this memory policy* is implemented
>in kernel. So we need a default mode here, but from libvirt's perspective,
>the "defaut" mode is "strict", it's not MPOL_DEFAULT
>(https://man7.org/linux/man-pages/man2/mbind.2.html) defined in kernel.
>And to make memory tiering works well, cgroups setting is necessary, since
>it restricts that the pages can only be migrated between the DRAM and PMEM
>nodes that we specified (NUMA affinity support).
>
>Just using cgroups with multiple nodes in the nodeset makes kernel decide
>on which node (out of those in the restricted set) to allocate on, but specifying
>"strict" basically allocates it sequentially (on the first one until it is full,
>then on the next one and so on).
>
>In a word, if a user requires default mode(MPOL_DEFAULT), that means they want
>kernel decide the memory allocation and also want the cgroups to restrict memory
>nodes, "restrictive" mode will be useful.
>
I applied the changes locally and fixed some changes that happened in
the meantime. I also split the patches differently as we usually add
conf, docs and schemas (driver-unrelated code) and some possible tests
in one patch and then add support for each applicable driver in separate
patches. I reworded some comments there were also two memory leaks that
I fixed and I will resend the series later to see if we have everything
in order.
If we disagree on the naming, then we can change it until the release,
but I do not think that is something that should stall the patches.
Thanks.
>BR,
>Luyao
>
>Luyao Zhong (3):
> docs: add docs for 'restrictive' option for mode in numatune
> schema: add 'restrictive' config option for mode in numatune
> qemu: add parser and formatter for 'restrictive' mode in numatune
>
> docs/formatdomain.rst | 7 +++-
> docs/schemas/domaincommon.rng | 2 +
> include/libvirt/libvirt-domain.h | 1 +
> src/conf/numa_conf.c | 9 ++++
> src/qemu/qemu_command.c | 6 ++-
> src/qemu/qemu_process.c | 27 ++++++++++++
> src/util/virnuma.c | 3 ++
> .../numatune-memnode-invalid-mode.err | 1 +
> .../numatune-memnode-invalid-mode.xml | 33 +++++++++++++++
> ...emnode-restrictive-mode.x86_64-latest.args | 38 +++++++++++++++++
> .../numatune-memnode-restrictive-mode.xml | 33 +++++++++++++++
> tests/qemuxml2argvtest.c | 2 +
> ...memnode-restrictive-mode.x86_64-latest.xml | 41 +++++++++++++++++++
> tests/qemuxml2xmltest.c | 1 +
> 14 files changed, 201 insertions(+), 3 deletions(-)
> create mode 100644 tests/qemuxml2argvdata/numatune-memnode-invalid-mode.err
> create mode 100644 tests/qemuxml2argvdata/numatune-memnode-invalid-mode.xml
> create mode 100644 tests/qemuxml2argvdata/numatune-memnode-restrictive-mode.x86_64-latest.args
> create mode 100644 tests/qemuxml2argvdata/numatune-memnode-restrictive-mode.xml
> create mode 100644 tests/qemuxml2xmloutdata/numatune-memnode-restrictive-mode.x86_64-latest.xml
>
>--
>2.25.4
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20210416/00302ef6/attachment-0001.sig>
More information about the libvir-list
mailing list