From: Daniel Kral <d.kral@proxmox.com>
To: f.gruenbichler@proxmox.com
Cc: pve-devel@lists.proxmox.com
Subject: Re: [pve-devel] [PATCH v2 qemu-server 4/6] update/hotplug: handle pool limits
Date: Thu, 19 Dec 2024 17:09:07 +0100 [thread overview]
Message-ID: <20241219160907.187494-1-d.kral@proxmox.com> (raw)
In-Reply-To: <20240416122054.733817-18-f.gruenbichler@proxmox.com>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 3770 bytes --]
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@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
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2024-12-19 16:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-16 12:20 [pve-devel] [PATCH v2 qemu-server/pve-container 0/19] pool resource limits Fabian Grünbichler
2024-04-16 12:20 ` [pve-devel] [PATCH v2 access-control 1/1] pools: define " Fabian Grünbichler
2024-12-19 16:01 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 1/7] config: add pool usage helper Fabian Grünbichler
2024-12-19 16:01 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 2/7] status: add pool usage fields Fabian Grünbichler
2024-12-19 16:02 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 3/7] create/restore/clone: handle pool limits Fabian Grünbichler
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 4/7] start: " Fabian Grünbichler
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 5/7] hotplug: " Fabian Grünbichler
2024-12-19 16:03 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 6/7] rollback: " Fabian Grünbichler
2024-04-16 12:20 ` [pve-devel] [PATCH v2 container 7/7] update: " Fabian Grünbichler
2024-12-19 16:04 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 guest-common 1/1] helpers: add pool limit/usage helpers Fabian Grünbichler
2024-12-19 16:04 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 manager 1/4] api: pools: add limits management Fabian Grünbichler
2024-12-19 16:05 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 manager 2/4] pvestatd: collect and broadcast pool usage Fabian Grünbichler
2024-12-19 16:06 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 manager 3/4] api: return pool usage when queried Fabian Grünbichler
2024-04-16 12:20 ` [pve-devel] [PATCH v2 manager 4/4] ui: add pool limits and usage Fabian Grünbichler
2024-12-19 16:07 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 qemu-server 1/6] config: add pool usage helper Fabian Grünbichler
2024-12-19 16:08 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 qemu-server 2/6] vmstatus: add usage values for pool limits Fabian Grünbichler
2024-12-19 16:08 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 qemu-server 3/6] create/restore/clone: handle " Fabian Grünbichler
2024-04-16 12:20 ` [pve-devel] [PATCH v2 qemu-server 4/6] update/hotplug: " Fabian Grünbichler
2024-12-19 16:09 ` Daniel Kral [this message]
2024-04-16 12:20 ` [pve-devel] [PATCH v2 qemu-server 5/6] start: " Fabian Grünbichler
2024-12-19 16:09 ` Daniel Kral
2024-04-16 12:20 ` [pve-devel] [PATCH v2 qemu-server 6/6] rollback: " Fabian Grünbichler
2024-12-19 15:59 ` [pve-devel] [PATCH v2 qemu-server/pve-container 0/19] pool resource limits Daniel Kral
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20241219160907.187494-1-d.kral@proxmox.com \
--to=d.kral@proxmox.com \
--cc=f.gruenbichler@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox