Benchmarked recompute_online_node_usage() again with ~300 HA services (minimal containers) running on my virtual test cluster.
Timings before this patch were between 0.007 - 0.016 seconds Timings after this patch were between 0.0035 - 0.006 seconds So only about twice as fast unfortunately. Reducing the number of recompute_online_node_usage() calls might be necessary after all. Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> --- src/PVE/HA/Manager.pm | 1 + src/PVE/HA/Resources/PVECT.pm | 1 + src/PVE/HA/Resources/PVEVM.pm | 1 + src/PVE/HA/Usage/Static.pm | 13 ++++++++++--- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 69bfbc3..c9a9f14 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -447,6 +447,7 @@ sub manage { for (;;) { my $repeat = 0; + $haenv->get_static_guest_stats(); # to cache the info $self->recompute_online_node_usage(); foreach my $sid (sort keys %$ss) { diff --git a/src/PVE/HA/Resources/PVECT.pm b/src/PVE/HA/Resources/PVECT.pm index c10d024..4c295f3 100644 --- a/src/PVE/HA/Resources/PVECT.pm +++ b/src/PVE/HA/Resources/PVECT.pm @@ -155,6 +155,7 @@ sub remove_locks { sub get_static_stats { my ($class, $haenv, $id, $service_node, $cache) = @_; + # NOTE that cache might not contain the full config my $conf = $cache->{$id} ||= PVE::LXC::Config->load_config($id, $service_node); return { diff --git a/src/PVE/HA/Resources/PVEVM.pm b/src/PVE/HA/Resources/PVEVM.pm index ca7fbc4..b6234be 100644 --- a/src/PVE/HA/Resources/PVEVM.pm +++ b/src/PVE/HA/Resources/PVEVM.pm @@ -178,6 +178,7 @@ sub remove_locks { sub get_static_stats { my ($class, $haenv, $id, $service_node, $cache) = @_; + # NOTE that cache might not contain the full config my $conf = $cache->{$id} ||= PVE::QemuConfig->load_config($id, $service_node); my $defaults = PVE::QemuServer::load_defaults(); diff --git a/src/PVE/HA/Usage/Static.pm b/src/PVE/HA/Usage/Static.pm index 73ce836..05b876d 100644 --- a/src/PVE/HA/Usage/Static.pm +++ b/src/PVE/HA/Usage/Static.pm @@ -20,6 +20,7 @@ sub new { return bless { 'node-stats' => $node_stats, 'service-stats' => {}, + 'service-stats-cache' => $haenv->get_static_guest_stats(1), haenv => $haenv, scheduler => $scheduler, 'service-counts' => {}, # Service count on each node. Fallback if scoring calculation fails. @@ -65,13 +66,19 @@ my sub get_service_usage { return $self->{'service-stats'}->{$sid} if $self->{'service-stats'}->{$sid}; - my (undef, $type, $id) = $self->{haenv}->parse_sid($sid); + my $haenv = $self->{haenv}; + + my (undef, $type, $id) = $haenv->parse_sid($sid); my $plugin = PVE::HA::Resources->lookup($type); - my $stats = eval { $plugin->get_static_stats($self->{haenv}, $id, $service_node); }; + my $stats = eval { + $plugin->get_static_stats($haenv, $id, $service_node, $self->{'service-stats-cache'}); + }; if (my $err = $@) { # config might've already moved during a migration - $stats = eval { $plugin->get_static_stats($self->{haenv}, $id, $migration_target); } if $migration_target; + if ($migration_target) { + $stats = eval { $plugin->get_static_stats($haenv, $id, $migration_target); }; + } die "did not get static service usage information for '$sid' - $err\n" if !$stats; } -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel