@@ -20,7 +20,7 @@
#define DPDK_MEMORY_MB 512
#define DPDK_NB_MBUF 16384
#define DPDK_MBUF_BUF_SIZE RTE_MBUF_DEFAULT_BUF_SIZE
-#define DPDK_MEMPOOL_CACHE_SIZE 32
+#define DPDK_MEMPOOL_CACHE_SIZE 64
#define DPDK_NM_RX_DESC 128
#define DPDK_NM_TX_DESC 512
@@ -826,36 +826,36 @@ static inline int pkt_to_mbuf(pktio_entry_t *pktio_entry,
const odp_packet_t pkt_table[], uint16_t num)
{
pkt_dpdk_t *pkt_dpdk = &pktio_entry->s.pkt_dpdk;
- int i;
+ int i, j;
char *data;
uint16_t pkt_len;
+ if (odp_unlikely((rte_pktmbuf_alloc_bulk(pkt_dpdk->pkt_pool,
+ mbuf_table, num)))) {
+ ODP_ERR("Failed to alloc mbuf\n");
+ return 0;
+ }
for (i = 0; i < num; i++) {
pkt_len = odp_packet_len(pkt_table[i]);
if (pkt_len > pkt_dpdk->mtu) {
if (i == 0)
__odp_errno = EMSGSIZE;
- break;
- }
-
- mbuf_table[i] = rte_pktmbuf_alloc(pkt_dpdk->pkt_pool);
- if (mbuf_table[i] == NULL) {
- ODP_ERR("Failed to alloc mbuf\n");
- break;
+ goto fail;
}
+ /* Packet always fits in mbuf */
data = rte_pktmbuf_append(mbuf_table[i], pkt_len);
- if (data == NULL) {
- ODP_ERR("Failed to append mbuf\n");
- rte_pktmbuf_free(mbuf_table[i]);
- break;
- }
-
odp_packet_copy_to_mem(pkt_table[i], 0, pkt_len, data);
}
return i;
+
+fail:
+ for (j = i; j < num; j++)
+ rte_pktmbuf_free(mbuf_table[j]);
+
+ return i;
}
static int dpdk_recv(pktio_entry_t *pktio_entry, int index,
Bulk alloc mbufs in dpdk_send(). Combined with dpdk mempool cache size increase this improves odp_l2fwd throughput by 5-10 %. Signed-off-by: Matias Elo <matias.elo@nokia.com> --- platform/linux-generic/include/odp_packet_dpdk.h | 2 +- platform/linux-generic/pktio/dpdk.c | 28 ++++++++++++------------ 2 files changed, 15 insertions(+), 15 deletions(-) -- 2.7.4