When running tests in parallel on systems with many cores, multiple test
processes collide on the default "rte" file-prefix, causing EAL
initialization failures:
EAL: Cannot allocate memzone list: Device or resource busy
EAL: Cannot init memzone
This occurs because all DPDK tests (including --no-huge tests) use
file-backed arrays for memzone tracking. These files are created at
/var/run/dpdk/<prefix>/fbarray_memzone and require exclusive locking
during initialization. When multiple tests run in parallel with the
same file-prefix, they compete for this lock.
The original implementation included --file-prefix for Linux to
prevent this collision. This was later removed during test
infrastructure refactoring.
Restore the --file-prefix argument for all fast-tests on Linux,
regardless of whether they use hugepages. Tests that exercise
file-prefix functionality (like eal_flags_file_prefix_autotest)
spawn child processes with their own hardcoded prefixes and use
get_current_prefix() to verify the parent's resources, so they work
correctly regardless of what prefix the parent process uses.
Fixes: 50823f30f0c8 ("test: build using per-file dependencies")
Cc: [email protected]
Signed-off-by: Stephen Hemminger <[email protected]>
---
app/test/suites/meson.build | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/app/test/suites/meson.build b/app/test/suites/meson.build
index 1010150eee..38df1cfec2 100644
--- a/app/test/suites/meson.build
+++ b/app/test/suites/meson.build
@@ -85,7 +85,11 @@ foreach suite:test_suites
if nohuge
test_args += test_no_huge_args
elif not has_hugepage
- continue #skip this tests
+ continue # skip this tests
+ endif
+ if is_linux
+ # use unique file-prefix to allow parallel runs
+ test_args += ['--file-prefix=' + test_name.underscorify()]
endif
if not asan and get_option('b_sanitize').contains('address')
continue # skip this test
--
2.51.0