[pve-devel] [PATCH v2 qemu-server 4/6] update/hotplug: handle pool limits
Daniel Kral
d.kral at proxmox.com
Thu Dec 19 17:09:07 CET 2024
On 16/04/2024 14:20, Fabian Grünbichler wrote:
> if the new value is higher than the old one, check against limits. if the old
> one is higher, then the change is always okay, to support reducing the usage in
> steps spread over multiple guests..
>
> Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
> PVE/API2/Qemu.pm | 22 ++++++++++++++++++++++
> PVE/QemuServer.pm | 7 +++++++
> PVE/QemuServer/Memory.pm | 6 ++++++
> 3 files changed, 35 insertions(+)
>
> diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
> index f0ff785c..adbc6557 100644
> --- a/PVE/API2/Qemu.pm
> +++ b/PVE/API2/Qemu.pm
> @@ -1863,6 +1863,28 @@ my $update_vm_api = sub {
> }
> };
>
> + # check pool limits, but only if values increase, ignoring
> + # deletions and pending values
> + my $usage = PVE::QemuConfig->get_pool_usage($conf);
> + if (defined($param->{sockets}) || defined($param->{cores})) {
> + my $old = $usage->{cpu};
Git complained about this line:
Applying: update/hotplug: handle pool limits
.git/rebase-apply/patch:19: space before tab in indent.
my $old = $usage->{cpu};
warning: 1 line adds whitespace errors.
> + my $new = $param->{sockets} || $usage->{sockets};
> + $new *= ($param->{cores} || $usage->{cores});
> +
> + if ($new > $old) {
> + my $change = { cpu => $new - $old };
> + PVE::GuestHelpers::check_guest_pool_limit($vmid, $change);
> + }
> + } elsif (defined($param->{memory})) {
> + my $old = $usage->{mem};
> + my $new = PVE::QemuServer::Memory::get_current_memory($param->{memory})*1024*1024;
> +
> + if ($new > $old) {
> + my $change = { mem => $new - $old };
> + PVE::GuestHelpers::check_guest_pool_limit($vmid, $change);
> + }
> + }
> +
> foreach my $opt (@delete) {
> $modified->{$opt} = 1;
> $conf = PVE::QemuConfig->load_config($vmid); # update/reload
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 93eaaec5..be937ec1 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -4617,6 +4617,13 @@ sub qemu_cpu_hotplug {
> }
>
> return;
> + } else {
> + my $changes = {
> + absolute => 1,
> + running => 1,
> + cpu => $vcpus,
> + };
> + PVE::GuestHelpers::check_guest_pool_limit($vmid, $changes);
> }
>
> my $currentrunningvcpus = mon_cmd($vmid, "query-cpus-fast");
> diff --git a/PVE/QemuServer/Memory.pm b/PVE/QemuServer/Memory.pm
> index f365f2d1..b27b8b2b 100644
> --- a/PVE/QemuServer/Memory.pm
> +++ b/PVE/QemuServer/Memory.pm
> @@ -234,6 +234,12 @@ sub qemu_memory_hotplug {
> die "you cannot add more memory than max mem $MAX_MEM MB!\n" if $value > $MAX_MEM;
>
> if ($value > $memory) {
> + my $changes = {
> + absolute => 1,
Shouldn't this be relative as the memory value is calculated as...
> + running => 1,
> + mem => $memory - $value,
the difference between the old and new value?
Also, I can only guess from the context that these values are in MiB,
which would mean that this should be converted to bytes, but I could be
totally wrong here.
Unfortunately, I'm unsure how to trigger this hotplug (as it only seems
to be called by `vmconfig_hotplug_pending`, which is called in
`do_import` and after another pool limit check in `update_vm_api`, so
the first call will always die first) without changing the code too
much. I'd be happy to know when this code gets executed.
> + };
> + PVE::GuestHelpers::check_guest_pool_limit($vmid, $changes);
>
> my $numa_hostmap;
>
> --
> 2.39.2
More information about the pve-devel
mailing list