[pve-devel] [PATCH qemu-server 1/1] config: only fetch necessary default values in get_derived_property helper
Daniel Kral
d.kral at proxmox.com
Tue Sep 30 16:19:08 CEST 2025
get_derived_property(...) is called in the semi-hot path of the HA
Manager's static load scheduler to retrieve the static stats of each VM.
As the defaults are only needed in certain cases and for a very small
subset of properties in the VM config, get those separately when needed.
Signed-off-by: Daniel Kral <d.kral at proxmox.com>
---
get_current_memory(...) is still quite costly here, because it calls
parse_memory(...), which calls
PVE::JSONSchema::parse_property_string(...), which adds up for many
guest configurations parsed in every manage(...) call, but this already
helps quite a lot.
src/PVE/QemuConfig.pm | 8 +++-----
src/PVE/QemuServer.pm | 6 ++++++
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/PVE/QemuConfig.pm b/src/PVE/QemuConfig.pm
index d0844c4c..078c87e0 100644
--- a/src/PVE/QemuConfig.pm
+++ b/src/PVE/QemuConfig.pm
@@ -582,12 +582,10 @@ sub load_current_config {
sub get_derived_property {
my ($class, $conf, $name) = @_;
- my $defaults = PVE::QemuServer::load_defaults();
-
if ($name eq 'max-cpu') {
- my $cpus =
- ($conf->{sockets} || $defaults->{sockets}) * ($conf->{cores} || $defaults->{cores});
- return $conf->{vcpus} || $cpus;
+ my $sockets = $conf->{sockets} || PVE::QemuServer::get_default_property_value('sockets');
+ my $cores = $conf->{cores} || PVE::QemuServer::get_default_property_value('cores');
+ return $conf->{vcpus} || ($sockets * $cores);
} elsif ($name eq 'max-memory') { # current usage maximum, not maximum hotpluggable
return get_current_memory($conf->{memory}) * 1024 * 1024;
} else {
diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 7d5ab718..459ba8f0 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -2314,6 +2314,12 @@ sub write_vm_config {
return $raw;
}
+sub get_default_property_value {
+ my ($name) = @_;
+
+ return $confdesc->{$name}->{default};
+}
+
sub load_defaults {
my $res = {};
--
2.47.3
More information about the pve-devel
mailing list