mirror of
https://github.com/torvalds/linux.git
synced 2026-04-20 15:53:59 -04:00
QOS tests create congestion and verify the switch behavior. To create congestion, they need to have more traffic than the port can handle, so some of them force 1Gbps speed. The tests assume that 1Gbps speed is supported, otherwise, they will fail. Spectrum-4 ASIC will not support this speed in all ports, so to be able to run QOS tests there, some adjustments are required. Use shapers to limit the traffic instead of forcing speed. Note that for several ports, the speed configuration is just for autoneg issues, so shaper is not needed instead. In tests that already use shapers, set the existing shaper to be a child of a new TBF shaper which is added as a root qdisc and acts as a port shaper. Signed-off-by: Amit Cohen <amcohen@nvidia.com> Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: Petr Machata <petrm@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
83 lines
2.3 KiB
Bash
Executable File
83 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
# A driver for the ETS selftest that implements testing in offloaded datapath.
|
|
lib_dir=$(dirname $0)/../../../net/forwarding
|
|
source $lib_dir/sch_ets_core.sh
|
|
source $lib_dir/devlink_lib.sh
|
|
source qos_lib.sh
|
|
|
|
ALL_TESTS="
|
|
ping_ipv4
|
|
priomap_mode
|
|
ets_test_strict
|
|
ets_test_mixed
|
|
ets_test_dwrr
|
|
"
|
|
|
|
PARENT="parent 3:3"
|
|
|
|
switch_create()
|
|
{
|
|
# Create a bottleneck so that the DWRR process can kick in.
|
|
tc qdisc replace dev $swp2 root handle 3: tbf rate 1gbit \
|
|
burst 128K limit 1G
|
|
|
|
ets_switch_create
|
|
|
|
# Set the ingress quota high and use the three egress TCs to limit the
|
|
# amount of traffic that is admitted to the shared buffers. This makes
|
|
# sure that there is always enough traffic of all types to select from
|
|
# for the DWRR process.
|
|
devlink_port_pool_th_save $swp1 0
|
|
devlink_port_pool_th_set $swp1 0 12
|
|
devlink_tc_bind_pool_th_save $swp1 0 ingress
|
|
devlink_tc_bind_pool_th_set $swp1 0 ingress 0 12
|
|
devlink_port_pool_th_save $swp2 4
|
|
devlink_port_pool_th_set $swp2 4 12
|
|
devlink_tc_bind_pool_th_save $swp2 7 egress
|
|
devlink_tc_bind_pool_th_set $swp2 7 egress 4 5
|
|
devlink_tc_bind_pool_th_save $swp2 6 egress
|
|
devlink_tc_bind_pool_th_set $swp2 6 egress 4 5
|
|
devlink_tc_bind_pool_th_save $swp2 5 egress
|
|
devlink_tc_bind_pool_th_set $swp2 5 egress 4 5
|
|
|
|
# Note: sch_ets_core.sh uses VLAN ingress-qos-map to assign packet
|
|
# priorities at $swp1 based on their 802.1p headers. ingress-qos-map is
|
|
# not offloaded by mlxsw as of this writing, but the mapping used is
|
|
# 1:1, which is the mapping currently hard-coded by the driver.
|
|
}
|
|
|
|
switch_destroy()
|
|
{
|
|
devlink_tc_bind_pool_th_restore $swp2 5 egress
|
|
devlink_tc_bind_pool_th_restore $swp2 6 egress
|
|
devlink_tc_bind_pool_th_restore $swp2 7 egress
|
|
devlink_port_pool_th_restore $swp2 4
|
|
devlink_tc_bind_pool_th_restore $swp1 0 ingress
|
|
devlink_port_pool_th_restore $swp1 0
|
|
|
|
ets_switch_destroy
|
|
|
|
tc qdisc del dev $swp2 root handle 3:
|
|
}
|
|
|
|
# Callback from sch_ets_tests.sh
|
|
collect_stats()
|
|
{
|
|
local -a streams=("$@")
|
|
local stream
|
|
|
|
# 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
|
|
ets_run
|