[pve-devel] [PATCH v2 ha-manager 02/15] resources: add get_static_stats() method
Fiona Ebner
f.ebner at proxmox.com
Thu Nov 17 15:00:03 CET 2022
to be used for static resource scheduling.
In container's vmstatus(), the 'cores' option takes precedence over
the 'cpulimit' one, but it felt more accurate to prefer 'cpulimit'
here.
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
Changes from v1:
* Properly add it to the simulation environment.
src/PVE/HA/Resources.pm | 5 +++++
src/PVE/HA/Resources/PVECT.pm | 11 +++++++++++
src/PVE/HA/Resources/PVEVM.pm | 14 ++++++++++++++
src/PVE/HA/Sim/Hardware.pm | 15 +++++++++++++++
src/PVE/HA/Sim/Resources.pm | 10 ++++++++++
5 files changed, 55 insertions(+)
diff --git a/src/PVE/HA/Resources.pm b/src/PVE/HA/Resources.pm
index 835c314..7ba90f6 100644
--- a/src/PVE/HA/Resources.pm
+++ b/src/PVE/HA/Resources.pm
@@ -161,6 +161,11 @@ sub remove_locks {
die "implement in subclass";
}
+sub get_static_stats {
+ my ($class, $haenv, $id, $service_node) = @_;
+
+ die "implement in subclass";
+}
# package PVE::HA::Resources::IPAddr;
diff --git a/src/PVE/HA/Resources/PVECT.pm b/src/PVE/HA/Resources/PVECT.pm
index 015faf3..4c9530d 100644
--- a/src/PVE/HA/Resources/PVECT.pm
+++ b/src/PVE/HA/Resources/PVECT.pm
@@ -150,4 +150,15 @@ sub remove_locks {
return undef;
}
+sub get_static_stats {
+ my ($class, $haenv, $id, $service_node) = @_;
+
+ my $conf = PVE::LXC::Config->load_config($id, $service_node);
+
+ return {
+ maxcpu => $conf->{cpulimit} || $conf->{cores} || 0,
+ maxmem => ($conf->{memory} || 512) * 1024 * 1024,
+ };
+}
+
1;
diff --git a/src/PVE/HA/Resources/PVEVM.pm b/src/PVE/HA/Resources/PVEVM.pm
index 58c83e0..49e4a1d 100644
--- a/src/PVE/HA/Resources/PVEVM.pm
+++ b/src/PVE/HA/Resources/PVEVM.pm
@@ -173,4 +173,18 @@ sub remove_locks {
return undef;
}
+sub get_static_stats {
+ my ($class, $haenv, $id, $service_node) = @_;
+
+ my $conf = PVE::QemuConfig->load_config($id, $service_node);
+ my $defaults = PVE::QemuServer::load_defaults();
+
+ my $cpus = ($conf->{sockets} || $defaults->{sockets}) * ($conf->{cores} || $defaults->{cores});
+
+ return {
+ maxcpu => $conf->{vcpus} || $cpus,
+ maxmem => ($conf->{memory} || $defaults->{memory}) * 1024 * 1024,
+ };
+}
+
1;
diff --git a/src/PVE/HA/Sim/Hardware.pm b/src/PVE/HA/Sim/Hardware.pm
index e38561a..e33a4c5 100644
--- a/src/PVE/HA/Sim/Hardware.pm
+++ b/src/PVE/HA/Sim/Hardware.pm
@@ -29,6 +29,7 @@ my $watchdog_timeout = 60;
# $testdir/hardware_status Hardware description (number of nodes, ...)
# $testdir/manager_status CRM status (start with {})
# $testdir/service_config Service configuration
+# $testdir/static_service_stats Static service usage information (cpu, memory)
# $testdir/groups HA groups configuration
# $testdir/service_status_<node> Service status
# $testdir/datacenter.cfg Datacenter wide HA configuration
@@ -38,6 +39,7 @@ my $watchdog_timeout = 60;
#
# $testdir/status/cluster_locks Cluster locks
# $testdir/status/hardware_status Hardware status (power/network on/off)
+# $testdir/status/static_service_stats Static service usage information (cpu, memory)
# $testdir/status/watchdog_status Watchdog status
#
# runtime status
@@ -330,6 +332,15 @@ sub write_service_status {
return $res;
}
+sub read_static_service_stats {
+ my ($self) = @_;
+
+ my $filename = "$self->{statusdir}/static_service_stats";
+ my $stats = PVE::HA::Tools::read_json_from_file($filename);
+
+ return $stats;
+}
+
my $default_group_config = <<__EOD;
group: prefer_node1
nodes node1
@@ -404,6 +415,10 @@ sub new {
copy("$testdir/datacenter.cfg", "$statusdir/datacenter.cfg");
}
+ if (-f "$testdir/static_service_stats") {
+ copy("$testdir/static_service_stats", "$statusdir/static_service_stats");
+ }
+
my $cstatus = $self->read_hardware_status_nolock();
foreach my $node (sort keys %$cstatus) {
diff --git a/src/PVE/HA/Sim/Resources.pm b/src/PVE/HA/Sim/Resources.pm
index bccc0e6..e6e1853 100644
--- a/src/PVE/HA/Sim/Resources.pm
+++ b/src/PVE/HA/Sim/Resources.pm
@@ -139,4 +139,14 @@ sub remove_locks {
return undef;
}
+sub get_static_stats {
+ my ($class, $haenv, $id, $service_node) = @_;
+
+ my $sid = $class->type() . ":$id";
+ my $hardware = $haenv->hardware();
+
+ my $stats = $hardware->read_static_service_stats();
+ return $stats->{$sid};
+}
+
1;
--
2.30.2
More information about the pve-devel
mailing list