mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

This test suite validates the functionality of the devlink-rate API for traffic class (TC) bandwidth allocation. It ensures that bandwidth can be distributed between different traffic classes as configured, and verifies that explicit TC-to-queue mapping is required for the allocation to be effective. The first test (test_no_tc_mapping_bandwidth) is marked as expected failure on mlx5, since the hardware automatically enforces traffic class separation by dynamically moving queues to the correct TC scheduler, even without explicit TC-to-queue mapping configuration. Test output on mlx5: 1..2 # Created VF interface: eth5 # Created VLAN eth5.101 on eth5 with tc 3 and IP 198.51.100.2 # Created VLAN eth5.102 on eth5 with tc 4 and IP 198.51.100.10 # Set representor eth4 up and added to bridge # Bandwidth check results without TC mapping: # TC 3: 0.19 Gbits/sec # TC 4: 0.76 Gbits/sec # Total bandwidth: 0.95 Gbits/sec # TC 3 percentage: 20.0% # TC 4 percentage: 80.0% ok 1 devlink_rate_tc_bw.test_no_tc_mapping_bandwidth # XFAIL Bandwidth matched 80/20 split without TC mapping # Created VF interface: eth5 # Created VLAN eth5.101 on eth5 with tc 3 and IP 198.51.100.2 # Created VLAN eth5.102 on eth5 with tc 4 and IP 198.51.100.10 # Set representor eth4 up and added to bridge # Bandwidth check results with TC mapping: # TC 3: 0.21 Gbits/sec # TC 4: 0.78 Gbits/sec # Total bandwidth: 0.98 Gbits/sec # TC 3 percentage: 21.1% # TC 4 percentage: 78.9% # Bandwidth is distributed as 80/20 with TC mapping ok 2 devlink_rate_tc_bw.test_tc_mapping_bandwidth # Totals: pass:1 fail:0 xfail:1 xpass:0 skip:0 error:0 Signed-off-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com> Reviewed-by: Nimrod Oren <noren@nvidia.com> Signed-off-by: Mark Bloch <mbloch@nvidia.com> Link: https://patch.msgid.link/20250629142138.361537-9-mbloch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
from .consts import KSRC, KSFT_DIR
|
|
from .ksft import ksft_pr, ktap_result
|
|
|
|
# Resolve paths
|
|
try:
|
|
if (KSFT_DIR / "kselftest-list.txt").exists():
|
|
# Running in "installed" selftests
|
|
tools_full_path = KSFT_DIR
|
|
SPEC_PATH = KSFT_DIR / "net/lib/specs"
|
|
|
|
sys.path.append(tools_full_path.as_posix())
|
|
from net.lib.ynl.pyynl.lib import YnlFamily, NlError
|
|
else:
|
|
# Running in tree
|
|
tools_full_path = KSRC / "tools"
|
|
SPEC_PATH = KSRC / "Documentation/netlink/specs"
|
|
|
|
sys.path.append(tools_full_path.as_posix())
|
|
from net.ynl.pyynl.lib import YnlFamily, NlError
|
|
except ModuleNotFoundError as e:
|
|
ksft_pr("Failed importing `ynl` library from kernel sources")
|
|
ksft_pr(str(e))
|
|
ktap_result(True, comment="SKIP")
|
|
sys.exit(4)
|
|
|
|
#
|
|
# Wrapper classes, loading the right specs
|
|
# Set schema='' to avoid jsonschema validation, it's slow
|
|
#
|
|
class EthtoolFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('ethtool.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
|
|
class RtnlFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('rt-link.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class RtnlAddrFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('rt-addr.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class NetdevFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('netdev.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class NetshaperFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('net_shaper.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|
|
|
|
class DevlinkFamily(YnlFamily):
|
|
def __init__(self, recv_size=0):
|
|
super().__init__((SPEC_PATH / Path('devlink.yaml')).as_posix(),
|
|
schema='', recv_size=recv_size)
|