From: Wolfgang Bumiller <w.bumil...@proxmox.com> This uses the newly introduced PVE::LXC::CGroup's cpuset_controller_path() method to find the controller path, so we need to depend on the newer pve-container package.
Signed-off-by: Wolfgang Bumiller <w.bumil...@proxmox.com> --- PVE/Service/pvestatd.pm | 42 ++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/PVE/Service/pvestatd.pm b/PVE/Service/pvestatd.pm index 7899427d..5e533ca3 100755 --- a/PVE/Service/pvestatd.pm +++ b/PVE/Service/pvestatd.pm @@ -20,6 +20,7 @@ use PVE::Storage; use PVE::QemuServer; use PVE::QemuServer::Monitor; use PVE::LXC; +use PVE::LXC::CGroup; use PVE::LXC::Config; use PVE::RPCEnvironment; use PVE::API2::Subscription; @@ -252,11 +253,18 @@ sub remove_stale_lxc_consoles { my $rebalance_error_count = {}; +my $NO_REBALANCE; sub rebalance_lxc_containers { + # Make sure we can find the cpuset controller path: + return if $NO_REBALANCE; + my $cpuset_base = eval { PVE::LXC::CGroup::cpuset_controller_path() }; + if (!defined($cpuset_base)) { + $NO_REBALANCE = 1; + return; + } - return if !-d '/sys/fs/cgroup/cpuset/lxc'; # nothing to do... - - my $all_cpus = PVE::CpuSet->new_from_cgroup('lxc', 'effective_cpus'); + # Figure out the cpu count & highest ID + my $all_cpus = PVE::CpuSet->new_from_path($cpuset_base, 1); my @allowed_cpus = $all_cpus->members(); my $cpucount = scalar(@allowed_cpus); my $max_cpuid = $allowed_cpus[-1]; @@ -264,6 +272,10 @@ sub rebalance_lxc_containers { my @cpu_ctcount = (0) x ($max_cpuid+1); my @balanced_cts; + # A mapping { vmid => cgroup_payload_path } for containers where namespace + # separation is active and recognized. + my $ctinfo = {}; + my $modify_cpuset = sub { my ($vmid, $cpuset, $newset) = @_; @@ -273,25 +285,26 @@ sub rebalance_lxc_containers { } eval { + my $cgbase = $ctinfo->{$vmid}; - if (-d "/sys/fs/cgroup/cpuset/lxc/$vmid/ns") { + if (defined($cgbase)) { # allow all, so that we can set new cpuset in /ns - $all_cpus->write_to_cgroup("lxc/$vmid"); + $all_cpus->write_to_path($cgbase); eval { - $newset->write_to_cgroup("lxc/$vmid/ns"); + $newset->write_to_path("$cgbase/ns"); }; if (my $err = $@) { warn $err if !$rebalance_error_count->{$vmid}++; # restore original - $cpuset->write_to_cgroup("lxc/$vmid"); + $cpuset->write_to_path($cgbase); } else { # also apply to container root cgroup - $newset->write_to_cgroup("lxc/$vmid"); + $newset->write_to_path($cgbase); $rebalance_error_count->{$vmid} = 0; } } else { # old style container - $newset->write_to_cgroup("lxc/$vmid"); + $newset->write_to_path($cgbase); $rebalance_error_count->{$vmid} = 0; } }; @@ -303,14 +316,21 @@ sub rebalance_lxc_containers { my $ctlist = PVE::LXC::config_list(); foreach my $vmid (sort keys %$ctlist) { - next if ! -d "/sys/fs/cgroup/cpuset/lxc/$vmid"; + my $cgpath = "$cpuset_base/lxc/$vmid"; + + if (-d "$cgpath/ns") { + $ctinfo->{$vmid} = $cgpath; + } else { + # old style container + next; + } my ($conf, $cpuset); eval { $conf = PVE::LXC::Config->load_config($vmid); - $cpuset = PVE::CpuSet->new_from_cgroup("lxc/$vmid"); + $cpuset = PVE::CpuSet->new_from_path($cgpath); }; if (my $err = $@) { warn $err; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel