Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

self-tests: introduce self-tests for RPS default mask

Ensure that RPS default mask changes take place on
all newly created netns/devices and don't affect
existing ones.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Paolo Abeni and committed by
Jakub Kicinski
c12e0d5f 605cfa1b

+61
+1
tools/testing/selftests/net/Makefile
··· 46 46 TEST_PROGS += l2_tos_ttl_inherit.sh 47 47 TEST_PROGS += bind_bhash.sh 48 48 TEST_PROGS += ip_local_port_range.sh 49 + TEST_PROGS += rps_default_mask.sh 49 50 TEST_PROGS_EXTENDED := in_netns.sh setup_loopback.sh setup_veth.sh 50 51 TEST_PROGS_EXTENDED += toeplitz_client.sh toeplitz.sh 51 52 TEST_GEN_FILES = socket nettest
+3
tools/testing/selftests/net/config
··· 3 3 CONFIG_BPF_SYSCALL=y 4 4 CONFIG_TEST_BPF=m 5 5 CONFIG_NUMA=y 6 + CONFIG_RPS=y 7 + CONFIG_SYSFS=y 8 + CONFIG_PROC_SYSCTL=y 6 9 CONFIG_NET_VRF=y 7 10 CONFIG_NET_L3_MASTER_DEV=y 8 11 CONFIG_IPV6=y
+57
tools/testing/selftests/net/rps_default_mask.sh
··· 1 + #!/bin/sh 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + readonly ksft_skip=4 5 + readonly cpus=$(nproc) 6 + ret=0 7 + 8 + [ $cpus -gt 2 ] || exit $ksft_skip 9 + 10 + readonly INITIAL_RPS_DEFAULT_MASK=$(cat /proc/sys/net/core/rps_default_mask) 11 + readonly NETNS="ns-$(mktemp -u XXXXXX)" 12 + 13 + setup() { 14 + ip netns add "${NETNS}" 15 + ip -netns "${NETNS}" link set lo up 16 + } 17 + 18 + cleanup() { 19 + echo $INITIAL_RPS_DEFAULT_MASK > /proc/sys/net/core/rps_default_mask 20 + ip netns del $NETNS 21 + } 22 + 23 + chk_rps() { 24 + local rps_mask expected_rps_mask=$3 25 + local dev_name=$2 26 + local msg=$1 27 + 28 + rps_mask=$(ip netns exec $NETNS cat /sys/class/net/$dev_name/queues/rx-0/rps_cpus) 29 + printf "%-60s" "$msg" 30 + if [ $rps_mask -eq $expected_rps_mask ]; then 31 + echo "[ ok ]" 32 + else 33 + echo "[fail] expected $expected_rps_mask found $rps_mask" 34 + ret=1 35 + fi 36 + } 37 + 38 + trap cleanup EXIT 39 + 40 + echo 0 > /proc/sys/net/core/rps_default_mask 41 + setup 42 + chk_rps "empty rps_default_mask" lo 0 43 + cleanup 44 + 45 + echo 1 > /proc/sys/net/core/rps_default_mask 46 + setup 47 + chk_rps "non zero rps_default_mask" lo 1 48 + 49 + echo 3 > /proc/sys/net/core/rps_default_mask 50 + chk_rps "changing rps_default_mask dont affect existing netns" lo 1 51 + 52 + ip -n $NETNS link add type veth 53 + ip -n $NETNS link set dev veth0 up 54 + ip -n $NETNS link set dev veth1 up 55 + chk_rps "changing rps_default_mask affect newly created devices" veth0 3 56 + chk_rps "changing rps_default_mask affect newly created devices[II]" veth1 3 57 + exit $ret