From: Hiroshi Shimamoto <h-shimam...@ct.jp.nec.com> In rte_pktmbuf_free(), there might be cache miss/memory stall issue. In small packet case, it could harm the performance.
>From the result of memnic-tester, in less than 1024 frame size the performance could be improved. Using Xeon E5-2697 v2 @ 2.70GHz, 4 vCPU. size | before | after 64 | 5.55Mpps | 5.83Mpps 128 | 5.44Mpps | 5.71Mpps 256 | 5.22Mpps | 5.40Mpps 512 | 4.52Mpps | 4.64Mpps 1024 | 3.73Mpps | 3.68Mpps 1280 | 3.22Mpps | 3.17Mpps 1518 | 2.93Mpps | 2.90Mpps Signed-off-by: Hiroshi Shimamoto <h-shimamoto at ct.jp.nec.com> Reviewed-by: Hayato Momma <h-momma at ce.jp.nec.com> --- pmd/pmd_memnic.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pmd/pmd_memnic.c b/pmd/pmd_memnic.c index 875d3ea..59ee332 100644 --- a/pmd/pmd_memnic.c +++ b/pmd/pmd_memnic.c @@ -344,7 +344,7 @@ static uint16_t memnic_xmit_pkts(void *tx_queue, struct memnic_adapter *adapter = q->adapter; struct memnic_data *data = &adapter->nic->down; struct memnic_packet *p; - uint16_t nr; + uint16_t i, nr; int idx; struct rte_eth_stats *st = &adapter->stats[rte_lcore_id()]; uint64_t pkts, bytes, errs; @@ -408,9 +408,9 @@ retry: rte_compiler_barrier(); p->status = MEMNIC_PKT_ST_FILLED; - - rte_pktmbuf_free(tx_pkts[nr]); } + for (i = 0; i < nr; i++) + rte_pktmbuf_free(tx_pkts[i]); /* stats */ st->opackets += pkts; -- 1.8.3.1