Skip to content

Commit 540b6cd

Browse files
T2: Change XOFF threshold for backplane links on long link line card (sonic-net#16550)
Description of PR Updated qos yaml and uplifted few test cases for handing change in XOFF threshold of BP ports in long link LC Summary: Fixes # (issue) Approach What is the motivation for this PR? XOFF threshold in long link card for backplane port is being reduced due to the use of default voq mode when HBM is enabled. This voq mode uses the same voq for all source ports on the same slice destined to the same egress interface. How did you do it? Added a new entry in yaml file for the topology specific value for the test case and introduced conditional checks to read the new value. How did you verify/test it? Ran qos-sai tests on T2 ----------------------------------------- generated xml file: /run_logs/19351-new-limits-pgshared/2025-01-16-21-52-41/1/qos/test_qos_sai.py::TestQosSai_2025-01-16-21-52-41.xml ------------------------------------------ INFO:root:Can not get Allure report URL. Please check logs ------------------------------------------------------------------------------------------------- live log sessionfinish ------------------------------------------------------------------------------------------------- 02:46:39 __init__.pytest_terminal_summary L0067 INFO | Can not get Allure report URL. Please check logs ================================================================================================ short test summary info ================================================================================================= PASSED qos/test_qos_sai.py::TestQosSai::testParameter[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[single_asic-xoff_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[single_asic-xoff_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[single_asic-xon_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[single_asic-xon_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLosslessVoq[single_asic-lossless_voq_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLosslessVoq[single_asic-lossless_voq_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLosslessVoq[single_asic-lossless_voq_3] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLosslessVoq[single_asic-lossless_voq_4] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark[single_asic-wm_buf_pool_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark[single_asic-wm_buf_pool_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueue[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueueVoq[single_asic-lossy_queue_voq_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpQueueMapping[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrr[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPgSharedWatermark[single_asic-wm_pg_shared_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPgSharedWatermark[single_asic-wm_pg_shared_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPGDrop[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQSharedWatermark[single_asic-wm_q_shared_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQSharedWatermark[single_asic-wm_q_shared_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpToPgMapping[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrrWeightChange[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQWatermarkAllPorts[single_asic-wm_q_wm_all_ports] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueueVoqMultiSrc[single_asic] PASSED qos/test_qos_sai.py::TestQosSai::testParameter[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[single_dut_multi_asic-xoff_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[single_dut_multi_asic-xoff_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[single_dut_multi_asic-xon_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[single_dut_multi_asic-xon_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark[single_dut_multi_asic-wm_buf_pool_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark[single_dut_multi_asic-wm_buf_pool_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueue[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpQueueMapping[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrr[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPgSharedWatermark[single_dut_multi_asic-wm_pg_shared_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPGDrop[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQSharedWatermark[single_dut_multi_asic-wm_q_shared_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQSharedWatermark[single_dut_multi_asic-wm_q_shared_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpToPgMapping[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrrWeightChange[single_dut_multi_asic] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQWatermarkAllPorts[single_dut_multi_asic-wm_q_wm_all_ports] PASSED qos/test_qos_sai.py::TestQosSai::testParameter[multi_dut_longlink_to_shortlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[multi_dut_longlink_to_shortlink-xoff_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[multi_dut_longlink_to_shortlink-xoff_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[multi_dut_longlink_to_shortlink-xon_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[multi_dut_longlink_to_shortlink-xon_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark[multi_dut_longlink_to_shortlink-wm_buf_pool_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueue[multi_dut_longlink_to_shortlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpQueueMapping[multi_dut_longlink_to_shortlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrr[multi_dut_longlink_to_shortlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPgSharedWatermark[multi_dut_longlink_to_shortlink-wm_pg_shared_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQSharedWatermark[multi_dut_longlink_to_shortlink-wm_q_shared_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpToPgMapping[multi_dut_longlink_to_shortlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrrWeightChange[multi_dut_longlink_to_shortlink] PASSED qos/test_qos_sai.py::TestQosSai::testParameter[multi_dut_shortlink_to_longlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[multi_dut_shortlink_to_longlink-xoff_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXoffLimit[multi_dut_shortlink_to_longlink-xoff_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[multi_dut_shortlink_to_longlink-xon_1] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPfcXonLimit[multi_dut_shortlink_to_longlink-xon_2] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiBufferPoolWatermark[multi_dut_shortlink_to_longlink-wm_buf_pool_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiLossyQueue[multi_dut_shortlink_to_longlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpQueueMapping[multi_dut_shortlink_to_longlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrr[multi_dut_shortlink_to_longlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPgSharedWatermark[multi_dut_shortlink_to_longlink-wm_pg_shared_lossless] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiPGDrop[multi_dut_shortlink_to_longlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiQSharedWatermark[multi_dut_shortlink_to_longlink-wm_q_shared_lossy] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDscpToPgMapping[multi_dut_shortlink_to_longlink] PASSED qos/test_qos_sai.py::TestQosSai::testQosSaiDwrrWeightChange[multi_dut_shortlink_to_longlink] SKIPPED [8] qos/test_qos_sai.py:370: Additional DSCPs are not supported on non-dual ToR ports SKIPPED [20] qos/test_qos_sai.py:430: This test is only for Mellanox. / M0/MX topo does not support qos SKIPPED [8] qos/test_qos_sai.py:639: Additional DSCPs are not supported on non-dual ToR ports SKIPPED [4] qos/test_qos_sai.py:823: Headroom pool size is not enabled on this DUT SKIPPED [2] qos/test_qos_sai.py:907: This test cannot be run since there are not enough ports. Pls see qos.yaml for the port idx's that are needed. SKIPPED [4] qos/test_qos_sai.py:1019: Headroom pool size is not enabled on this DUT SKIPPED [1] qos/test_qos_sai.py:1290: LossyQueueVoq: lossy_queue_voq_2 test is not applicable for x86_64-88_lc0_36fh-r0, with split-voq. SKIPPED [8] qos/test_qos_sai.py:1439: Skip this test since separated DSCP_TO_TC_MAP is not applied SKIPPED [5] qos/test_qos_sai.py: Dot1p-queue mapping is only supported on backend. / M0/MX topo does not support qos SKIPPED [5] qos/test_qos_sai.py: Dot1p-PG mapping is only supported on backend. / M0/MX topo does not support qos SKIPPED [5] qos/test_qos_sai.py: Priority Group Headroom Watermark is not supported on cisco asic. PG drop counter stat is covered as a part of testQosSaiPfcXoffLimit / M0/MX topo does not support qos SKIPPED [10] qos/test_qos_sai.py:1982: For DSCP to PG mapping on IPinIP traffic , mellanox device has different behavior to community. For mellanox device, testQosSaiDscpToPgMapping can cover the scenarios / M0/MX topo does not support qos SKIPPED [8] qos/test_qos_sai.py:2076: Skip this test since separated DSCP_TO_TC_MAP is not applied SKIPPED [8] qos/test_qos_sai.py:745: This test needs to be revisited later, for the case where src and dst ASICs are different. SKIPPED [6] qos/test_qos_sai.py:907: Shared Res Size Keys are not found, will be skipping test. SKIPPED [6] qos/test_qos_sai.py:1281: Lossy Queue Voq test is only supported on cisco-8000 single-asic SKIPPED [3] qos/test_qos_sai.py:1666: The lossy test is not valid for multiAsic configuration. SKIPPED [2] qos/test_qos_sai.py:2289: LossyQueueVoqMultiSrc: This test is skipped on multi-asic,since same ingress backplane port will be used on egress asic. SKIPPED [4] qos/test_qos_sai.py:719: This test is skipped for longlink. SKIPPED [2] qos/test_qos_sai.py:1131: Skip buffer pool watermark lossless test since port speed cable length is different between src and dst asic SKIPPED [1] qos/test_qos_sai.py:1800: PGDrop test is not supported for 400G longlink. SKIPPED [2] qos/test_qos_sai.py:1874: Skip queue watermark lossless test since port speed cable length is different between src and dst asic SKIPPED [2] qos/test_qos_sai.py:2169: All WM Tests are skipped for multiDUT for cisco platforms. SKIPPED [1] qos/test_qos_sai.py:2270: This test is skipped for longlink. SKIPPED [1] qos/test_qos_sai.py:331: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [4] qos/test_qos_sai.py:340: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [4] qos/test_qos_sai.py:613: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [4] qos/test_qos_sai.py:719: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:795: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:907: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:983: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:1092: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:1185: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:1256: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:1362: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:1414: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:1555: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:1628: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:1800: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:1844: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:1928: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [2] qos/test_qos_sai.py:2052: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:2113: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:2169: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [1] qos/test_qos_sai.py:2270: Don't have 2 shortlink frontend nodes - so can't run multi_dut_shortlink_to_shortlinktests SKIPPED [15] qos/test_qos_sai.py: Unsupported platform or testbed type. ================================================================================ 68 passed, 177 skipped, 1 warning in 17636.88s (4:53:56) ================================================================================ Any platform specific information? Supported testbed topology if it's a new test case? co-authorized by: jianquanye@microsoft.com
1 parent 1152ff6 commit 540b6cd

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

tests/qos/files/qos_params.gb.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,7 @@ qos_params:
385385
100000_300m:
386386
pkts_num_leak_out: 0
387387
pkts_num_egr_mem: 6884
388+
pkts_num_egr_mem_short_long: 3588
388389
pg_drop:
389390
dscp: 3
390391
ecn: 1
@@ -509,6 +510,7 @@ qos_params:
509510
400000_300m:
510511
pkts_num_leak_out: 0
511512
pkts_num_egr_mem: 6884
513+
pkts_num_egr_mem_short_long: 3588
512514
pg_drop:
513515
dscp: 3
514516
ecn: 1

tests/qos/qos_sai_base.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,8 @@ def select_src_dst_dut_and_asic(self, duthosts, request, tbinfo, lower_tor_host)
616616
dst_dut_index = 0
617617
src_asic_index = 0
618618
dst_asic_index = 0
619+
src_long_link = False
620+
dst_long_link = False
619621
topo = tbinfo["topo"]["name"]
620622
if 'dualtor' in tbinfo['topo']['name']:
621623
# index of lower_tor_host
@@ -695,9 +697,11 @@ def select_src_dst_dut_and_asic(self, duthosts, request, tbinfo, lower_tor_host)
695697
if test_port_selection_criteria == 'multi_dut_longlink_to_shortlink':
696698
src_dut_index = is_longlink_list.index(True)
697699
dst_dut_index = is_longlink_list.index(False)
700+
src_long_link = True
698701
else:
699702
src_dut_index = is_longlink_list.index(False)
700703
dst_dut_index = is_longlink_list.index(True)
704+
dst_long_link = True
701705

702706
src_asic_index = 0
703707
dst_asic_index = 0
@@ -706,7 +710,9 @@ def select_src_dst_dut_and_asic(self, duthosts, request, tbinfo, lower_tor_host)
706710
"src_dut_index": src_dut_index,
707711
"dst_dut_index": dst_dut_index,
708712
"src_asic_index": src_asic_index,
709-
"dst_asic_index": dst_asic_index
713+
"dst_asic_index": dst_asic_index,
714+
"src_long_link": src_long_link,
715+
"dst_long_link": dst_long_link
710716
}
711717

712718
@pytest.fixture(scope='class')

tests/qos/test_qos_sai.py

+24
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,14 @@ def testQosSaiPfcXoffLimit(
414414
if "pkts_num_egr_mem" in list(qosConfig.keys()):
415415
testParams["pkts_num_egr_mem"] = qosConfig["pkts_num_egr_mem"]
416416

417+
if dutTestParams["basicParams"].get("platform_asic", None) == "cisco-8000" \
418+
and not get_src_dst_asic_and_duts["src_long_link"] and get_src_dst_asic_and_duts["dst_long_link"]:
419+
if "pkts_num_egr_mem_short_long" in list(qosConfig.keys()):
420+
testParams["pkts_num_egr_mem"] = qosConfig["pkts_num_egr_mem_short_long"]
421+
else:
422+
pytest.skip(
423+
"pkts_num_egr_mem_short_long is missing in yaml file ")
424+
417425
if "pkts_num_margin" in list(qosConfig[xoffProfile].keys()):
418426
testParams["pkts_num_margin"] = qosConfig[xoffProfile]["pkts_num_margin"]
419427

@@ -693,6 +701,14 @@ def testQosSaiPfcXonLimit(
693701
if "pkts_num_egr_mem" in list(qosConfig.keys()):
694702
testParams["pkts_num_egr_mem"] = qosConfig["pkts_num_egr_mem"]
695703

704+
if dutTestParams["basicParams"].get("platform_asic", None) == "cisco-8000" \
705+
and not get_src_dst_asic_and_duts["src_long_link"] and get_src_dst_asic_and_duts["dst_long_link"]:
706+
if "pkts_num_egr_mem_short_long" in list(qosConfig.keys()):
707+
testParams["pkts_num_egr_mem"] = qosConfig["pkts_num_egr_mem_short_long"]
708+
else:
709+
pytest.skip(
710+
"pkts_num_egr_mem_short_long is missing in yaml file ")
711+
696712
if "pkts_num_hysteresis" in list(qosConfig[xonProfile].keys()):
697713
testParams["pkts_num_hysteresis"] = qosConfig[xonProfile]["pkts_num_hysteresis"]
698714

@@ -1705,6 +1721,14 @@ def testQosSaiPgSharedWatermark(
17051721
if "pkts_num_egr_mem" in list(qosConfig.keys()):
17061722
testParams["pkts_num_egr_mem"] = qosConfig["pkts_num_egr_mem"]
17071723

1724+
if dutTestParams["basicParams"].get("platform_asic", None) == "cisco-8000" \
1725+
and not get_src_dst_asic_and_duts["src_long_link"] and get_src_dst_asic_and_duts["dst_long_link"]:
1726+
if "pkts_num_egr_mem_short_long" in list(qosConfig.keys()):
1727+
testParams["pkts_num_egr_mem"] = qosConfig["pkts_num_egr_mem_short_long"]
1728+
else:
1729+
pytest.skip(
1730+
"PGSharedWatermark: pkts_num_egr_mem_short_long is missing in yaml file ")
1731+
17081732
if "packet_size" in list(qosConfig[pgProfile].keys()):
17091733
testParams["packet_size"] = qosConfig[pgProfile]["packet_size"]
17101734

0 commit comments

Comments
 (0)