Skip to content

Commit 1294938

Browse files
[tests/route]: Add an option to test max ASIC route scale limit (#8265)
What is the motivation for this PR? To improve route scaling tests and avoid table full errors in production How did you do it? Increase test scale based on topology and check for certain necessary config parameters How did you verify/test it? By running this sonic-mgmt on testbeds with different topologies
1 parent de8552f commit 1294938

2 files changed

Lines changed: 53 additions & 8 deletions

File tree

tests/route/conftest.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ def pytest_addoption(parser):
1010
route_group.addoption("--num_routes", action="store", default=None, type=int,
1111
help="Number of routes for add/delete")
1212

13+
route_group.addoption("--max_scale", action="store_true",
14+
help="Test with maximum possible route scale")
15+
1316

1417
@pytest.fixture(scope='module')
1518
def get_function_conpleteness_level(pytestconfig):

tests/route/test_route_perf.py

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,46 @@
2222

2323
ROUTE_TABLE_NAME = "ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY"
2424
DEFAULT_NUM_ROUTES = 10000
25-
DEAFULT_M0_MX_NUM_ROUTES = 500
25+
26+
route_scale_per_role = {
27+
"m0": {
28+
"ipv4": 500,
29+
"ipv6": 500
30+
},
31+
"mx": {
32+
"ipv4": 500,
33+
"ipv6": 500
34+
},
35+
"t0": {
36+
"ipv4": 40000,
37+
"ipv6": 8000
38+
},
39+
"t1": {
40+
"ipv4": 40000,
41+
"ipv6": 8000
42+
}
43+
}
44+
45+
46+
def get_route_scale_per_role(tbinfo, ip_version):
47+
topo_name = tbinfo["topo"]["name"].split('-', 1)[0]
48+
logger.info("Test topology: {}".format(topo_name))
49+
if topo_name in route_scale_per_role:
50+
set_num_routes = route_scale_per_role[topo_name][ip_version]
51+
else:
52+
set_num_routes = DEFAULT_NUM_ROUTES
53+
return set_num_routes
54+
55+
56+
@pytest.fixture
57+
def check_config(duthosts, enum_rand_one_per_hwsku_frontend_hostname):
58+
duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname]
59+
asic = duthost.facts["asic_type"]
60+
61+
if (asic == "broadcom"):
62+
alpm_enable = duthost.command('bcmcmd "conf show l3_alpm_enable"')["stdout_lines"][2].strip()
63+
logger.info("Checking config: {}".format(alpm_enable))
64+
pytest_assert(alpm_enable == "l3_alpm_enable=2", "l3_alpm_enable is not set for route scaling")
2665

2766

2867
@pytest.fixture(autouse=True)
@@ -276,19 +315,19 @@ def test_perf_add_remove_routes(
276315
ptfadapter,
277316
enum_rand_one_per_hwsku_frontend_hostname,
278317
request,
318+
check_config,
279319
ip_versions,
280320
enum_rand_one_frontend_asic_index,
281321
):
282322
duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname]
283323
asichost = duthost.asic_instance(enum_rand_one_frontend_asic_index)
324+
max_scale = request.config.getoption("--max_scale")
284325
# Number of routes for test
285326
set_num_routes = request.config.getoption("--num_routes")
286-
if set_num_routes is None:
287-
topo_name = tbinfo["topo"]["name"]
288-
if topo_name in ["m0", "mx"]:
289-
set_num_routes = DEAFULT_M0_MX_NUM_ROUTES
290-
else:
291-
set_num_routes = DEFAULT_NUM_ROUTES
327+
if max_scale and set_num_routes is not None:
328+
raise Exception("--max_scale and --num_routes are mutually exclusive")
329+
elif not max_scale and set_num_routes is None:
330+
set_num_routes = get_route_scale_per_role(tbinfo, "ipv{}".format(ip_versions))
292331

293332
# Generate interfaces and neighbors
294333
NUM_NEIGHS = 50 # Update max num neighbors for multi-asic
@@ -310,7 +349,10 @@ def test_perf_add_remove_routes(
310349
),
311350
)
312351

313-
num_routes = min(avail_routes_count, set_num_routes)
352+
if (max_scale):
353+
num_routes = avail_routes_count
354+
else:
355+
num_routes = min(avail_routes_count, set_num_routes)
314356
logger.info(
315357
"IP route utilization before test start: Used: {}, Available: {}, Test count: {}".format(
316358
used_routes_count, avail_routes_count, num_routes

0 commit comments

Comments
 (0)