[pve-devel] [PATCH v2 qemu-server 5/6] start: handle pool limits
Daniel Kral
d.kral at proxmox.com
Thu Dec 19 17:09:28 CET 2024
On 16/04/2024 14:20, Fabian Grünbichler wrote:
> if the start is not part of an incoming migration, check the VM against its
> pool's run limit.
>
> Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
> PVE/QemuServer.pm | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index be937ec1..78b6ff96 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -5704,6 +5704,19 @@ sub vm_start_nolock {
> # But we do it above, so for now let's be consistent.
> $conf = PVE::QemuConfig->load_config($vmid); # update/reload
> }
> +
> + my $cpu_count = 1;
> + $cpu_count = $conf->{sockets} if $conf->{sockets};
> + $cpu_count *= ($conf->{cores} || 1);
> + $cpu_count = $conf->{vcpus} if $conf->{vcpus} && $conf->{vcpus} < $cpu_count;
> +
> + my $changes = {
> + absolute => 1,
> + running => 1,
> + mem => get_current_memory($conf->{memory}),
Bug: The memory value here should be converted from MiB to bytes, else
the pool limit will not be enforced as `check_guest_pool_limit` expects
the value to be in bytes, i.e. `get_current_memory(...) * 1024 * 1024`.
Spotted it by starting a second VM (which would've raised the memory
usage over the limit) and wondered why it didn't fail. For the third VM
I got:
```
pool limits exhausted: (run) mem: 4096 + 0.001953125 over 3072
```
> + cpu => $cpu_count,
> + };
> + PVE::GuestHelpers::check_guest_pool_limit($vmid, $changes);
> }
>
> # override offline migrated volumes, conf is out of date still
> --
> 2.39.2
More information about the pve-devel
mailing list