all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Daniel Kral <d.kral@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH ha-manager 16/16] lrm: prune non-existent HA resources from results once per work iteration
Date: Mon, 20 Jul 2026 14:37:05 +0200	[thread overview]
Message-ID: <20260720123705.216089-17-d.kral@proxmox.com> (raw)
In-Reply-To: <20260720123705.216089-1-d.kral@proxmox.com>

The $self->{service_status_uids} property is updated once per work
iteration. This makes the pruning and re-creation of the
$self->{results} hash on every resource command completion in
resource_command_finished() unnecessary.

In a test startup of 768 HA resources on a single node at the same time
showed a ~21.8 speedup for resource_command_finished().

+---------------------------+---------------+--------------+
|        Subroutine         | Before Change | After Change |
+---------------------------+---------------+--------------+
| check_active_workers      | 4.09ms        | 998µs        |
| resource_command_finished | 1.09ms        | 50µs         |
+---------------------------+---------------+--------------+

The profiling was done on a physical host with Devel::NYTProf 6.14 [0].

[0] https://metacpan.org/pod/Devel::NYTProf

Signed-off-by: Daniel Kral <d.kral@proxmox.com>
---
 src/PVE/HA/LRM.pm | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/PVE/HA/LRM.pm b/src/PVE/HA/LRM.pm
index 911672cb..41a925ff 100644
--- a/src/PVE/HA/LRM.pm
+++ b/src/PVE/HA/LRM.pm
@@ -199,6 +199,15 @@ sub flush_lrm_status {
 
     return 0 if !$haenv->quorate();
 
+    # remove results from non-existing HA resources just before writing it out
+    # to prevent persisting any leftover LRM results
+    my $results = {};
+    for my $id (keys $self->{results}->%*) {
+        next if !$self->{service_status_uids}->{$id};
+        $results->{$id} = $self->{results}->{$id};
+    }
+    $self->{results} = $results;
+
     my $lrm_status = {
         state => $self->{status}->{state},
         mode => $self->{mode},
@@ -890,13 +899,6 @@ sub resource_command_finished {
         state => $w->{state},
         exit_code => $exit_code,
     };
-
-    my $results = {};
-    foreach my $id (keys %{ $self->{results} }) {
-        next if !$self->{service_status_uids}->{$id};
-        $results->{$id} = $self->{results}->{$id};
-    }
-    $self->{results} = $results;
 }
 
 # processes the exit code from a finished resource agent, so that the CRM knows
-- 
2.47.3





      parent reply	other threads:[~2026-07-20 12:39 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-20 12:36 [PATCH-SERIES ha-manager 00/16] some sid parsing and LRM speedup improvements Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 01/16] make tidy Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 02/16] resources: remove commented ipaddr resource type Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 03/16] tree-wide: use the term vmid instead of name when referring to VMs/CTs Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 04/16] api: resources: remove unused return values at parse_sid callsites Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 05/16] make parse_sid always return an array Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 06/16] config: use early returns in parse_sid Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 07/16] config: make update_single_resource_config_inplace only allow sids Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 08/16] introduce separate parse_vmid_or_sid helper subroutine Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 09/16] drop the unmodified sid return array entry value from parse_sid Daniel Kral
2026-07-20 12:36 ` [PATCH ha-manager 10/16] lrm: document and initialize LRM instance properties Daniel Kral
2026-07-20 12:37 ` [PATCH ha-manager 11/16] lrm: rename update_lrm_status to flush_lrm_status Daniel Kral
2026-07-20 12:37 ` [PATCH ha-manager 12/16] lrm: rename update_service_status to update_lrm_status Daniel Kral
2026-07-20 12:37 ` [PATCH ha-manager 13/16] lrm: update the service status once per work iteration Daniel Kral
2026-07-20 12:37 ` [PATCH ha-manager 14/16] lrm: read service config " Daniel Kral
2026-07-20 12:37 ` [PATCH ha-manager 15/16] lrm: compute valid service uids hash set " Daniel Kral
2026-07-20 12:37 ` Daniel Kral [this message]

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=20260720123705.216089-17-d.kral@proxmox.com \
    --to=d.kral@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal