On Fri Sep 5, 2025 at 1:51 PM CEST, Dominik Csapak wrote: > the idea was that we get any of the 'new' versions on lookup, but that > lead to iterating through possibly all keys. Since that was called for > each resource in e.g. /cluster/resources api call, the runtime was > O(n^2) for the number of resources. > > To avoid that, simply look up the currently only valid key here which > makes this lookup much cheaper. > > In my test setup with ~10000 guests, it reduces the time for a call > to /cluster/resources from ~22s to ~400ms > > Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> > --- > NOTE: this is only a workaround and Aaron is working to making this > whole part unnecessary, but for now i think this is a good stop-gap > > PVE/API2Tools.pm | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/PVE/API2Tools.pm b/PVE/API2Tools.pm > index abe73fa2..863f5f55 100644 > --- a/PVE/API2Tools.pm > +++ b/PVE/API2Tools.pm > @@ -52,10 +52,9 @@ sub get_rrd_key { > return "pve2.3-${type}/${id}"; > } > > - # if no old key has been found, we expect on in the newer format: > pve-{type}-{version}/{id} > - # We accept all new versions, as the expectation is that they are only > allowed to add new colums as non-breaking change > - for my $k (keys %$rrd) { > - return $k if $k =~ m/^pve-\Q${type}\E-\d\d?.\d\/\Q${id}\E$/; > + my $key = "pve-${type}-9.0/${id}"; > + if (defined($rrd->{$key})) { > + return $key; > } > } >
Quickly tested this, because I experienced that in a 1500 guests 3-node cluster too and at least this patch reduced the time for /cluster/resources from 657.7±39.3 ms to 65.7±6.2 ms with 10 samples, nice! Didn't have a mixed-version cluster available currently, so I couldn't test what @Aaron pointed out in another thread. Else, consider this: Tested-by: Daniel Kral <d.k...@proxmox.com> _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel