[libvirt PATCH 15/17] qemu: Add external_limit_manager config knob
Michal Privoznik
mprivozn at redhat.com
Mon Mar 8 10:30:52 UTC 2021
On 3/5/21 8:14 PM, Andrea Bolognani wrote:
> This will be useful when libvirtd is running in a containerized
> environment with limited capabilities, and in order to make
> things like VFIO device assignment still work an external
> privileged process changes the limits from outside of the
> container. KubeVirt is an example of this setup.
>
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>
> ---
> src/qemu/libvirtd_qemu.aug | 1 +
> src/qemu/qemu.conf | 12 ++++++++++++
> src/qemu/qemu_conf.c | 4 ++++
> src/qemu/qemu_conf.h | 1 +
> src/qemu/test_libvirtd_qemu.aug.in | 1 +
> 5 files changed, 19 insertions(+)
>
> diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug
> index 3c1045858b..f1b024a37f 100644
> --- a/src/qemu/libvirtd_qemu.aug
> +++ b/src/qemu/libvirtd_qemu.aug
> @@ -104,6 +104,7 @@ module Libvirtd_qemu =
> | str_entry "slirp_helper"
> | str_entry "dbus_daemon"
> | bool_entry "set_process_name"
> + | bool_entry "external_limit_manager"
> | int_entry "max_processes"
> | int_entry "max_files"
> | limits_entry "max_core"
> diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
> index 0c1054f198..15cbc3ba38 100644
> --- a/src/qemu/qemu.conf
> +++ b/src/qemu/qemu.conf
> @@ -662,6 +662,18 @@
> #
> #set_process_name = 1
>
> +# If enabled, libvirt will not attempt to change process limits (as
> +# configured with the max_processes, max_files and max_core settings
> +# below) itself but will instead expect an external entity to perform
> +# this task.
> +#
> +# This also applies to the memory locking limit, which cannot be
> +# configured here and is instead calculated dynamically based on the
> +# exact guest configuration: if an external limit manager is in use,
> +# then libvirt will merely check that the limit has been set
> +# appropriately.
> +#
> +#external_limit_manager = 1
>
> # If max_processes is set to a positive integer, libvirt will use
> # it to set the maximum number of processes that can be run by qemu
> diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
> index 2bbc75024c..ee95c124dd 100644
> --- a/src/qemu/qemu_conf.c
> +++ b/src/qemu/qemu_conf.c
> @@ -673,6 +673,10 @@ virQEMUDriverConfigLoadProcessEntry(virQEMUDriverConfigPtr cfg,
>
> if (virConfGetValueBool(conf, "set_process_name", &cfg->setProcessName) < 0)
> return -1;
> +
> + if (virConfGetValueBool(conf, "external_limit_manager", &cfg->externalLimitManager) < 0)
> + return -1;
> +
> if (virConfGetValueUInt(conf, "max_processes", &cfg->maxProcesses) < 0)
> return -1;
> if (virConfGetValueUInt(conf, "max_files", &cfg->maxFiles) < 0)
I think we could error out if external_limit_manager is set and one of
these max_processes, max_files, max_core is set also. It's not really a
combination we can make sense of, is it? It's perfectly okay to write
that in a separate patch though.
> diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h
> index 7025b5222e..15e0353253 100644
> --- a/src/qemu/qemu_conf.h
> +++ b/src/qemu/qemu_conf.h
> @@ -176,6 +176,7 @@ struct _virQEMUDriverConfig {
> bool nogfxAllowHostAudio;
> bool setProcessName;
>
> + bool externalLimitManager;
> unsigned int maxProcesses;
> unsigned int maxFiles;
> unsigned int maxThreadsPerProc;
> diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
> index 9310dcec1c..73be55febe 100644
> --- a/src/qemu/test_libvirtd_qemu.aug.in
> +++ b/src/qemu/test_libvirtd_qemu.aug.in
> @@ -77,6 +77,7 @@ module Test_libvirtd_qemu =
> { "hugetlbfs_mount" = "/dev/hugepages" }
> { "bridge_helper" = "/usr/libexec/qemu-bridge-helper" }
> { "set_process_name" = "1" }
> +{ "external_limit_manager" = "1" }
> { "max_processes" = "0" }
> { "max_files" = "0" }
> { "max_threads_per_process" = "0" }
>
Michal
More information about the libvir-list
mailing list