[dpdk-dev] [PATCH] app/test: fix mempool test failure on FreeBSD

Dmitry Kozlyuk dkozlyuk at oss.nvidia.com
Fri Oct 29 11:37:03 CEST 2021



> -----Original Message-----
> From: Olivier Matz <olivier.matz at 6wind.com>
> Sent: 29 октября 2021 г. 12:35
> To: Dmitry Kozlyuk <dkozlyuk at nvidia.com>
> Cc: dev at dpdk.org; YuX Jiang <yux.jiang at intel.com>; Andrew Rybchenko
> <andrew.rybchenko at oktetlabs.ru>
> Subject: Re: [PATCH] app/test: fix mempool test failure on FreeBSD
> 
> External email: Use caution opening links or attachments
> 
> 
> Hi Dmitry,
> 
> On Fri, Oct 29, 2021 at 11:40:50AM +0300, Dmitry Kozlyuk wrote:
> > FreeBSD EAL does not implement rte_mem_virt2iova()
> > that was used in mempool_autotest, causing it to fail:
> >
> >     EAL: Test assert
> test_mempool_flag_non_io_unset_when_populated_with_valid_iova
> >     line 781 failed: Cannot get IOVA
> >     test failed at test_mempool():1030
> >     Test Failed
> >
> > Change unit test to use rte_memzone_reserve() to allocate memory,
> > which allows to obtain IOVA directly.
> >
> > Bugzilla ID: 863
> > Fixes: 11541c5c81dd ("mempool: add non-IO flag")
> >
> > Reported-by: YuX Jiang <yux.jiang at intel.com>
> > Signed-off-by: Dmitry Kozlyuk <dkozlyuk at nvidia.com>
> 
> Reviewed-by: Olivier Matz <olivier.matz at 6wind.com>
> 
> However, I launched the test like this and it failed:
> 
> $ ./build/app/test/dpdk-test --no-huge -m 512
> EAL: Detected CPU lcores: 12
> EAL: Detected NUMA nodes: 1
> EAL: Detected shared linkage of DPDK
> EAL: Multi-process socket /run/user/12489/dpdk/rte/mp_socket
> EAL: Selected IOVA mode 'VA'
> APP: HPET is not enabled, using TSC as default timer
> RTE>>mempool_autotest
> (...)
> EAL: Test assert test_mempool_events line 585 failed: Failed to populate
> mempool empty1: Success
> test failed at test_mempool():1019
> Test Failed
> 
> It appears that the failure comes from:
> 
> int
> rte_mempool_populate_anon(struct rte_mempool *mp)
> {
> (...)
>         /* can't use MMAP_LOCKED, it does not exist on BSD */
>         if (rte_mem_lock(addr, size) < 0) {
> =>              rte_mem_unmap(addr, size);
>                 return 0;
>         }
> 
> The errno here is 12 (ENOMEM). This is because of the default ulimit for
> max locked memory: (kbytes, -l) 65536
> 
> If I increase it to 128000, it works.
> 
> Would it make sense to decrease the size of the pools so that we don't
> reach this limit?

Good catch, will send a v2.

> (...)
> > @@ -789,12 +791,12 @@
> test_mempool_flag_non_io_unset_when_populated_with_valid_iova(void)
> >       /*
> >        * Since objects from the pool are never used in the test,
> >        * we don't care for contiguous IOVA, on the other hand,
> > -      * reiuring it could cause spurious test failures.
> > +      * reqiuring it could cause spurious test failures.
> 
> nice try :D


More information about the dev mailing list