From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43525) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZYASd-0006uc-3W for qemu-devel@nongnu.org; Sat, 05 Sep 2015 06:12:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZYASZ-0003Cj-2t for qemu-devel@nongnu.org; Sat, 05 Sep 2015 06:12:39 -0400 Received: from mail-pa0-f42.google.com ([209.85.220.42]:35306) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZYASY-0003CT-T5 for qemu-devel@nongnu.org; Sat, 05 Sep 2015 06:12:35 -0400 Received: by pacfv12 with SMTP id fv12so48757199pac.2 for ; Sat, 05 Sep 2015 03:12:34 -0700 (PDT) References: <1441342300-28318-1-git-send-email-david@gibson.dropbear.id.au> <1441342300-28318-3-git-send-email-david@gibson.dropbear.id.au> From: Alexey Kardashevskiy Message-ID: <55EAC00E.7050207@ozlabs.ru> Date: Sat, 5 Sep 2015 20:12:30 +1000 MIME-Version: 1.0 In-Reply-To: <1441342300-28318-3-git-send-email-david@gibson.dropbear.id.au> Content-Type: text/plain; charset=koi8-r; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFCv2 2/2] spapr: Fix default NUMA node allocation for threads List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson , mdroth@linux.vnet.ibm.com Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org, agraf@suse.de On 09/04/2015 02:51 PM, David Gibson wrote: > At present, if guest numa nodes are requested, but the cpus in each node > are not specified, spapr just uses the default behaviour or assigning each > vcpu round-robin to nodes. > > If smp_threads != 1, that will assign adjacent threads in a core to > different NUMA nodes. As well as being just weird, that's a configuration > that can't be represented in the device tree we give to the guest, which > means the guest and qemu end up with different ideas of the NUMA topology. > > This patch implements mc->cpu_index_to_socket_id in the spapr code to > make sure vcpus get assigned to nodes only at the socket granularity. > > Signed-off-by: David Gibson Reviewed-by: Alexey Kardashevskiy > --- > hw/ppc/spapr.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index dbc295b..8adef2d 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -2162,6 +2162,13 @@ static HotplugHandler *spapr_get_hotpug_handler(MachineState *machine, > return NULL; > } > > +static unsigned spapr_cpu_index_to_socket_id(unsigned cpu_index) > +{ > + /* Allocate to NUMA nodes on a "socket" basis (not that concept of > + * socket means much for the paravirtualized PAPR platform) */ > + return cpu_index / smp_threads / smp_cores; > +} > + > static void spapr_machine_class_init(ObjectClass *oc, void *data) > { > MachineClass *mc = MACHINE_CLASS(oc); > @@ -2183,6 +2190,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) > mc->get_hotplug_handler = spapr_get_hotpug_handler; > hc->plug = spapr_machine_device_plug; > hc->unplug = spapr_machine_device_unplug; > + mc->cpu_index_to_socket_id = spapr_cpu_index_to_socket_id; > > smc->dr_lmb_enabled = false; > fwc->get_dev_path = spapr_get_fw_dev_path; > -- Alexey