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

Reply via email to