Commit b9b72999 authored by Petr Machata's avatar Petr Machata Committed by David S. Miller
Browse files

selftests: forwarding: ETS: Use Qdisc counters



Currently the SW-datapath ETS selftests use "ip link" stats to obtain the
number of packets that went through a given band. mlxsw then uses ethtool
per-priority counters.

Instead, change both to use qdiscs. In SW datapath this is the obvious
choice, and now that mlxsw offloads FIFO, this should work on the offloaded
datapath as well. This has the effect of verifying that the FIFO offload
works.

Signed-off-by: default avatarPetr Machata <petrm@mellanox.com>
Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7bec1a45
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -56,11 +56,19 @@ switch_destroy()
}

# Callback from sch_ets_tests.sh
get_stats()
collect_stats()
{
	local band=$1; shift
	local -a streams=("$@")
	local stream

	ethtool_stats_get "$h2" rx_octets_prio_$band
	# Wait for qdisc counter update so that we don't get it mid-way through.
	busywait_for_counter 1000 +1 \
		qdisc_parent_stats_get $swp2 10:$((${streams[0]} + 1)) .bytes \
		> /dev/null

	for stream in ${streams[@]}; do
		qdisc_parent_stats_get $swp2 10:$((stream + 1)) .bytes
	done
}

bail_on_lldpad
+10 −0
Original line number Diff line number Diff line
@@ -655,6 +655,16 @@ qdisc_stats_get()
	    | jq '.[] | select(.handle == "'"$handle"'") | '"$selector"
}

qdisc_parent_stats_get()
{
	local dev=$1; shift
	local parent=$1; shift
	local selector=$1; shift

	tc -j -s qdisc show dev "$dev" invisible \
	    | jq '.[] | select(.parent == "'"$parent"'") | '"$selector"
}

humanize()
{
	local speed=$1; shift
+6 −3
Original line number Diff line number Diff line
@@ -34,11 +34,14 @@ switch_destroy()
}

# Callback from sch_ets_tests.sh
get_stats()
collect_stats()
{
	local stream=$1; shift
	local -a streams=("$@")
	local stream

	link_stats_get $h2.1$stream rx bytes
	for stream in ${streams[@]}; do
		qdisc_parent_stats_get $swp2 10:$((stream + 1)) .bytes
	done
}

ets_run
+3 −7
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

# Global interface:
#  $put -- port under test (e.g. $swp2)
#  get_stats($band) -- A function to collect stats for band
#  collect_stats($streams...) -- A function to get stats for individual streams
#  ets_start_traffic($band) -- Start traffic for this band
#  ets_change_qdisc($op, $dev, $nstrict, $quanta...) -- Add or change qdisc

@@ -94,15 +94,11 @@ __ets_dwrr_test()

	sleep 10

	t0=($(for stream in ${streams[@]}; do
		  get_stats $stream
	      done))
	t0=($(collect_stats "${streams[@]}"))

	sleep 10

	t1=($(for stream in ${streams[@]}; do
		  get_stats $stream
	      done))
	t1=($(collect_stats "${streams[@]}"))
	d=($(for ((i = 0; i < ${#streams[@]}; i++)); do
		 echo $((${t1[$i]} - ${t0[$i]}))
	     done))