Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dpdk: add initial unittests for DPDK codebase v7 #12395

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

lukashino
Copy link
Contributor

Follow-up of: #12083

Redmine tickets:

The PR is adding unit tests tailored to verify CPU threading logic and the automatic calculation of mempool cache of the interface.

Describe changes:
v7:

v6:

  • github ci runs reverted to suppressing the "deprecated" error
  • expanded the explanation in the commit now

v5:

  • fixed the includes
  • github ci runs with experimental DPDK features in the build test for DPDK v23.11.*
  • no more GCC deprecation warning pushes

v4

  • fixed live device cleaning function
  • silenced 23.11 DPDK bond warning about "deprecated" (experimental) function on Fedora 40 builds
  • rebased

v3

  • comments from Philippe
  • I left TAILQ_INIT in the finalize/cleanup functions - all elements of the arrays are cleaned but not the base pointer of the array itself. TAILQ_* functions don't offer reset function but TAILQ_INIT provides the desired outcome
  • moved guards around - per Philippe's suggestions

v2

  • added a FatalError check on the number of LiveDevices
  • changed #if HAVE_DPDK to #if defined(HAVE_DPDK) && defined(UNITTESTS)
  • enabled unit tests in the Github workflow runs on Ubuntu and Fedora tasks

v1

  • function-guarded variable
  • fix the CPU exclude logic
  • add DPDK unit tests

Lukas Sismis added 9 commits January 13, 2025 12:55
To better control the values within the variables and to
prepare for the follow-up unit tests, the variable was moved
into global scope and should accessed only by functions.
This allows reinstantination of the variable value - needed for
unit tests.
The function would incorrectly perform XOR operation. While it
worked when the worker cores were occupying all cores, it is
still not correct operation. The example might be when a core
would be affined to only management and not worker threads.
With the XOR operation it would set affinity to also worker set.
(1 XOR 0 -> 1 where in fact the desired outcome is 0)
For the upcoming changes, skipping a unit test might be beneficial
when testing a function that retrieves hardware data. This can e.g. depend
on the number of CPU cores and systems that does not meet the required
test criteria will need to omit the tests.
The tests should always target minimal system requirements
The commit adds unit tests for mempool cache calculation.
The DPDK mempool cache can be automatically calculated
from the size of the mempool.

The commit also adds unit tests for automatic thread
distribution when multiple interfaces are present
and when there is a possible overlap with management
threads.

Ticket: 6927
DPDK Bonding API has been changed in DPDK version 23.11 where
the old *slave* API was marked as deprecated and the new *member*
API was marked as experimental.
This was unfortunately executed by marking both API variants
at the same time. The deprecated version is removed from the follow
up versions while the experimental version will become stable
in the next DPDK releases. This is based on a policy in DPDK where
an API change needs to merged in main for 1 stable release before
removing the experimental flag.

In DPDK 24.11 this has been fixed and warning supression is not
added.

Ticket: 7009
Copy link

codecov bot commented Jan 14, 2025

Codecov Report

Attention: Patch coverage is 93.20388% with 21 lines in your changes missing coverage. Please review.

Project coverage is 80.63%. Comparing base (05853fb) to head (5cd0094).
Report is 5 commits behind head on master.

Additional details and impacted files
@@            Coverage Diff             @@
##           master   #12395      +/-   ##
==========================================
- Coverage   82.46%   80.63%   -1.84%     
==========================================
  Files         914      915       +1     
  Lines      258316   258736     +420     
==========================================
- Hits       213030   208635    -4395     
- Misses      45286    50101    +4815     
Flag Coverage Δ
fuzzcorpus 56.85% <50.00%> (-3.53%) ⬇️
livemode 19.41% <77.77%> (+0.01%) ⬆️
pcap 44.28% <100.00%> (-0.06%) ⬇️
suricata-verify 63.22% <100.00%> (-0.06%) ⬇️
unittests 58.28% <93.20%> (+0.21%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

@suricata-qa
Copy link

WARNING:

field baseline test %
SURI_TLPR1_stats_chk
.uptime 651 624 95.85%

Pipeline 24207

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

3 participants