Skip to content

Commit

Permalink
Merge branch 'seltests-xsk-various-improvements-to-xskxceiver'
Browse files Browse the repository at this point in the history
Magnus Karlsson says:

====================
seltests/xsk: various improvements to xskxceiver

This patch set implements several improvements to the xsk selftests
test suite that I thought were useful while debugging the xsk
multi-buffer code and tests. The largest new feature is the ability to
be able to execute a single test instead of the whole test suite. This
required some surgery on the current code, details below.

Anatomy of the path set:

1: Print useful info on a per packet basis with the option -v

2: Add a timeout in the transmission loop too. We only used to have
   one for the Rx thread, but Tx can lock up too waiting for
   completions.

3: Add an option (-m) to only run the tests (or a single test with a
   later patch) in a single mode: skb, drv, or zc (zero-copy).

4-5: Preparatory patches to be able to specify a test to run. Need to
     define the test names in a single structure and their entry
     points, so we can use this when wanting to run a specific test.

6: Adds a command line option (-l) that lists all the tests.

7: Adds a command line option (-t) that runs a specific test instead
   of the whole test suite. Can be combined with -m to specify a
   single mode too.

8: Use ksft_print_msg() uniformly throughout the tests. It was a mix
   of printf() and ksft_print_msg() before.

9: In some places, we failed the whole test suite instead of a single
   test in certain circumstances. Fix this so only the test in
   question is failed and the rest of the test suite continues.

10: Display the available command line options with -h

v3 -> v4:
* Fixed another spelling error in patch #9 [Maciej]
* Only allow the actual strings for the -m command [Maciej]
* Move some code from patch #7 to #3 [Maciej]

v2 -> v3:
* Drop the support for environment variables. Probably not useful. [Maciej]
* Fixed spelling mistake in patch #9 [Maciej]
* Fail gracefully if unsupported mode is chosen [Maciej]
* Simplified test run loop [Maciej]

v1 -> v2:

* Introduce XSKTEST_MODE env variable to be able to set the mode to
  use [Przemyslaw]
* Introduce XSKTEST_ETH env variable to be able to set the ethernet
  interface to use by introducing a new patch (#11) [Magnus]
* Fixed spelling error in patch #5 [Przemyslaw, Maciej]
* Fixed confusing documentation in patch #10  [Przemyslaw]
* The -l option can now be used without being root [Magnus, Maciej]
* Fixed documentation error in patch #7 [Maciej]
* Added error handling to the -t option [Maciej]
* -h now displayed as an option [Maciej]

Thanks: Magnus
====================

Acked-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Link: https://lore.kernel.org/r/20230914084900.492-1-magnus.karlsson@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
  • Loading branch information
Alexei Starovoitov committed Sep 14, 2023
2 parents 558c50c + 4a5f0ba commit 8fa1934
Show file tree
Hide file tree
Showing 4 changed files with 368 additions and 261 deletions.
40 changes: 39 additions & 1 deletion tools/testing/selftests/bpf/test_xsk.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,17 +73,33 @@
#
# Run test suite for physical device in loopback mode
# sudo ./test_xsk.sh -i IFACE
#
# Run test suite in a specific mode only [skb,drv,zc]
# sudo ./test_xsk.sh -m MODE
#
# List available tests
# ./test_xsk.sh -l
#
# Run a specific test from the test suite
# sudo ./test_xsk.sh -t TEST_NAME
#
# Display the available command line options
# ./test_xsk.sh -h

. xsk_prereqs.sh

ETH=""

while getopts "vi:d" flag
while getopts "vi:dm:lt:h" flag
do
case "${flag}" in
v) verbose=1;;
d) debug=1;;
i) ETH=${OPTARG};;
m) MODE=${OPTARG};;
l) list=1;;
t) TEST=${OPTARG};;
h) help=1;;
esac
done

Expand Down Expand Up @@ -131,6 +147,16 @@ setup_vethPairs() {
ip link set ${VETH0} up
}

if [[ $list -eq 1 ]]; then
./${XSKOBJ} -l
exit
fi

if [[ $help -eq 1 ]]; then
./${XSKOBJ}
exit
fi

if [ ! -z $ETH ]; then
VETH0=${ETH}
VETH1=${ETH}
Expand All @@ -153,6 +179,14 @@ if [[ $verbose -eq 1 ]]; then
ARGS+="-v "
fi

if [ -n "$MODE" ]; then
ARGS+="-m ${MODE} "
fi

if [ -n "$TEST" ]; then
ARGS+="-t ${TEST} "
fi

retval=$?
test_status $retval "${TEST_NAME}"

Expand All @@ -175,6 +209,10 @@ else
cleanup_iface ${ETH} ${MTU}
fi

if [[ $list -eq 1 ]]; then
exit
fi

TEST_NAME="XSK_SELFTESTS_${VETH0}_BUSY_POLL"
busy_poll=1

Expand Down
10 changes: 6 additions & 4 deletions tools/testing/selftests/bpf/xsk_prereqs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,11 @@ exec_xskxceiver()
fi

./${XSKOBJ} -i ${VETH0} -i ${VETH1} ${ARGS}

retval=$?
test_status $retval "${TEST_NAME}"
statusList+=($retval)
nameList+=(${TEST_NAME})

if [[ $list -ne 1 ]]; then
test_status $retval "${TEST_NAME}"
statusList+=($retval)
nameList+=(${TEST_NAME})
fi
}
Loading

0 comments on commit 8fa1934

Please sign in to comment.