> -----Original Message----- > From: Maxime Coquelin <maxime.coque...@redhat.com> > Sent: Friday, June 18, 2021 10:04 PM > To: dev@dpdk.org; david.march...@redhat.com; Xia, Chenbo > <chenbo....@intel.com> > Cc: Maxime Coquelin <maxime.coque...@redhat.com>; sta...@dpdk.org > Subject: [PATCH v6 2/7] vhost: fix missing guest pages table NUMA realloc > > When the guest allocates virtqueues on a different NUMA node > than the one the Vhost metadata are allocated, both the Vhost > device struct and the virtqueues struct are reallocated. > > However, reallocating the guest pages table was missing, which > likely causes at least one cross-NUMA accesses for every burst > of packets. > > This patch reallocates this table on the same NUMA node as the > other metadata. > > Fixes: e246896178e6 ("vhost: get guest/host physical address mappings") > Cc: sta...@dpdk.org > > Signed-off-by: Maxime Coquelin <maxime.coque...@redhat.com> > --- > lib/vhost/vhost_user.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c > index b5a84f3dcd..5fb055ea2e 100644 > --- a/lib/vhost/vhost_user.c > +++ b/lib/vhost/vhost_user.c > @@ -558,7 +558,8 @@ numa_realloc(struct virtio_net *dev, int index) > } > if (oldnode != newnode) { > struct rte_vhost_memory *old_mem; > - ssize_t mem_size; > + struct guest_page *old_gp; > + ssize_t mem_size, gp_size; > > VHOST_LOG_CONFIG(INFO, > "reallocate dev from %d to %d node\n", > @@ -583,6 +584,17 @@ numa_realloc(struct virtio_net *dev, int index) > > memcpy(dev->mem, old_mem, mem_size); > rte_free(old_mem); > + > + gp_size = dev->max_guest_pages * sizeof(*dev->guest_pages); > + old_gp = dev->guest_pages; > + dev->guest_pages = rte_malloc_socket(NULL, gp_size, > RTE_CACHE_LINE_SIZE, newnode); > + if (!dev->guest_pages) { > + dev->guest_pages = old_gp; > + goto out; > + } > + > + memcpy(dev->guest_pages, old_gp, gp_size); > + rte_free(old_gp); > } > > out: > -- > 2.31.1
Reviewed-by: Chenbo Xia <chenbo....@intel.com>