Signed-off-by: Daniel Bowder <dan...@bowdernet.com> --- The third patch adds cpuset as a valid object in the qm conf file. A new type is created called 'pve-cpuset' so that the cpuset can go through some validation before passing it to the taskset command. The exec_taskset command is executed just after the 'post-start' hookscript, which ensures that there is a valid PID to pin. PVE/QemuServer.pm | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index e9aa248..6b9abc0 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -713,6 +713,11 @@ EODESCR description => "Some (read-only) meta-information about this guest.", optional => 1, }, + cpuset => { + type => 'string', format => 'pve-cpuset', + description => "Specifies the cpu core numbers to pin the vm qemu processes to with 'taskset'.", + optional => 1, + }, }; my $cicustom_fmt = { @@ -5802,6 +5807,8 @@ sub vm_start_nolock { PVE::GuestHelpers::exec_hookscript($conf, $vmid, 'post-start'); + PVE::GuestHelpers::exec_taskset($conf, $vmid); + return $res; } @@ -8214,4 +8221,46 @@ sub check_volume_storage_type { return 1; } +sub parse_cpuset { + my ($data) = @_; + + my $res = ""; + + # Parse cpuset value + foreach my $value (PVE::Tools::split_list($data)) { + if ($value =~ m/^([0-9]+)-([0-9]+)$/) { + if (int($1) > int($2)) { + die "invalid cpuset value '$value', left value must be <= right\n"; + } + my @range = (int($1) .. int($2)); + for my $cpu (@range) { + $res .= "," . $cpu; + } + } elsif ($value =~ m/^([0-9]+)$/) { + $res .= "," . $1; + } else { + die "invalid cpuset value '$value'\n"; + } + } + + if (!$res) { + die "invalid cpuset '$data'\n"; + } + + # Trim leading "," + $res = substr($res, 1); + return $res; +} + +PVE::JSONSchema::register_format('pve-cpuset', \&pve_verify_cpuset); +sub pve_verify_cpuset { + my ($value, $noerr) = @_; + + return $value if parse_cpuset($value); + + return if $noerr; + + die "unable to parse cpuset option\n"; +} + 1; -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel