[libvirt] [PATCH v3 0/2] List only online cpus for vcpupin/emulatorpin when vcpu placement static

Currently when the vcpu placement is static and cpuset is not specified, CPU Affinity shows 0.. CPUMAX. This patchset will result in display of only online CPU's under CPU Affinity on linux. Nitesh Konkar (2): conf: List only online cpus for virsh vcpupin conf: List only online cpus for virsh emulatorpin src/conf/domain_conf.c | 10 ++++++++++ src/qemu/qemu_driver.c | 9 +++++++++ 2 files changed, 19 insertions(+) -- 2.1.0

Currently when the vcpu placement is static and cpuset is not specified, CPU Affinity under virsh vcpupin shows 0..CPUMAX. This patchset will result in display of only online CPU's under CPU Affinity on linux. Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com> --- src/conf/domain_conf.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 74efe8c..6f81903 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -55,6 +55,7 @@ #include "virtpm.h" #include "virstring.h" #include "virnetdev.h" +#include "virhostcpu.h" #define VIR_FROM_THIS VIR_FROM_DOMAIN @@ -1543,8 +1544,13 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, { int maxvcpus = virDomainDefGetVcpusMax(def); virBitmapPtr allcpumap = NULL; + virBitmapPtr staticCpuset = NULL; size_t i; +#ifdef __linux__ + staticCpuset = virHostCPUGetOnlineBitmap(); +#endif + if (hostcpus < 0) return -1; @@ -1562,6 +1568,9 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && autoCpuset) bitmap = autoCpuset; + else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC && + staticCpuset) + bitmap = staticCpuset; else if (def->cpumask) bitmap = def->cpumask; else @@ -1571,6 +1580,7 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, } virBitmapFree(allcpumap); + virBitmapFree(staticCpuset); return i; } -- 2.1.0

On 11.11.2016 12:26, Nitesh Konkar wrote:
Currently when the vcpu placement is static and cpuset is not specified, CPU Affinity under virsh vcpupin shows 0..CPUMAX. This patchset will result in display of only online CPU's under CPU Affinity on linux.
Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com> --- src/conf/domain_conf.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 74efe8c..6f81903 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -55,6 +55,7 @@ #include "virtpm.h" #include "virstring.h" #include "virnetdev.h" +#include "virhostcpu.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN
@@ -1543,8 +1544,13 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, { int maxvcpus = virDomainDefGetVcpusMax(def); virBitmapPtr allcpumap = NULL; + virBitmapPtr staticCpuset = NULL; size_t i;
+#ifdef __linux__ + staticCpuset = virHostCPUGetOnlineBitmap(); +#endif + if (hostcpus < 0) return -1;
@@ -1562,6 +1568,9 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && autoCpuset) bitmap = autoCpuset; + else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC && + staticCpuset) + bitmap = staticCpuset; I wonder whether you suggest this to reconcile the results of virsh vcpupin and virsh vcpuinfo for a running domain? If so, this will not work because then you would rather have to query the process' cpu affinity, but this can obviously not be done here. else if (def->cpumask) bitmap = def->cpumask; else @@ -1571,6 +1580,7 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, }
virBitmapFree(allcpumap); + virBitmapFree(staticCpuset); return i; }
-- Mit freundlichen Grüßen/Kind Regards Viktor Mihajlovski IBM Deutschland Research & Development GmbH Vorsitzender des Aufsichtsrats: Martina Köderitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294

On Fri, Nov 11, 2016 at 14:51:31 +0100, Viktor Mihajlovski wrote:
On 11.11.2016 12:26, Nitesh Konkar wrote:
Currently when the vcpu placement is static and cpuset is not specified, CPU Affinity under virsh vcpupin shows 0..CPUMAX. This patchset will result in display of only online CPU's under CPU Affinity on linux.
Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com> --- src/conf/domain_conf.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 74efe8c..6f81903 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c
[...]
@@ -1562,6 +1568,9 @@ virDomainDefGetVcpuPinInfoHelper(virDomainDefPtr def, else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && autoCpuset) bitmap = autoCpuset; + else if (def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC && + staticCpuset) + bitmap = staticCpuset; I wonder whether you suggest this to reconcile the results of virsh vcpupin and virsh vcpuinfo for a running domain? If so, this will not work because then you would rather have to query the process' cpu affinity, but this can obviously not be done here.
Indeed. This should be used instead of allcpumap in case we are going to report all ones. Putting it here will report incorrect data in cases when e.g the correct pinning is set in def->cpumask.

Currently when the vcpu placement is static and cpuset is not specified, CPU Affinity under virsh emulatorpin shows 0..CPUMAX. This patchset will result in display of only online CPU's under CPU Affinity on linux. Signed-off-by: Nitesh Konkar <nitkon12@linux.vnet.ibm.com> --- src/qemu/qemu_driver.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index a82e58b..51efe28 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5409,6 +5409,11 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, virBitmapPtr cpumask = NULL; virBitmapPtr bitmap = NULL; virBitmapPtr autoCpuset = NULL; + virBitmapPtr staticCpuset = NULL; + +#ifdef __linux__ + staticCpuset = virHostCPUGetOnlineBitmap(); +#endif virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1); @@ -5435,6 +5440,9 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, } else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_AUTO && autoCpuset) { cpumask = autoCpuset; + } else if (vm->def->placement_mode == VIR_DOMAIN_CPU_PLACEMENT_MODE_STATIC && + staticCpuset) { + cpumask = staticCpuset; } else { if (!(bitmap = virBitmapNew(hostcpus))) goto cleanup; @@ -5449,6 +5457,7 @@ qemuDomainGetEmulatorPinInfo(virDomainPtr dom, cleanup: virDomainObjEndAPI(&vm); virBitmapFree(bitmap); + virBitmapFree(staticCpuset); return ret; } -- 2.1.0
participants (3)
-
Nitesh Konkar
-
Peter Krempa
-
Viktor Mihajlovski