> -----Original Message----- > From: Maxime Coquelin <[email protected]> > Sent: Friday, June 18, 2021 10:04 PM > To: [email protected]; [email protected]; Xia, Chenbo > <[email protected]> > Cc: Maxime Coquelin <[email protected]>; [email protected] > 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: [email protected] > > Signed-off-by: Maxime Coquelin <[email protected]> > --- > 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 <[email protected]>

