Re: [Qemu-devel] [PATCH 1/3] cpu: Make the mapping of CPUs and NUMA nodes in cpu_common_realizefn
Hi, Eduardo At 01/18/2017 08:56 PM, Eduardo Habkost wrote: On Wed, Jan 18, 2017 at 08:40:05PM +0800, Dou Liyang wrote: Current default way of seting the CPUState::numa_node might be wrong in case on cold/hot-plug CPUs. Making the users confused why the NUMA info is different beetween the guests and monitor. Make the mapping of CPUs and NUMA nodes in qom/cpu.c: cpu_common_realizefn(), where each VCPUs need to realize. Signed-off-by: Dou Liyang parse_numa_opts() is called a long time before any CPU is created, so this should be safe. Reviewed-by: Eduardo Habkost (But we can squash patch 2/3 and patch 3/3 in this patch). OK, :) Thanks, Liyang. --- qom/cpu.c | 15 +++ 1 file changed, 15 insertions(+) diff --git a/qom/cpu.c b/qom/cpu.c index 61ee0cb..e08dceb 100644 --- a/qom/cpu.c +++ b/qom/cpu.c @@ -23,6 +23,7 @@ #include "qemu-common.h" #include "qom/cpu.h" #include "sysemu/kvm.h" +#include "sysemu/numa.h" #include "qemu/notify.h" #include "qemu/log.h" #include "exec/log.h" @@ -338,6 +339,18 @@ static void cpu_common_parse_features(const char *typename, char *features, } } +static void cpu_common_map_numa_node(CPUState *cpu) +{ +int i; + +for (i = 0; i < nb_numa_nodes; i++) { +assert(cpu->cpu_index < max_cpus); +if (test_bit(cpu->cpu_index, numa_info[i].node_cpu)) { +cpu->numa_node = i; +} +} +} + static void cpu_common_realizefn(DeviceState *dev, Error **errp) { CPUState *cpu = CPU(dev); @@ -347,6 +360,8 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp) cpu_resume(cpu); } +cpu_common_map_numa_node(cpu); + /* NOTE: latest generic point where the cpu is fully realized */ trace_init_vcpu(cpu); } -- 2.5.5
Re: [Qemu-devel] [PATCH 1/3] cpu: Make the mapping of CPUs and NUMA nodes in cpu_common_realizefn
On Wed, Jan 18, 2017 at 08:40:05PM +0800, Dou Liyang wrote: > Current default way of seting the CPUState::numa_node might be wrong > in case on cold/hot-plug CPUs. Making the users confused why the > NUMA info is different beetween the guests and monitor. > > Make the mapping of CPUs and NUMA nodes in qom/cpu.c: > cpu_common_realizefn(), where each VCPUs need to realize. > > Signed-off-by: Dou Liyang parse_numa_opts() is called a long time before any CPU is created, so this should be safe. Reviewed-by: Eduardo Habkost (But we can squash patch 2/3 and patch 3/3 in this patch). > --- > qom/cpu.c | 15 +++ > 1 file changed, 15 insertions(+) > > diff --git a/qom/cpu.c b/qom/cpu.c > index 61ee0cb..e08dceb 100644 > --- a/qom/cpu.c > +++ b/qom/cpu.c > @@ -23,6 +23,7 @@ > #include "qemu-common.h" > #include "qom/cpu.h" > #include "sysemu/kvm.h" > +#include "sysemu/numa.h" > #include "qemu/notify.h" > #include "qemu/log.h" > #include "exec/log.h" > @@ -338,6 +339,18 @@ static void cpu_common_parse_features(const char > *typename, char *features, > } > } > > +static void cpu_common_map_numa_node(CPUState *cpu) > +{ > +int i; > + > +for (i = 0; i < nb_numa_nodes; i++) { > +assert(cpu->cpu_index < max_cpus); > +if (test_bit(cpu->cpu_index, numa_info[i].node_cpu)) { > +cpu->numa_node = i; > +} > +} > +} > + > static void cpu_common_realizefn(DeviceState *dev, Error **errp) > { > CPUState *cpu = CPU(dev); > @@ -347,6 +360,8 @@ static void cpu_common_realizefn(DeviceState *dev, Error > **errp) > cpu_resume(cpu); > } > > +cpu_common_map_numa_node(cpu); > + > /* NOTE: latest generic point where the cpu is fully realized */ > trace_init_vcpu(cpu); > } > -- > 2.5.5 > > > -- Eduardo
[Qemu-devel] [PATCH 1/3] cpu: Make the mapping of CPUs and NUMA nodes in cpu_common_realizefn
Current default way of seting the CPUState::numa_node might be wrong in case on cold/hot-plug CPUs. Making the users confused why the NUMA info is different beetween the guests and monitor. Make the mapping of CPUs and NUMA nodes in qom/cpu.c: cpu_common_realizefn(), where each VCPUs need to realize. Signed-off-by: Dou Liyang --- qom/cpu.c | 15 +++ 1 file changed, 15 insertions(+) diff --git a/qom/cpu.c b/qom/cpu.c index 61ee0cb..e08dceb 100644 --- a/qom/cpu.c +++ b/qom/cpu.c @@ -23,6 +23,7 @@ #include "qemu-common.h" #include "qom/cpu.h" #include "sysemu/kvm.h" +#include "sysemu/numa.h" #include "qemu/notify.h" #include "qemu/log.h" #include "exec/log.h" @@ -338,6 +339,18 @@ static void cpu_common_parse_features(const char *typename, char *features, } } +static void cpu_common_map_numa_node(CPUState *cpu) +{ +int i; + +for (i = 0; i < nb_numa_nodes; i++) { +assert(cpu->cpu_index < max_cpus); +if (test_bit(cpu->cpu_index, numa_info[i].node_cpu)) { +cpu->numa_node = i; +} +} +} + static void cpu_common_realizefn(DeviceState *dev, Error **errp) { CPUState *cpu = CPU(dev); @@ -347,6 +360,8 @@ static void cpu_common_realizefn(DeviceState *dev, Error **errp) cpu_resume(cpu); } +cpu_common_map_numa_node(cpu); + /* NOTE: latest generic point where the cpu is fully realized */ trace_init_vcpu(cpu); } -- 2.5.5