Merge branch 'net-selftests'
Petr Machata says: ==================== selftests: Use busywait() in a couple places Two helper function for active waiting for an event were recently introduced: busywait() as the active-waiting tool, and until_counter_is() as a configurable predicate that can be plugged into busywait(). Use these in tc_common and mlxsw's qos_defprio instead of hand-coding equivalents. Patches #1 and #2 extend lib.sh facilities to make the transition possible. Patch #3 converts tc_common, and patch #4 qos_defprio. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
78efdb5c9f
|
@ -114,23 +114,12 @@ ping_ipv4()
|
|||
ping_test $h1 192.0.2.2
|
||||
}
|
||||
|
||||
wait_for_packets()
|
||||
{
|
||||
local t0=$1; shift
|
||||
local prio_observe=$1; shift
|
||||
|
||||
local t1=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
|
||||
local delta=$((t1 - t0))
|
||||
echo $delta
|
||||
((delta >= 10))
|
||||
}
|
||||
|
||||
__test_defprio()
|
||||
{
|
||||
local prio_install=$1; shift
|
||||
local prio_observe=$1; shift
|
||||
local delta
|
||||
local key
|
||||
local t1
|
||||
local i
|
||||
|
||||
RET=0
|
||||
|
@ -139,9 +128,10 @@ __test_defprio()
|
|||
|
||||
local t0=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
|
||||
mausezahn -q $h1 -d 100m -c 10 -t arp reply
|
||||
delta=$(busywait "$HIT_TIMEOUT" wait_for_packets $t0 $prio_observe)
|
||||
t1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((t0 + 10))" \
|
||||
ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
|
||||
|
||||
check_err $? "Default priority $prio_install/$prio_observe: Expected to capture 10 packets, got $delta."
|
||||
check_err $? "Default priority $prio_install/$prio_observe: Expected to capture 10 packets, got $((t1 - t0))."
|
||||
log_test "Default priority $prio_install/$prio_observe"
|
||||
|
||||
defprio_uninstall $swp1 $prio_install
|
||||
|
|
|
@ -351,7 +351,7 @@ build_backlog()
|
|||
local i=0
|
||||
|
||||
while :; do
|
||||
local cur=$(busywait 1100 until_counter_is $((cur + 1)) \
|
||||
local cur=$(busywait 1100 until_counter_is "> $cur" \
|
||||
get_qdisc_backlog $vlan)
|
||||
local diff=$((size - cur))
|
||||
local pkts=$(((diff + 7999) / 8000))
|
||||
|
@ -481,14 +481,14 @@ do_mc_backlog_test()
|
|||
start_tcp_traffic $h1.$vlan $(ipaddr 1 $vlan) $(ipaddr 3 $vlan) bc
|
||||
start_tcp_traffic $h2.$vlan $(ipaddr 2 $vlan) $(ipaddr 3 $vlan) bc
|
||||
|
||||
qbl=$(busywait 5000 until_counter_is 500000 \
|
||||
qbl=$(busywait 5000 until_counter_is ">= 500000" \
|
||||
get_qdisc_backlog $vlan)
|
||||
check_err $? "Could not build MC backlog"
|
||||
|
||||
# Verify that we actually see the backlog on BUM TC. Do a busywait as
|
||||
# well, performance blips might cause false fail.
|
||||
local ebl
|
||||
ebl=$(busywait 5000 until_counter_is 500000 \
|
||||
ebl=$(busywait 5000 until_counter_is ">= 500000" \
|
||||
get_mc_transmit_queue $vlan)
|
||||
check_err $? "MC backlog reported by qdisc not visible in ethtool"
|
||||
|
||||
|
|
|
@ -277,11 +277,11 @@ wait_for_offload()
|
|||
|
||||
until_counter_is()
|
||||
{
|
||||
local value=$1; shift
|
||||
local expr=$1; shift
|
||||
local current=$("$@")
|
||||
|
||||
echo $((current))
|
||||
((current >= value))
|
||||
((current $expr))
|
||||
}
|
||||
|
||||
busywait_for_counter()
|
||||
|
@ -290,7 +290,7 @@ busywait_for_counter()
|
|||
local delta=$1; shift
|
||||
|
||||
local base=$("$@")
|
||||
busywait "$timeout" until_counter_is $((base + delta)) "$@"
|
||||
busywait "$timeout" until_counter_is ">= $((base + delta))" "$@"
|
||||
}
|
||||
|
||||
setup_wait_dev()
|
||||
|
@ -626,6 +626,17 @@ tc_rule_stats_get()
|
|||
| jq ".[1].options.actions[].stats$selector"
|
||||
}
|
||||
|
||||
tc_rule_handle_stats_get()
|
||||
{
|
||||
local id=$1; shift
|
||||
local handle=$1; shift
|
||||
local selector=${1:-.packets}; shift
|
||||
|
||||
tc -j -s filter show $id \
|
||||
| jq ".[] | select(.options.handle == $handle) | \
|
||||
.options.actions[0].stats$selector"
|
||||
}
|
||||
|
||||
ethtool_stats_get()
|
||||
{
|
||||
local dev=$1; shift
|
||||
|
|
|
@ -6,39 +6,14 @@ CHECK_TC="yes"
|
|||
# Can be overridden by the configuration file. See lib.sh
|
||||
TC_HIT_TIMEOUT=${TC_HIT_TIMEOUT:=1000} # ms
|
||||
|
||||
__tc_check_packets()
|
||||
{
|
||||
local id=$1
|
||||
local handle=$2
|
||||
local count=$3
|
||||
local operator=$4
|
||||
|
||||
start_time="$(date -u +%s%3N)"
|
||||
while true
|
||||
do
|
||||
cmd_jq "tc -j -s filter show $id" \
|
||||
".[] | select(.options.handle == $handle) | \
|
||||
select(.options.actions[0].stats.packets $operator $count)" \
|
||||
&> /dev/null
|
||||
ret=$?
|
||||
if [[ $ret -eq 0 ]]; then
|
||||
return $ret
|
||||
fi
|
||||
current_time="$(date -u +%s%3N)"
|
||||
diff=$(expr $current_time - $start_time)
|
||||
if [ "$diff" -gt "$TC_HIT_TIMEOUT" ]; then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
tc_check_packets()
|
||||
{
|
||||
local id=$1
|
||||
local handle=$2
|
||||
local count=$3
|
||||
|
||||
__tc_check_packets "$id" "$handle" "$count" "=="
|
||||
busywait "$TC_HIT_TIMEOUT" until_counter_is "== $count" \
|
||||
tc_rule_handle_stats_get "$id" "$handle" > /dev/null
|
||||
}
|
||||
|
||||
tc_check_packets_hitting()
|
||||
|
@ -46,5 +21,6 @@ tc_check_packets_hitting()
|
|||
local id=$1
|
||||
local handle=$2
|
||||
|
||||
__tc_check_packets "$id" "$handle" 0 ">"
|
||||
busywait "$TC_HIT_TIMEOUT" until_counter_is "> 0" \
|
||||
tc_rule_handle_stats_get "$id" "$handle" > /dev/null
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue