Skip to content

Commit 003cf24

Browse files
authored
[dvs] Refactor and add buffer pool wm test (sonic-net#1446)
Signed-off-by: Neetha John <nejo@microsoft.com>
1 parent 2f5d2d9 commit 003cf24

File tree

1 file changed

+90
-47
lines changed

1 file changed

+90
-47
lines changed

tests/test_watermark.py

+90-47
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class SaiWmStats:
1111
queue_shared = "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES"
1212
pg_shared = "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES"
1313
pg_headroom = "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES"
14+
buffer_pool = "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES"
1415

1516

1617
class WmTables:
@@ -19,13 +20,19 @@ class WmTables:
1920
user = "USER_WATERMARKS"
2021

2122

23+
class WmFCEntry:
24+
queue_stats_entry = {"QUEUE_COUNTER_ID_LIST": SaiWmStats.queue_shared}
25+
pg_stats_entry = {"PG_COUNTER_ID_LIST": "{},{}".format(SaiWmStats.pg_shared, SaiWmStats.pg_headroom)}
26+
buffer_stats_entry = {"BUFFER_POOL_COUNTER_ID_LIST": SaiWmStats.buffer_pool}
27+
28+
2229
class TestWatermark(object):
2330

2431
DEFAULT_TELEMETRY_INTERVAL = 120
2532
NEW_INTERVAL = 5
2633
DEFAULT_POLL_INTERVAL = 10
2734

28-
def setup_db(self, dvs):
35+
def setup_dbs(self, dvs):
2936
self.asic_db = dvs.get_asic_db()
3037
self.counters_db = dvs.get_counters_db()
3138
self.config_db = dvs.get_config_db()
@@ -58,7 +65,12 @@ def populate_asic(self, dvs, obj_type, attr, val):
5865

5966
db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0)
6067

61-
oids = self.qs if obj_type == "SAI_OBJECT_TYPE_QUEUE" else self.pgs
68+
if obj_type == "SAI_OBJECT_TYPE_QUEUE":
69+
oids = self.qs
70+
elif obj_type == "SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP":
71+
oids = self.pgs
72+
else:
73+
oids = self.buffers
6274

6375
for obj_id in oids:
6476
self.set_counter(dvs, obj_type, obj_id, attr, val)
@@ -67,6 +79,7 @@ def populate_asic_all(self, dvs, val):
6779
self.populate_asic(dvs, "SAI_OBJECT_TYPE_QUEUE", SaiWmStats.queue_shared, val)
6880
self.populate_asic(dvs, "SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP", SaiWmStats.pg_shared, val)
6981
self.populate_asic(dvs, "SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP", SaiWmStats.pg_headroom, val)
82+
self.populate_asic(dvs, "SAI_OBJECT_TYPE_BUFFER_POOL", SaiWmStats.buffer_pool, val)
7083
time.sleep(self.DEFAULT_POLL_INTERVAL)
7184

7285
def verify_value(self, dvs, obj_ids, table_name, watermark_name, expected_value):
@@ -89,18 +102,20 @@ def verify_value(self, dvs, obj_ids, table_name, watermark_name, expected_value)
89102
assert found, "no such watermark found"
90103

91104
def set_up_flex_counter(self, dvs):
92-
queue_stats_entry = {"QUEUE_COUNTER_ID_LIST": "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES"}
93105
for q in self.qs:
94106
self.flex_db.create_entry("FLEX_COUNTER_TABLE",
95107
"QUEUE_WATERMARK_STAT_COUNTER:{}".format(q),
96-
queue_stats_entry)
108+
WmFCEntry.queue_stats_entry)
97109

98-
pg_stats_entry = {"PG_COUNTER_ID_LIST":
99-
"SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES,SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES"}
100110
for pg in self.pgs:
101111
self.flex_db.create_entry("FLEX_COUNTER_TABLE",
102112
"PG_WATERMARK_STAT_COUNTER:{}".format(pg),
103-
pg_stats_entry)
113+
WmFCEntry.pg_stats_entry)
114+
115+
for buffer in self.buffers:
116+
self.flex_db.create_entry("FLEX_COUNTER_TABLE",
117+
"BUFFER_POOL_WATERMARK_STAT_COUNTER:{}".format(buffer),
118+
WmFCEntry.buffer_stats_entry)
104119

105120
fc_status_enable = {"FLEX_COUNTER_STATUS": "enable"}
106121
self.config_db.create_entry("FLEX_COUNTER_TABLE",
@@ -109,16 +124,33 @@ def set_up_flex_counter(self, dvs):
109124
self.config_db.create_entry("FLEX_COUNTER_TABLE",
110125
"QUEUE_WATERMARK",
111126
fc_status_enable)
127+
self.config_db.create_entry("FLEX_COUNTER_TABLE",
128+
"BUFFER_POOL_WATERMARK",
129+
fc_status_enable)
130+
131+
self.populate_asic_all(dvs, "0")
132+
133+
def clear_flex_counter(self, dvs):
134+
for q in self.qs:
135+
self.flex_db.delete_entry("FLEX_COUNTER_TABLE",
136+
"QUEUE_WATERMARK_STAT_COUNTER:{}".format(q))
137+
138+
for pg in self.pgs:
139+
self.flex_db.delete_entry("FLEX_COUNTER_TABLE",
140+
"PG_WATERMARK_STAT_COUNTER:{}".format(pg))
112141

113-
self.populate_asic(dvs, "SAI_OBJECT_TYPE_QUEUE", SaiWmStats.queue_shared, "0")
114-
self.populate_asic(dvs, "SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP", SaiWmStats.pg_shared, "0")
115-
self.populate_asic(dvs, "SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP", SaiWmStats.pg_headroom, "0")
142+
for buffer in self.buffers:
143+
self.flex_db.delete_entry("FLEX_COUNTER_TABLE",
144+
"BUFFER_POOL_WATERMARK_STAT_COUNTER:{}".format(buffer))
116145

117-
time.sleep(self.DEFAULT_TELEMETRY_INTERVAL*2)
146+
self.config_db.delete_entry("FLEX_COUNTER_TABLE", "PG_WATERMARK")
147+
self.config_db.delete_entry("FLEX_COUNTER_TABLE", "QUEUE_WATERMARK")
148+
self.config_db.delete_entry("FLEX_COUNTER_TABLE", "BUFFER_POOL_WATERMARK")
118149

119150
def set_up(self, dvs):
120151
self.qs = self.asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_QUEUE")
121152
self.pgs = self.asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP")
153+
self.buffers = self.asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_BUFFER_POOL")
122154

123155
db = swsscommon.DBConnector(swsscommon.COUNTERS_DB, dvs.redis_sock, 0)
124156
tbl = swsscommon.Table(db, "COUNTERS_QUEUE_TYPE_MAP")
@@ -135,67 +167,78 @@ def set_up(self, dvs):
135167
self.mc_q.append(q)
136168

137169
def test_telemetry_period(self, dvs):
138-
self.setup_db(dvs)
170+
self.setup_dbs(dvs)
139171
self.set_up(dvs)
140-
self.set_up_flex_counter(dvs)
141-
self.enable_unittests(dvs, "true")
172+
try:
173+
self.set_up_flex_counter(dvs)
174+
self.enable_unittests(dvs, "true")
142175

143-
self.populate_asic_all(dvs, "100")
176+
self.populate_asic_all(dvs, "100")
144177

145-
time.sleep(self.DEFAULT_TELEMETRY_INTERVAL + 1)
178+
time.sleep(self.DEFAULT_TELEMETRY_INTERVAL + 1)
146179

147-
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_shared, "0")
148-
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_headroom, "0")
149-
self.verify_value(dvs, self.qs, WmTables.periodic, SaiWmStats.queue_shared, "0")
180+
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_shared, "0")
181+
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_headroom, "0")
182+
self.verify_value(dvs, self.qs, WmTables.periodic, SaiWmStats.queue_shared, "0")
183+
self.verify_value(dvs, self.buffers, WmTables.periodic, SaiWmStats.buffer_pool, "0")
150184

151-
self.populate_asic_all(dvs, "123")
185+
self.populate_asic_all(dvs, "123")
152186

153-
dvs.runcmd("config watermark telemetry interval {}".format(5))
187+
dvs.runcmd("config watermark telemetry interval {}".format(5))
154188

155-
time.sleep(self.DEFAULT_TELEMETRY_INTERVAL + 1)
156-
time.sleep(self.NEW_INTERVAL + 1)
189+
time.sleep(self.DEFAULT_TELEMETRY_INTERVAL + 1)
190+
time.sleep(self.NEW_INTERVAL + 1)
157191

158-
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_shared, "0")
159-
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_headroom, "0")
160-
self.verify_value(dvs, self.qs, WmTables.periodic, SaiWmStats.queue_shared, "0")
192+
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_shared, "0")
193+
self.verify_value(dvs, self.pgs, WmTables.periodic, SaiWmStats.pg_headroom, "0")
194+
self.verify_value(dvs, self.qs, WmTables.periodic, SaiWmStats.queue_shared, "0")
195+
self.verify_value(dvs, self.buffers, WmTables.periodic, SaiWmStats.buffer_pool, "0")
161196

162-
self.enable_unittests(dvs, "false")
197+
finally:
198+
self.clear_flex_counter(dvs)
199+
self.enable_unittests(dvs, "false")
163200

164201
@pytest.mark.skip(reason="This test is not stable enough")
165202
def test_lua_plugins(self, dvs):
166203

167-
self.setup_db(dvs)
204+
self.setup_dbs(dvs)
168205
self.set_up(dvs)
169-
self.set_up_flex_counter(dvs)
170-
self.enable_unittests(dvs, "true")
206+
try:
207+
self.set_up_flex_counter(dvs)
208+
self.enable_unittests(dvs, "true")
171209

172-
self.populate_asic_all(dvs, "192")
210+
self.populate_asic_all(dvs, "192")
173211

174-
for table_name in [WmTables.user, WmTables.persistent]:
175-
self.verify_value(dvs, self.qs, table_name, SaiWmStats.queue_shared, "192")
176-
self.verify_value(dvs, self.pgs, table_name, SaiWmStats.pg_headroom, "192")
177-
self.verify_value(dvs, self.pgs, table_name, SaiWmStats.pg_shared, "192")
212+
for table_name in [WmTables.user, WmTables.persistent]:
213+
self.verify_value(dvs, self.selected_qs, table_name, SaiWmStats.queue_shared, "192")
214+
self.verify_value(dvs, self.selected_pgs, table_name, SaiWmStats.pg_headroom, "192")
215+
self.verify_value(dvs, self.selected_pgs, table_name, SaiWmStats.pg_shared, "192")
216+
self.verify_value(dvs, self.buffers, table_name, SaiWmStats.buffer_pool, "192")
178217

179-
self.populate_asic_all(dvs, "96")
218+
self.populate_asic_all(dvs, "96")
180219

181-
for table_name in [WmTables.user, WmTables.persistent]:
182-
self.verify_value(dvs, self.qs, table_name, SaiWmStats.queue_shared, "192")
183-
self.verify_value(dvs, self.pgs, table_name, SaiWmStats.pg_headroom, "192")
184-
self.verify_value(dvs, self.pgs, table_name, SaiWmStats.pg_shared, "192")
220+
for table_name in [WmTables.user, WmTables.persistent]:
221+
self.verify_value(dvs, self.selected_qs, table_name, SaiWmStats.queue_shared, "192")
222+
self.verify_value(dvs, self.selected_pgs, table_name, SaiWmStats.pg_headroom, "192")
223+
self.verify_value(dvs, self.selected_pgs, table_name, SaiWmStats.pg_shared, "192")
224+
self.verify_value(dvs, self.buffers, table_name, SaiWmStats.buffer_pool, "192")
185225

186-
self.populate_asic_all(dvs, "288")
226+
self.populate_asic_all(dvs, "288")
187227

188-
for table_name in [WmTables.user, WmTables.persistent]:
189-
self.verify_value(dvs, self.qs, table_name, SaiWmStats.queue_shared, "288")
190-
self.verify_value(dvs, self.pgs, table_name, SaiWmStats.pg_headroom, "288")
191-
self.verify_value(dvs, self.pgs, table_name, SaiWmStats.pg_shared, "288")
228+
for table_name in [WmTables.user, WmTables.persistent]:
229+
self.verify_value(dvs, self.selected_qs, table_name, SaiWmStats.queue_shared, "288")
230+
self.verify_value(dvs, self.selected_pgs, table_name, SaiWmStats.pg_headroom, "288")
231+
self.verify_value(dvs, self.selected_pgs, table_name, SaiWmStats.pg_shared, "288")
232+
self.verify_value(dvs, self.buffers, table_name, SaiWmStats.buffer_pool, "288")
192233

193-
self.enable_unittests(dvs, "false")
234+
finally:
235+
self.clear_flex_counter(dvs)
236+
self.enable_unittests(dvs, "false")
194237

195238
@pytest.mark.skip(reason="This test is not stable enough")
196239
def test_clear(self, dvs):
197240

198-
self.setup_db(dvs)
241+
self.setup_dbs(dvs)
199242
self.set_up(dvs)
200243
self.enable_unittests(dvs, "true")
201244

0 commit comments

Comments
 (0)