From: "Daniel Kral" <d.kral@proxmox.com>
To: "Dominik Rusovac" <d.rusovac@proxmox.com>, <pve-devel@lists.proxmox.com>
Subject: Re: [PATCH ha-manager v2 31/40] usage: add dynamic usage scheduler
Date: Mon, 30 Mar 2026 15:06:29 +0200 [thread overview]
Message-ID: <DHG511IB89F1.2POUEJK1GHG9D@proxmox.com> (raw)
In-Reply-To: <DHG2PLK3OSPJ.1BHCTM19BN65P@proxmox.com>
On Mon Mar 30, 2026 at 1:17 PM CEST, Dominik Rusovac wrote:
> lgtm, consider modulo nits and check on falsy stats
>
> On Tue Mar 24, 2026 at 7:30 PM CET, Daniel Kral wrote:
>> The dynamic usage scheduler allows the HA Manager to make scheduling
>> decisions based on the current usage of the nodes and cluster resources
>> in addition to the maximum usage stats as reported by the PVE::HA::Env
>> implementation.
>>
>> Signed-off-by: Daniel Kral <d.kral@proxmox.com>
>> ---
>> changes v1 -> v2:
>> - guard PVE::HA::Usage::Dynamic with my $have_dynamic_scheduling as
>> PVE::RS::ResourceScheduling::Dynamic might not be available (as
>> suggested by @Thomas)
>> - add add_service() impl
>>
>
> [snip]
>
>> +sub new {
>> + my ($class, $haenv, $service_stats) = @_;
>> +
>> + my $node_stats = eval { $haenv->get_dynamic_node_stats() };
>> + die "did not get dynamic node usage information - $@" if $@;
>
> nit: consider rewording "did not get" to "could not retrieve"
>
Thanks, but NACK this for now to have consistent error messages with
PVE::HA::Usage::Static. Can be done in a single patch in the future
to change both at the same time though!
>> +
>> + my $scheduler = eval { PVE::RS::ResourceScheduling::Dynamic->new() };
>> + die "unable to initialize dynamic scheduling - $@" if $@;
>> +
>> + return bless {
>> + 'node-stats' => $node_stats,
>> + 'service-stats' => $service_stats,
>> + haenv => $haenv,
>> + scheduler => $scheduler,
>> + }, $class;
>> +}
>> +
>> +sub add_node {
>> + my ($self, $nodename) = @_;
>> +
>> + my $stats = $self->{'node-stats'}->{$nodename}
>> + or die "did not get dynamic node usage information for '$nodename'\n";
>
> nit: consider rewording "did not get" to "could not retrieve"
>
Same here
>> + die "dynamic node usage information for '$nodename' missing cpu count\n" if !$stats->{maxcpu};
>> + die "dynamic node usage information for '$nodename' missing memory\n" if !$stats->{maxmem};
>
> to allow for falsy 0-valued stats consider:
>
> die "dynamic node usage information for '$nodename' missing cpu count\n"
> if !defined($stats->{maxcpu});
> die "dynamic node usage information for '$nodename' missing memory\n"
> if !defined($stats->{maxmem});
>
Good catch, thanks!
>> +
>> + eval { $self->{scheduler}->add_node($nodename, $stats); };
>> + die "initializing dynamic node usage for '$nodename' failed - $@" if $@;
>> +}
>
> [snip]
>
>> +my sub get_service_usage {
>> + my ($self, $sid) = @_;
>> +
>> + my $service_stats = $self->{'service-stats'}->{$sid}->{usage}
>> + or die "did not get dynamic service usage information for '$sid'\n";
>
> nit: consider rewording "did not get" to "could not retrieve"
>
Same here
>> +
>> + return $service_stats;
>> +}
>> +
>> +sub add_service {
>> + my ($self, $sid, $current_node, $target_node, $running) = @_;
>> +
>> + # do not add service which do not put any usage on the nodes
>
> nit:
>
> # do not add service[s] [...]
>
> or
>
> # do not add service, which doe[s] [...]
>
> [snip]
Will do so!
>
> Reviewed-by: Dominik Rusovac <d.rusovac@proxmox.com>
next prev parent reply other threads:[~2026-03-30 13:06 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-24 18:29 [PATCH cluster/ha-manager/perl-rs/proxmox v2 00/40] dynamic scheduler + load rebalancer Daniel Kral
2026-03-24 18:29 ` [PATCH proxmox v2 01/40] resource-scheduling: inline add_cpu_usage in score_nodes_to_start_service Daniel Kral
2026-03-26 10:10 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH proxmox v2 02/40] resource-scheduling: move score_nodes_to_start_service to scheduler crate Daniel Kral
2026-03-26 10:11 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH proxmox v2 03/40] resource-scheduling: rename service to resource where appropriate Daniel Kral
2026-03-26 10:12 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH proxmox v2 04/40] resource-scheduling: introduce generic scheduler implementation Daniel Kral
2026-03-26 10:19 ` Dominik Rusovac
2026-03-26 14:16 ` Daniel Kral
2026-03-24 18:29 ` [PATCH proxmox v2 05/40] resource-scheduling: implement generic cluster usage implementation Daniel Kral
2026-03-26 10:28 ` Dominik Rusovac
2026-03-26 14:15 ` Daniel Kral
2026-03-24 18:29 ` [PATCH proxmox v2 06/40] resource-scheduling: topsis: handle empty criteria without panics Daniel Kral
2026-03-26 10:29 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH proxmox v2 07/40] resource-scheduling: compare by nodename in score_nodes_to_start_resource Daniel Kral
2026-03-26 10:29 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH proxmox v2 08/40] resource-scheduling: factor out topsis alternative mapping Daniel Kral
2026-03-26 10:30 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH proxmox v2 09/40] resource-scheduling: implement rebalancing migration selection Daniel Kral
2026-03-26 10:34 ` Dominik Rusovac
2026-03-26 14:11 ` Daniel Kral
2026-03-27 9:34 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH perl-rs v2 10/40] pve-rs: resource-scheduling: remove pedantic error handling from remove_node Daniel Kral
2026-03-27 9:38 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH perl-rs v2 11/40] pve-rs: resource-scheduling: remove pedantic error handling from remove_service_usage Daniel Kral
2026-03-27 9:39 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH perl-rs v2 12/40] pve-rs: resource-scheduling: move pve_static into resource_scheduling module Daniel Kral
2026-03-27 9:41 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH perl-rs v2 13/40] pve-rs: resource-scheduling: use generic usage implementation Daniel Kral
2026-03-27 14:13 ` Dominik Rusovac
2026-03-30 10:55 ` Daniel Kral
2026-03-24 18:29 ` [PATCH perl-rs v2 14/40] pve-rs: resource-scheduling: static: replace deprecated usage structs Daniel Kral
2026-03-27 14:18 ` Dominik Rusovac
2026-03-24 18:29 ` [PATCH perl-rs v2 15/40] pve-rs: resource-scheduling: implement pve_dynamic bindings Daniel Kral
2026-03-27 14:15 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH perl-rs v2 16/40] pve-rs: resource-scheduling: expose auto rebalancing methods Daniel Kral
2026-03-27 14:16 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH cluster v2 17/40] datacenter config: restructure verbose description for the ha crs option Daniel Kral
2026-03-30 5:50 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH cluster v2 18/40] datacenter config: add dynamic load scheduler option Daniel Kral
2026-03-30 5:53 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH cluster v2 19/40] datacenter config: add auto rebalancing options Daniel Kral
2026-03-26 16:08 ` Jillian Morgan
2026-03-26 16:20 ` Daniel Kral
2026-03-30 6:01 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 20/40] env: pve2: implement dynamic node and service stats Daniel Kral
2026-03-25 21:43 ` Thomas Lamprecht
2026-03-30 6:42 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 21/40] sim: hardware: pass correct types for static stats Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 22/40] sim: hardware: factor out static stats' default values Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 23/40] sim: hardware: fix static stats guard Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 24/40] sim: hardware: handle dynamic service stats Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 25/40] sim: hardware: add set-dynamic-stats command Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 26/40] sim: hardware: add getters for dynamic {node,service} stats Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 27/40] usage: pass service data to add_service_usage Daniel Kral
2026-03-30 7:34 ` Dominik Rusovac
2026-03-30 7:41 ` Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 28/40] usage: pass service data to get_used_service_nodes Daniel Kral
2026-03-30 7:54 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 29/40] add running flag to cluster service stats Daniel Kral
2026-03-30 8:03 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 30/40] usage: use add_service to add service usage to nodes Daniel Kral
2026-03-30 8:57 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 31/40] usage: add dynamic usage scheduler Daniel Kral
2026-03-30 11:17 ` Dominik Rusovac
2026-03-30 13:06 ` Daniel Kral [this message]
2026-03-24 18:30 ` [PATCH ha-manager v2 32/40] test: add dynamic usage scheduler test cases Daniel Kral
2026-03-30 12:46 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 33/40] manager: rename execute_migration to queue_resource_motion Daniel Kral
2026-03-30 12:29 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 34/40] manager: update_crs_scheduler_mode: factor out crs config Daniel Kral
2026-03-30 12:30 ` Dominik Rusovac
2026-03-24 18:30 ` [PATCH ha-manager v2 35/40] implement automatic rebalancing Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 36/40] test: add resource bundle generation test cases Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 37/40] test: add dynamic automatic rebalancing system " Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 38/40] test: add static " Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 39/40] test: add automatic rebalancing system test cases with TOPSIS method Daniel Kral
2026-03-24 18:30 ` [PATCH ha-manager v2 40/40] test: add automatic rebalancing system test cases with affinity rules Daniel Kral
2026-03-30 14:50 ` superseded: [PATCH cluster/ha-manager/perl-rs/proxmox v2 00/40] dynamic scheduler + load rebalancer Daniel Kral
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=DHG511IB89F1.2POUEJK1GHG9D@proxmox.com \
--to=d.kral@proxmox.com \
--cc=d.rusovac@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox