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.eb...@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



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to