In some cases, the DPDK does not allocate hugepage heap memory to some sockets due to the user setting parameters (e.g. -l 40-79, SOCKET 0 has no memory). When the interrupt thread runs on the corresponding core of this socket, each allocation/release will execute a whole set of heap allocation/release operations,resulting in poor performance. Instead we call malloc() to get memory from the system's heap space to fix this problem.
Fixes: cb5c1b91f76f ("net/iavf: add thread for event callbacks") Cc: sta...@dpdk.org Signed-off-by: Kaisen You <kaisenx....@intel.com> --- drivers/net/iavf/iavf_vchnl.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/net/iavf/iavf_vchnl.c b/drivers/net/iavf/iavf_vchnl.c index f92daf97f2..a05791fe48 100644 --- a/drivers/net/iavf/iavf_vchnl.c +++ b/drivers/net/iavf/iavf_vchnl.c @@ -36,7 +36,6 @@ struct iavf_event_element { struct rte_eth_dev *dev; enum rte_eth_event_type event; void *param; - size_t param_alloc_size; uint8_t param_alloc_data[0]; }; @@ -80,7 +79,7 @@ iavf_dev_event_handle(void *param __rte_unused) TAILQ_FOREACH_SAFE(pos, &pending, next, save_next) { TAILQ_REMOVE(&pending, pos, next); rte_eth_dev_callback_process(pos->dev, pos->event, pos->param); - rte_free(pos); + free(pos); } } @@ -94,14 +93,13 @@ iavf_dev_event_post(struct rte_eth_dev *dev, { struct iavf_event_handler *handler = &event_handler; char notify_byte; - struct iavf_event_element *elem = rte_malloc(NULL, sizeof(*elem) + param_alloc_size, 0); + struct iavf_event_element *elem = malloc(sizeof(*elem) + param_alloc_size); if (!elem) return; elem->dev = dev; elem->event = event; elem->param = param; - elem->param_alloc_size = param_alloc_size; if (param && param_alloc_size) { rte_memcpy(elem->param_alloc_data, param, param_alloc_size); elem->param = elem->param_alloc_data; @@ -165,7 +163,7 @@ iavf_dev_event_handler_fini(void) struct iavf_event_element *pos, *save_next; TAILQ_FOREACH_SAFE(pos, &handler->pending, next, save_next) { TAILQ_REMOVE(&handler->pending, pos, next); - rte_free(pos); + free(pos); } } -- 2.34.1