Signed-off-by: Daniel Bowder <dan...@bowdernet.com>
---
 The second patch adds a utility function to obtain the pid of the VM, then 
calls taskset on that pid with the cpuset in the qm conf. This execution of 
taskset pins the VMs process to the defined cpu cores. This utility function 
acts similarly to the exec_hookscript utility function. In fact, in the third 
patch this utility function will be called just after the "post-start" call to 
hookscript.
 src/PVE/GuestHelpers.pm | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/src/PVE/GuestHelpers.pm b/src/PVE/GuestHelpers.pm
index 0fe3fd6..a8f54fa 100644
--- a/src/PVE/GuestHelpers.pm
+++ b/src/PVE/GuestHelpers.pm
@@ -82,6 +82,30 @@ sub guest_migration_lock {
     return $res;
 }
 
+sub exec_taskset {
+       my ($conf, $vmid) = @_;
+
+       return if !$conf->{cpuset};
+
+       eval {
+               # Obtain the vm PID from /run/qemu-server/$vmid.pid
+               PVE::Tools::run_command(
+                       [ "cat", "/run/qemu-server/$vmid.pid" ],
+                       outfunc => sub {
+                               my $line = shift;
+                               if ($line =~ m/^([0-9]+)$/) {
+                                       # Pin the PID to the cpuset
+                                       PVE::Tools::run_command(
+                                               [ "taskset", "--cpu-list", 
"--all-tasks", "--pid", $conf->{cpuset}, $1 ]
+                                       );
+                               } else {
+                                       warn "cpuset error: failed to obtain vm 
process id.\n";
+                               }
+                       }
+               );
+       };
+}
+
 sub check_hookscript {
     my ($volid, $storecfg) = @_;
 
-- 
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