File Index
Files and directories
Sign in
FILE

busy_poll_test.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/net/busy_poll_test.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3source lib.sh
  4
  5NSIM_SV_ID=$((256 + RANDOM % 256))
  6NSIM_SV_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_SV_ID
  7NSIM_CL_ID=$((512 + RANDOM % 256))
  8NSIM_CL_SYS=/sys/bus/netdevsim/devices/netdevsim$NSIM_CL_ID
  9
 10NSIM_DEV_SYS_NEW=/sys/bus/netdevsim/new_device
 11NSIM_DEV_SYS_DEL=/sys/bus/netdevsim/del_device
 12NSIM_DEV_SYS_LINK=/sys/bus/netdevsim/link_device
 13NSIM_DEV_SYS_UNLINK=/sys/bus/netdevsim/unlink_device
 14
 15SERVER_IP=192.168.1.1
 16CLIENT_IP=192.168.1.2
 17SERVER_PORT=48675
 18
 19# busy poll config
 20MAX_EVENTS=8
 21BUSY_POLL_USECS=0
 22BUSY_POLL_BUDGET=16
 23PREFER_BUSY_POLL=1
 24
 25# IRQ deferral config
 26NAPI_DEFER_HARD_IRQS=100
 27GRO_FLUSH_TIMEOUT=50000
 28SUSPEND_TIMEOUT=20000000
 29
 30NAPI_THREADED_MODE_BUSY_POLL=2
 31
 32setup_ns()
 33{
 34	set -e
 35	ip netns add nssv
 36	ip netns add nscl
 37
 38	NSIM_SV_NAME=$(find $NSIM_SV_SYS/net -maxdepth 1 -type d ! \
 39		-path $NSIM_SV_SYS/net -exec basename {} \;)
 40	NSIM_CL_NAME=$(find $NSIM_CL_SYS/net -maxdepth 1 -type d ! \
 41		-path $NSIM_CL_SYS/net -exec basename {} \;)
 42
 43	# ensure the server has 1 queue
 44	ethtool -L $NSIM_SV_NAME combined 1 2>/dev/null
 45
 46	ip link set $NSIM_SV_NAME netns nssv
 47	ip link set $NSIM_CL_NAME netns nscl
 48
 49	ip netns exec nssv ip addr add "${SERVER_IP}/24" dev $NSIM_SV_NAME
 50	ip netns exec nscl ip addr add "${CLIENT_IP}/24" dev $NSIM_CL_NAME
 51
 52	ip netns exec nssv ip link set dev $NSIM_SV_NAME up
 53	ip netns exec nscl ip link set dev $NSIM_CL_NAME up
 54
 55	set +e
 56}
 57
 58cleanup_ns()
 59{
 60	ip netns del nscl
 61	ip netns del nssv
 62}
 63
 64test_busypoll()
 65{
 66	suspend_value=${1:-0}
 67	napi_threaded_value=${2:-0}
 68	prefer_busy_poll_value=${3:-$PREFER_BUSY_POLL}
 69
 70	tmp_file=$(mktemp)
 71	out_file=$(mktemp)
 72
 73	# fill a test file with random data
 74	dd if=/dev/urandom of=${tmp_file} bs=1M count=1 2> /dev/null
 75
 76	timeout -k 1s 30s ip netns exec nssv ./busy_poller         \
 77					     -p${SERVER_PORT}      \
 78					     -b${SERVER_IP}        \
 79					     -m${MAX_EVENTS}       \
 80					     -u${BUSY_POLL_USECS}  \
 81					     -P${prefer_busy_poll_value} \
 82					     -g${BUSY_POLL_BUDGET} \
 83					     -i${NSIM_SV_IFIDX}    \
 84					     -s${suspend_value}    \
 85					     -t${napi_threaded_value} \
 86					     -o${out_file}&
 87
 88	wait_local_port_listen nssv ${SERVER_PORT} tcp
 89
 90	ip netns exec nscl socat -u $tmp_file TCP:${SERVER_IP}:${SERVER_PORT}
 91
 92	wait
 93
 94	tmp_file_md5sum=$(md5sum $tmp_file | cut -f1 -d' ')
 95	out_file_md5sum=$(md5sum $out_file | cut -f1 -d' ')
 96
 97	if [ "$tmp_file_md5sum" = "$out_file_md5sum" ]; then
 98		res=0
 99	else
100		echo "md5sum mismatch"
101		echo "input file md5sum: ${tmp_file_md5sum}";
102		echo "output file md5sum: ${out_file_md5sum}";
103		res=1
104	fi
105
106	rm $out_file $tmp_file
107
108	return $res
109}
110
111test_busypoll_with_suspend()
112{
113	test_busypoll ${SUSPEND_TIMEOUT}
114
115	return $?
116}
117
118test_busypoll_with_napi_threaded()
119{
120	# Only enable napi threaded poll. Set suspend timeout and prefer busy
121	# poll to 0.
122	test_busypoll 0 ${NAPI_THREADED_MODE_BUSY_POLL} 0
123
124	return $?
125}
126
127###
128### Code start
129###
130
131modprobe netdevsim
132
133# linking
134
135echo $NSIM_SV_ID > $NSIM_DEV_SYS_NEW
136echo $NSIM_CL_ID > $NSIM_DEV_SYS_NEW
137udevadm settle
138
139setup_ns
140
141NSIM_SV_FD=$((256 + RANDOM % 256))
142exec {NSIM_SV_FD}</var/run/netns/nssv
143NSIM_SV_IFIDX=$(ip netns exec nssv cat /sys/class/net/$NSIM_SV_NAME/ifindex)
144
145NSIM_CL_FD=$((256 + RANDOM % 256))
146exec {NSIM_CL_FD}</var/run/netns/nscl
147NSIM_CL_IFIDX=$(ip netns exec nscl cat /sys/class/net/$NSIM_CL_NAME/ifindex)
148
149echo "$NSIM_SV_FD:$NSIM_SV_IFIDX $NSIM_CL_FD:$NSIM_CL_IFIDX" > \
150     $NSIM_DEV_SYS_LINK
151
152if [ $? -ne 0 ]; then
153	echo "linking netdevsim1 with netdevsim2 should succeed"
154	cleanup_ns
155	exit 1
156fi
157
158test_busypoll
159if [ $? -ne 0 ]; then
160	echo "test_busypoll failed"
161	cleanup_ns
162	exit 1
163fi
164
165test_busypoll_with_suspend
166if [ $? -ne 0 ]; then
167	echo "test_busypoll_with_suspend failed"
168	cleanup_ns
169	exit 1
170fi
171
172test_busypoll_with_napi_threaded
173if [ $? -ne 0 ]; then
174	echo "test_busypoll_with_napi_threaded failed"
175	cleanup_ns
176	exit 1
177fi
178
179echo "$NSIM_SV_FD:$NSIM_SV_IFIDX" > $NSIM_DEV_SYS_UNLINK
180
181echo $NSIM_CL_ID > $NSIM_DEV_SYS_DEL
182
183cleanup_ns
184
185modprobe -r netdevsim
186
187exit 0
~/ Read-only file preview.