The new method will get the vcpu thread id via qemu-monitor. Then get the Cpus_allowed_list value from /proc using the vcpu's thread id modified: repos/setVcpus/vcpupin_live.py --- repos/setVcpus/vcpupin_live.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/repos/setVcpus/vcpupin_live.py b/repos/setVcpus/vcpupin_live.py index c3dfe8e..9f21583 100644 --- a/repos/setVcpus/vcpupin_live.py +++ b/repos/setVcpus/vcpupin_live.py @@ -13,30 +13,34 @@ from utils import utils required_params = ('guestname', 'vcpu', 'cpulist',) optional_params = {} -def vcpupin_check(guestname, vcpu, cpumap): +def vcpupin_check(guestname, vcpu, cpulist): """check vcpu subprocess status of the running virtual machine grep Cpus_allowed_list /proc/PID/task/*/status """ - tmp_str = '' - cmd = "cat /var/run/libvirt/qemu/%s.pid" % guestname - status, pid = utils.exec_cmd(cmd, shell=True) + cmd_pid = "cat /var/run/libvirt/qemu/%s.pid" % guestname + status, pid = utils.exec_cmd(cmd_pid, shell=True) if status: logger.error("failed to get the pid of domain %s" % guestname) return 1 - cmd = "grep Cpus_allowed_list /proc/%s/task/*/status" % pid[0] - status, output = utils.exec_cmd(cmd, shell=True) - logger.debug("command '%s' output is:" % cmd) - for i in range(len(output)): - tmp_str += ''.join(output[i]) + '\n' - logger.debug(tmp_str) + cmd_vcpu_task_id = "virsh qemu-monitor-command %s --hmp info cpus|grep '#%s'|cut -d '=' -f3"\ + % (guestname,vcpu) + status, vcpu_task_id = utils.exec_cmd(cmd_vcpu_task_id, shell=True) + if status: + logger.error("failed to get the threadid of domain %s" % guestname) + return 1 + + logger.debug("vcpu id %s:" % vcpu_task_id[0]) + cmd_cpus_allowed_list = "grep Cpus_allowed_list /proc/%s/task/%s/status" % (pid[0] , vcpu_task_id[0]) + status, output = utils.exec_cmd(cmd_cpus_allowed_list, shell=True) + if status: + logger.error("failed to get the cpu_allowed_list of vcpu %s") + return 1 - task_list = output[1:] - vcpu_task = task_list[int(vcpu)] - cpulist = vcpu_task.split('\t')[1] - ret = utils.param_to_tuple(cpulist, maxcpu) + logger.debug("the output of command 'grep Cpus_allowed_list \ + /proc/%s/task/%s/status' is %s" % (pid[0],vcpu_task_id[0],output)) - if ret == cpumap: + if output[0].split('\t')[1] == cpulist: logger.info("vcpu process cpus allowed list is expected") return 0 else: @@ -92,7 +96,7 @@ def vcpupin_live(params): return 1 logger.info("check vcpu pin status on host") - ret = vcpupin_check(guestname, vcpu, cpumap) + ret = vcpupin_check(guestname, vcpu, cpulist) if ret: logger.error("domain vcpu pin failed") return 1 -- 1.9.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list