[dpdk-dev] [PATCH v4 3/5] mbuf: create packet pool with external memory buffers
Slava Ovsiienko
viacheslavo at mellanox.com
Mon Jan 20 18:33:04 CET 2020
Hi, Olivier
Great! Thanks a lot for the unit test template, this is very nice starting point,
I will think what would be good to add for more thorough testing.
With best regards, Slava
> One more thing: it would be nice to have a functional test for this new
> feature. I did a very minimal one to check the basic alloc/free/attach
> feature, you can restart from that if you want.
>
> static int
> test_ext_pinned(int test_case)
> {
> struct rte_pktmbuf_extmem ext_mem;
> struct rte_mempool *pinned_pool = NULL;
> struct rte_mempool *std_pool = NULL;
> const struct rte_memzone *mz = NULL;
> struct rte_mbuf *m = NULL, *m2 = NULL;
>
> printf("Test mbuf pool with mbufs data pinned to external buffer
> (%d)\n", test_case);
>
> std_pool = rte_pktmbuf_pool_create("std_pool",
> NB_MBUF, MEMPOOL_CACHE_SIZE, 0,
> MBUF_DATA_SIZE,
> SOCKET_ID_ANY);
> if (std_pool == NULL)
> GOTO_FAIL("std_pool alloc failed");
>
> mz = rte_memzone_reserve("std_pool",
> NB_MBUF * sizeof(struct rte_mbuf),
> SOCKET_ID_ANY,
>
> RTE_MEMZONE_2MB|RTE_MEMZONE_SIZE_HINT_ONLY);
> if (mz == NULL)
> GOTO_FAIL("memzone alloc failed");
>
> ext_mem.buf_ptr = mz->addr;
> ext_mem.buf_iova = mz->iova;
> ext_mem.buf_len = mz->len;
> ext_mem.elt_size = sizeof(struct rte_mbuf);
>
> pinned_pool = rte_pktmbuf_pool_create_extbuf("pinned_pool",
> NB_MBUF, MEMPOOL_CACHE_SIZE,
> 0, 0, SOCKET_ID_ANY, &ext_mem, 1);
> if (pinned_pool == NULL)
> GOTO_FAIL("pinned_pool alloc failed");
>
> m = rte_pktmbuf_alloc(pinned_pool);
> if (unlikely(m == NULL))
> goto fail;
>
> if (test_case != 0) {
> m2 = rte_pktmbuf_alloc(std_pool);
> if (unlikely(m == NULL))
> goto fail;
> rte_pktmbuf_attach(m2, m);
> }
>
> if (test_case == 0) {
> rte_pktmbuf_free(m);
> } else if (test_case == 1) {
> rte_pktmbuf_free(m);
> rte_pktmbuf_free(m2);
> } else if (test_case == 2) {
> rte_pktmbuf_free(m2);
> rte_pktmbuf_free(m);
> }
>
>
> rte_mempool_free(pinned_pool);
> rte_memzone_free(mz);
> rte_mempool_free(std_pool);
> return 0;
>
> fail:
> rte_pktmbuf_free(m2);
> rte_pktmbuf_free(m);
> rte_mempool_free(pinned_pool);
> rte_memzone_free(mz);
> rte_mempool_free(std_pool);
> return -1;
> }
More information about the dev
mailing list