@@ -11,6 +11,7 @@ class SaiWmStats:
11
11
queue_shared = "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES"
12
12
pg_shared = "SAI_INGRESS_PRIORITY_GROUP_STAT_SHARED_WATERMARK_BYTES"
13
13
pg_headroom = "SAI_INGRESS_PRIORITY_GROUP_STAT_XOFF_ROOM_WATERMARK_BYTES"
14
+ buffer_pool = "SAI_BUFFER_POOL_STAT_WATERMARK_BYTES"
14
15
15
16
16
17
class WmTables :
@@ -19,13 +20,19 @@ class WmTables:
19
20
user = "USER_WATERMARKS"
20
21
21
22
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
+
22
29
class TestWatermark (object ):
23
30
24
31
DEFAULT_TELEMETRY_INTERVAL = 120
25
32
NEW_INTERVAL = 5
26
33
DEFAULT_POLL_INTERVAL = 10
27
34
28
- def setup_db (self , dvs ):
35
+ def setup_dbs (self , dvs ):
29
36
self .asic_db = dvs .get_asic_db ()
30
37
self .counters_db = dvs .get_counters_db ()
31
38
self .config_db = dvs .get_config_db ()
@@ -58,7 +65,12 @@ def populate_asic(self, dvs, obj_type, attr, val):
58
65
59
66
db = swsscommon .DBConnector (swsscommon .ASIC_DB , dvs .redis_sock , 0 )
60
67
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
62
74
63
75
for obj_id in oids :
64
76
self .set_counter (dvs , obj_type , obj_id , attr , val )
@@ -67,6 +79,7 @@ def populate_asic_all(self, dvs, val):
67
79
self .populate_asic (dvs , "SAI_OBJECT_TYPE_QUEUE" , SaiWmStats .queue_shared , val )
68
80
self .populate_asic (dvs , "SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP" , SaiWmStats .pg_shared , val )
69
81
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 )
70
83
time .sleep (self .DEFAULT_POLL_INTERVAL )
71
84
72
85
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)
89
102
assert found , "no such watermark found"
90
103
91
104
def set_up_flex_counter (self , dvs ):
92
- queue_stats_entry = {"QUEUE_COUNTER_ID_LIST" : "SAI_QUEUE_STAT_SHARED_WATERMARK_BYTES" }
93
105
for q in self .qs :
94
106
self .flex_db .create_entry ("FLEX_COUNTER_TABLE" ,
95
107
"QUEUE_WATERMARK_STAT_COUNTER:{}" .format (q ),
96
- queue_stats_entry )
108
+ WmFCEntry . queue_stats_entry )
97
109
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" }
100
110
for pg in self .pgs :
101
111
self .flex_db .create_entry ("FLEX_COUNTER_TABLE" ,
102
112
"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 )
104
119
105
120
fc_status_enable = {"FLEX_COUNTER_STATUS" : "enable" }
106
121
self .config_db .create_entry ("FLEX_COUNTER_TABLE" ,
@@ -109,16 +124,33 @@ def set_up_flex_counter(self, dvs):
109
124
self .config_db .create_entry ("FLEX_COUNTER_TABLE" ,
110
125
"QUEUE_WATERMARK" ,
111
126
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 ))
112
141
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 ) )
116
145
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" )
118
149
119
150
def set_up (self , dvs ):
120
151
self .qs = self .asic_db .get_keys ("ASIC_STATE:SAI_OBJECT_TYPE_QUEUE" )
121
152
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" )
122
154
123
155
db = swsscommon .DBConnector (swsscommon .COUNTERS_DB , dvs .redis_sock , 0 )
124
156
tbl = swsscommon .Table (db , "COUNTERS_QUEUE_TYPE_MAP" )
@@ -135,67 +167,78 @@ def set_up(self, dvs):
135
167
self .mc_q .append (q )
136
168
137
169
def test_telemetry_period (self , dvs ):
138
- self .setup_db (dvs )
170
+ self .setup_dbs (dvs )
139
171
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" )
142
175
143
- self .populate_asic_all (dvs , "100" )
176
+ self .populate_asic_all (dvs , "100" )
144
177
145
- time .sleep (self .DEFAULT_TELEMETRY_INTERVAL + 1 )
178
+ time .sleep (self .DEFAULT_TELEMETRY_INTERVAL + 1 )
146
179
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" )
150
184
151
- self .populate_asic_all (dvs , "123" )
185
+ self .populate_asic_all (dvs , "123" )
152
186
153
- dvs .runcmd ("config watermark telemetry interval {}" .format (5 ))
187
+ dvs .runcmd ("config watermark telemetry interval {}" .format (5 ))
154
188
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 )
157
191
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" )
161
196
162
- self .enable_unittests (dvs , "false" )
197
+ finally :
198
+ self .clear_flex_counter (dvs )
199
+ self .enable_unittests (dvs , "false" )
163
200
164
201
@pytest .mark .skip (reason = "This test is not stable enough" )
165
202
def test_lua_plugins (self , dvs ):
166
203
167
- self .setup_db (dvs )
204
+ self .setup_dbs (dvs )
168
205
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" )
171
209
172
- self .populate_asic_all (dvs , "192" )
210
+ self .populate_asic_all (dvs , "192" )
173
211
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" )
178
217
179
- self .populate_asic_all (dvs , "96" )
218
+ self .populate_asic_all (dvs , "96" )
180
219
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" )
185
225
186
- self .populate_asic_all (dvs , "288" )
226
+ self .populate_asic_all (dvs , "288" )
187
227
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" )
192
233
193
- self .enable_unittests (dvs , "false" )
234
+ finally :
235
+ self .clear_flex_counter (dvs )
236
+ self .enable_unittests (dvs , "false" )
194
237
195
238
@pytest .mark .skip (reason = "This test is not stable enough" )
196
239
def test_clear (self , dvs ):
197
240
198
- self .setup_db (dvs )
241
+ self .setup_dbs (dvs )
199
242
self .set_up (dvs )
200
243
self .enable_unittests (dvs , "true" )
201
244
0 commit comments