Re: [dpdk-dev] [PATCH v7 7/7] vhost: convert inflight data to DPDK allocation API
From: Maxime Coquelin <hidden>
Date: 2021-06-30 11:16:53
On 6/30/21 9:55 AM, David Marchand wrote:
On Tue, Jun 29, 2021 at 6:11 PM Maxime Coquelin [off-list ref] wrote:quoted
Inflight metadata are allocated using glibc's calloc. This patch converts them to rte_zmalloc_socket to take care of the NUMA affinity.About the title, maybe: vhost: use DPDK allocations for inflight data
Agree with your proposal.
quoted
Signed-off-by: Maxime Coquelin <redacted>[snip]quoted
diff --git a/lib/vhost/vhost_user.c b/lib/vhost/vhost_user.c index d8ec087dfc..67935c4ccc 100644 --- a/lib/vhost/vhost_user.c +++ b/lib/vhost/vhost_user.c[snip]quoted
@@ -1779,19 +1820,21 @@ vhost_check_queue_inflights_split(struct virtio_net *dev, vq->last_avail_idx += resubmit_num; if (resubmit_num) { - resubmit = calloc(1, sizeof(struct rte_vhost_resubmit_info)); + resubmit = rte_zmalloc_socket("resubmit", sizeof(struct rte_vhost_resubmit_info),Nit: double space.
Can be fixed while applying.
quoted
+ 0, vq->numa_node); if (!resubmit) { VHOST_LOG_CONFIG(ERR, "failed to allocate memory for resubmit info.\n"); return RTE_VHOST_MSG_RESULT_ERR; } - resubmit->resubmit_list = calloc(resubmit_num, - sizeof(struct rte_vhost_resubmit_desc)); + resubmit->resubmit_list = rte_zmalloc_socket("resubmit_list", + resubmit_num * sizeof(struct rte_vhost_resubmit_desc), + 0, vq->numa_node); if (!resubmit->resubmit_list) { VHOST_LOG_CONFIG(ERR, "failed to allocate memory for inflight desc.\n"); - free(resubmit); + rte_free(resubmit); return RTE_VHOST_MSG_RESULT_ERR; }@@ -1873,19 +1916,21 @@ vhost_check_queue_inflights_packed(struct virtio_net *dev, } if (resubmit_num) { - resubmit = calloc(1, sizeof(struct rte_vhost_resubmit_info)); + resubmit = rte_zmalloc_socket("resubmit", sizeof(struct rte_vhost_resubmit_info),Copy/paste detected :-) Double space.
Indeed!
Having a single allocator between split and packed implems would avoid this, but it might not be that easy and this is out of the scope for this patch.
Agree, I think the inflight code may be simpler. We can think of a refactoring for v21.11. Thanks, Maxime
quoted
+ 0, vq->numa_node); if (resubmit == NULL) { VHOST_LOG_CONFIG(ERR, "failed to allocate memory for resubmit info.\n"); return RTE_VHOST_MSG_RESULT_ERR; } - resubmit->resubmit_list = calloc(resubmit_num, - sizeof(struct rte_vhost_resubmit_desc)); + resubmit->resubmit_list = rte_zmalloc_socket("resubmit_list", + resubmit_num * sizeof(struct rte_vhost_resubmit_desc), + 0, vq->numa_node); if (resubmit->resubmit_list == NULL) { VHOST_LOG_CONFIG(ERR, "failed to allocate memory for resubmit desc.\n"); - free(resubmit); + rte_free(resubmit); return RTE_VHOST_MSG_RESULT_ERR; } -- 2.31.1