[dpdk-dev] rte_pktmbuf_pool_create returns EINVAL

Kamaraj P pkamaraj at gmail.com
Fri Dec 11 19:21:22 CET 2020


Hello All,

Looks like the implementation of rte_mempool_populate_default()API changed
from dpdk 18.13 to 19.11 version.
This to get contiguous memory from the page.  Please see the difference in
this API.
*from dpdk 18.13:*
" If we fail to get enough contiguous memory, then we'll go and

*from dpdk 19.11*
* reserve space in smaller chunks.

Here is the palace where we see the failure ?
rte_mempool_populate_default() {
......
.......
if (pg_sz == 0 || (mz_flags & RTE_MEMZONE_IOVA_CONTIG))
ret = rte_mempool_populate_iova(mp, mz->addr,
iova, mz->len,
rte_mempool_memchunk_mz_free,
(void *)(uintptr_t)mz);
else
ret = rte_mempool_populate_virt(mp, mz->addr,
mz->len, pg_sz,
rte_mempool_memchunk_mz_free,
(void *)(uintptr_t)mz);
if (ret < 0) {
r
*te_memzone_free(mz);                        RTE_LOG(ERR, MEMPOOL, "zero
%d\n",   ret); ==> fails here*
goto fail;
}

.....
....
}
Is there anything that needs to be added from our application to get
contiguous memory ?
BTW we are using the "-legacy-mem" option.

Please suggest if there is any change required w..r.t dpdk 19.11 for the
mbuf pool creation ?

Thanks,
Kamaraj



On Thu, Dec 10, 2020 at 11:47 PM Kamaraj P <pkamaraj at gmail.com> wrote:

> Hello All,
>
> We could observe the issue with rte_mempool_populate_default() API.
> Does this lead to fetching contiguous memorywhen allocating it ?
> BTW we are using the "legacy mem" option to initialize it.
>
> Please share if you have more info on this issue.
>
>
> On Tue, Dec 8, 2020 at 12:59 PM Kamaraj P <pkamaraj at gmail.com> wrote:
>
>> Hello All,
>>
>> We are using DDPDK 19.11 and when we call *rte_pktmbuf_pool_create() *API
>> allocate memory,
>> we could see the EINVAL ( EINVAL - cache size provided is too large, or
>> priv_size is not aligned ) return from that above API.
>> We are seeing the issue only when we pass the Priv_size value of 64
>> bytes which is aligned to RTE_MBUF_PRIV_ALIGN(8 bytes).
>>
>> Here is our snippet of our code base:
>> #define MBUF_CACHE_SIZE   *512 *
>> #define MBUF_PRIV_SIZE        *64*
>> #define FRAME_LEN             *9216*
>> #define NO_OF_MBUF
>> *52736 *
>>
>> /*define in rte_config.h */
>> #define RTE_PKTMBUF_HEADROOM 128
>>
>> pool = rte_pktmbuf_pool_create(name, num_mbufs,
>>                                    MBUF_CACHE_SIZE, MBUF_PRIV_SIZE,
>>                                    frame_len + RTE_PKTMBUF_HEADROOM,
>>                                    rte_socket_id());
>>
>> The above check was failed with EINVAL
>>
>> Could you please suggest if there is any known issue or limitation w.r.t
>> 19.11
>>
>> Thanks,
>> Kamaraj
>>
>>
>>
>>


More information about the dev mailing list