Skip to content

Commit 8eea92e

Browse files
[202205][counters] Revert PR sonic-net#2432 for the buffer queue/pg counters improvement (sonic-net#2462)
* Revert "[202205][counters] Improve performance by polling only configured ports buffer queue/pg counters (sonic-net#2432)" This reverts commit 2c5116e. Because the community test test_iface_namingmode.py is not passing with this feature.
1 parent 5d8636a commit 8eea92e

12 files changed

+230
-591
lines changed

orchagent/bufferorch.cpp

+1-31
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "tokenize.h"
22
#include "bufferorch.h"
3-
#include "directory.h"
43
#include "logger.h"
54
#include "sai_serialize.h"
65
#include "warm_restart.h"
@@ -17,7 +16,6 @@ extern sai_switch_api_t *sai_switch_api;
1716
extern sai_buffer_api_t *sai_buffer_api;
1817

1918
extern PortsOrch *gPortsOrch;
20-
extern Directory<Orch*> gDirectory;
2119
extern sai_object_id_t gSwitchId;
2220

2321
#define BUFFER_POOL_WATERMARK_FLEX_STAT_COUNTER_POLL_MSECS "60000"
@@ -817,20 +815,6 @@ task_process_status BufferOrch::processQueue(KeyOpFieldsValuesTuple &tuple)
817815
return handle_status;
818816
}
819817
}
820-
// create/remove a port queue counter for the queue buffer
821-
else
822-
{
823-
auto flexCounterOrch = gDirectory.get<FlexCounterOrch*>();
824-
auto queues = tokens[1];
825-
if (op == SET_COMMAND && flexCounterOrch->getQueueCountersState())
826-
{
827-
gPortsOrch->createPortBufferQueueCounters(port, queues);
828-
}
829-
else if (op == DEL_COMMAND && flexCounterOrch->getQueueCountersState())
830-
{
831-
gPortsOrch->removePortBufferQueueCounters(port, queues);
832-
}
833-
}
834818
}
835819

836820
/* when we apply buffer configuration we need to increase the ref counter of this port
@@ -923,7 +907,7 @@ task_process_status BufferOrch::processPriorityGroup(KeyOpFieldsValuesTuple &tup
923907
if (op == SET_COMMAND)
924908
{
925909
ref_resolve_status resolve_result = resolveFieldRefValue(m_buffer_type_maps, buffer_profile_field_name,
926-
buffer_to_ref_table_map.at(buffer_profile_field_name), tuple,
910+
buffer_to_ref_table_map.at(buffer_profile_field_name), tuple,
927911
sai_buffer_profile, buffer_profile_name);
928912
if (ref_resolve_status::success != resolve_result)
929913
{
@@ -996,20 +980,6 @@ task_process_status BufferOrch::processPriorityGroup(KeyOpFieldsValuesTuple &tup
996980
return handle_status;
997981
}
998982
}
999-
// create or remove a port PG counter for the PG buffer
1000-
else
1001-
{
1002-
auto flexCounterOrch = gDirectory.get<FlexCounterOrch*>();
1003-
auto pgs = tokens[1];
1004-
if (op == SET_COMMAND && flexCounterOrch->getPgWatermarkCountersState())
1005-
{
1006-
gPortsOrch->createPortBufferPgCounters(port, pgs);
1007-
}
1008-
else if (op == DEL_COMMAND && flexCounterOrch->getPgWatermarkCountersState())
1009-
{
1010-
gPortsOrch->removePortBufferPgCounters(port, pgs);
1011-
}
1012-
}
1013983
}
1014984
}
1015985

orchagent/flexcounterorch.cpp

+2-179
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
#include "debugcounterorch.h"
1111
#include "directory.h"
1212
#include "copporch.h"
13-
#include <swss/tokenize.h>
1413
#include "routeorch.h"
1514
#include "macsecorch.h"
1615
#include "flowcounterrouteorch.h"
@@ -63,8 +62,6 @@ unordered_map<string, string> flexCounterGroupMap =
6362
FlexCounterOrch::FlexCounterOrch(DBConnector *db, vector<string> &tableNames):
6463
Orch(db, tableNames),
6564
m_flexCounterConfigTable(db, CFG_FLEX_COUNTER_TABLE_NAME),
66-
m_bufferQueueConfigTable(db, CFG_BUFFER_QUEUE_TABLE_NAME),
67-
m_bufferPgConfigTable(db, CFG_BUFFER_PG_TABLE_NAME),
6865
m_flexCounterDb(new DBConnector("FLEX_COUNTER_DB", 0)),
6966
m_flexCounterGroupTable(new ProducerTable(m_flexCounterDb.get(), FLEX_COUNTER_GROUP_TABLE)),
7067
m_gbflexCounterDb(new DBConnector("GB_FLEX_COUNTER_DB", 0)),
@@ -160,13 +157,11 @@ void FlexCounterOrch::doTask(Consumer &consumer)
160157
}
161158
else if(key == QUEUE_KEY)
162159
{
163-
gPortsOrch->generateQueueMap(getQueueConfigurations());
164-
m_queue_enabled = true;
160+
gPortsOrch->generateQueueMap();
165161
}
166162
else if(key == PG_WATERMARK_KEY)
167163
{
168-
gPortsOrch->generatePriorityGroupMap(getPgConfigurations());
169-
m_pg_watermark_enabled = true;
164+
gPortsOrch->generatePriorityGroupMap();
170165
}
171166
}
172167
if(gIntfsOrch && (key == RIF_KEY) && (value == "enable"))
@@ -250,16 +245,6 @@ bool FlexCounterOrch::getPortBufferDropCountersState() const
250245
return m_port_buffer_drop_counter_enabled;
251246
}
252247

253-
bool FlexCounterOrch::getPgWatermarkCountersState() const
254-
{
255-
return m_pg_watermark_enabled;
256-
}
257-
258-
bool FlexCounterOrch::getQueueCountersState() const
259-
{
260-
return m_queue_enabled;
261-
}
262-
263248
bool FlexCounterOrch::bake()
264249
{
265250
/*
@@ -301,165 +286,3 @@ bool FlexCounterOrch::bake()
301286
Consumer* consumer = dynamic_cast<Consumer *>(getExecutor(CFG_FLEX_COUNTER_TABLE_NAME));
302287
return consumer->addToSync(entries);
303288
}
304-
305-
map<string, FlexCounterQueueStates> FlexCounterOrch::getQueueConfigurations()
306-
{
307-
SWSS_LOG_ENTER();
308-
309-
map<string, FlexCounterQueueStates> queuesStateVector;
310-
std::vector<std::string> portQueueKeys;
311-
m_bufferQueueConfigTable.getKeys(portQueueKeys);
312-
313-
for (const auto& portQueueKey : portQueueKeys)
314-
{
315-
auto toks = tokenize(portQueueKey, '|');
316-
if (toks.size() != 2)
317-
{
318-
SWSS_LOG_ERROR("Invalid BUFFER_QUEUE key: [%s]", portQueueKey.c_str());
319-
continue;
320-
}
321-
322-
auto configPortNames = tokenize(toks[0], ',');
323-
auto configPortQueues = toks[1];
324-
toks = tokenize(configPortQueues, '-');
325-
326-
for (const auto& configPortName : configPortNames)
327-
{
328-
uint32_t maxQueueNumber = gPortsOrch->getNumberOfPortSupportedQueueCounters(configPortName);
329-
uint32_t maxQueueIndex = maxQueueNumber - 1;
330-
uint32_t minQueueIndex = 0;
331-
332-
if (!queuesStateVector.count(configPortName))
333-
{
334-
FlexCounterQueueStates flexCounterQueueState(maxQueueNumber);
335-
queuesStateVector.insert(make_pair(configPortName, flexCounterQueueState));
336-
}
337-
338-
try {
339-
auto startIndex = to_uint<uint32_t>(toks[0], minQueueIndex, maxQueueIndex);
340-
if (toks.size() > 1)
341-
{
342-
auto endIndex = to_uint<uint32_t>(toks[1], minQueueIndex, maxQueueIndex);
343-
queuesStateVector.at(configPortName).enableQueueCounters(startIndex, endIndex);
344-
}
345-
else
346-
{
347-
queuesStateVector.at(configPortName).enableQueueCounter(startIndex);
348-
}
349-
} catch (std::invalid_argument const& e) {
350-
SWSS_LOG_ERROR("Invalid queue index [%s] for port [%s]", configPortQueues.c_str(), configPortName.c_str());
351-
continue;
352-
}
353-
}
354-
}
355-
356-
return queuesStateVector;
357-
}
358-
359-
map<string, FlexCounterPgStates> FlexCounterOrch::getPgConfigurations()
360-
{
361-
SWSS_LOG_ENTER();
362-
363-
map<string, FlexCounterPgStates> pgsStateVector;
364-
std::vector<std::string> portPgKeys;
365-
m_bufferPgConfigTable.getKeys(portPgKeys);
366-
367-
for (const auto& portPgKey : portPgKeys)
368-
{
369-
auto toks = tokenize(portPgKey, '|');
370-
if (toks.size() != 2)
371-
{
372-
SWSS_LOG_ERROR("Invalid BUFFER_PG key: [%s]", portPgKey.c_str());
373-
continue;
374-
}
375-
376-
auto configPortNames = tokenize(toks[0], ',');
377-
auto configPortPgs = toks[1];
378-
toks = tokenize(configPortPgs, '-');
379-
380-
for (const auto& configPortName : configPortNames)
381-
{
382-
uint32_t maxPgNumber = gPortsOrch->getNumberOfPortSupportedPgCounters(configPortName);
383-
uint32_t maxPgIndex = maxPgNumber - 1;
384-
uint32_t minPgIndex = 0;
385-
386-
if (!pgsStateVector.count(configPortName))
387-
{
388-
FlexCounterPgStates flexCounterPgState(maxPgNumber);
389-
pgsStateVector.insert(make_pair(configPortName, flexCounterPgState));
390-
}
391-
392-
try {
393-
auto startIndex = to_uint<uint32_t>(toks[0], minPgIndex, maxPgIndex);
394-
if (toks.size() > 1)
395-
{
396-
auto endIndex = to_uint<uint32_t>(toks[1], minPgIndex, maxPgIndex);
397-
pgsStateVector.at(configPortName).enablePgCounters(startIndex, endIndex);
398-
}
399-
else
400-
{
401-
pgsStateVector.at(configPortName).enablePgCounter(startIndex);
402-
}
403-
} catch (std::invalid_argument const& e) {
404-
SWSS_LOG_ERROR("Invalid pg index [%s] for port [%s]", configPortPgs.c_str(), configPortName.c_str());
405-
continue;
406-
}
407-
}
408-
}
409-
410-
return pgsStateVector;
411-
}
412-
413-
FlexCounterQueueStates::FlexCounterQueueStates(uint32_t maxQueueNumber)
414-
{
415-
SWSS_LOG_ENTER();
416-
m_queueStates.resize(maxQueueNumber, false);
417-
}
418-
419-
bool FlexCounterQueueStates::isQueueCounterEnabled(uint32_t index) const
420-
{
421-
SWSS_LOG_ENTER();
422-
return m_queueStates[index];
423-
}
424-
425-
void FlexCounterQueueStates::enableQueueCounters(uint32_t startIndex, uint32_t endIndex)
426-
{
427-
SWSS_LOG_ENTER();
428-
for (uint32_t queueIndex = startIndex; queueIndex <= endIndex; queueIndex++)
429-
{
430-
enableQueueCounter(queueIndex);
431-
}
432-
}
433-
434-
void FlexCounterQueueStates::enableQueueCounter(uint32_t queueIndex)
435-
{
436-
SWSS_LOG_ENTER();
437-
m_queueStates[queueIndex] = true;
438-
}
439-
440-
FlexCounterPgStates::FlexCounterPgStates(uint32_t maxPgNumber)
441-
{
442-
SWSS_LOG_ENTER();
443-
m_pgStates.resize(maxPgNumber, false);
444-
}
445-
446-
bool FlexCounterPgStates::isPgCounterEnabled(uint32_t index) const
447-
{
448-
SWSS_LOG_ENTER();
449-
return m_pgStates[index];
450-
}
451-
452-
void FlexCounterPgStates::enablePgCounters(uint32_t startIndex, uint32_t endIndex)
453-
{
454-
SWSS_LOG_ENTER();
455-
for (uint32_t pgIndex = startIndex; pgIndex <= endIndex; pgIndex++)
456-
{
457-
enablePgCounter(pgIndex);
458-
}
459-
}
460-
461-
void FlexCounterPgStates::enablePgCounter(uint32_t pgIndex)
462-
{
463-
SWSS_LOG_ENTER();
464-
m_pgStates[pgIndex] = true;
465-
}

orchagent/flexcounterorch.h

-32
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,6 @@ extern "C" {
1010
#include "sai.h"
1111
}
1212

13-
class FlexCounterQueueStates
14-
{
15-
public:
16-
FlexCounterQueueStates(uint32_t maxQueueNumber);
17-
bool isQueueCounterEnabled(uint32_t index) const;
18-
void enableQueueCounters(uint32_t startIndex, uint32_t endIndex);
19-
void enableQueueCounter(uint32_t queueIndex);
20-
21-
private:
22-
std::vector<bool> m_queueStates{};
23-
};
24-
25-
class FlexCounterPgStates
26-
{
27-
public:
28-
FlexCounterPgStates(uint32_t maxPgNumber);
29-
bool isPgCounterEnabled(uint32_t index) const;
30-
void enablePgCounters(uint32_t startIndex, uint32_t endIndex);
31-
void enablePgCounter(uint32_t pgIndex);
32-
33-
private:
34-
std::vector<bool> m_pgStates{};
35-
};
36-
3713
class FlexCounterOrch: public Orch
3814
{
3915
public:
@@ -42,10 +18,6 @@ class FlexCounterOrch: public Orch
4218
virtual ~FlexCounterOrch(void);
4319
bool getPortCountersState() const;
4420
bool getPortBufferDropCountersState() const;
45-
bool getPgWatermarkCountersState() const;
46-
bool getQueueCountersState() const;
47-
std::map<std::string, FlexCounterQueueStates> getQueueConfigurations();
48-
std::map<std::string, FlexCounterPgStates> getPgConfigurations();
4921
bool getHostIfTrapCounterState() const {return m_hostif_trap_counter_enabled;}
5022
bool getRouteFlowCountersState() const {return m_route_flow_counter_enabled;}
5123
bool bake() override;
@@ -57,13 +29,9 @@ class FlexCounterOrch: public Orch
5729
shared_ptr<ProducerTable> m_gbflexCounterGroupTable = nullptr;
5830
bool m_port_counter_enabled = false;
5931
bool m_port_buffer_drop_counter_enabled = false;
60-
bool m_pg_watermark_enabled = false;
61-
bool m_queue_enabled = false;
6232
bool m_hostif_trap_counter_enabled = false;
6333
bool m_route_flow_counter_enabled = false;
6434
Table m_flexCounterConfigTable;
65-
Table m_bufferQueueConfigTable;
66-
Table m_bufferPgConfigTable;
6735
};
6836

6937
#endif

orchagent/p4orch/tests/fake_portorch.cpp

+10-26
Original file line numberDiff line numberDiff line change
@@ -181,35 +181,11 @@ bool PortsOrch::setPortPfc(sai_object_id_t portId, uint8_t pfc_bitmask)
181181
return true;
182182
}
183183

184-
void PortsOrch::generateQueueMap(std::map<string, FlexCounterQueueStates> queuesStateVector)
184+
void PortsOrch::generateQueueMap()
185185
{
186186
}
187187

188-
void PortsOrch::generateQueueMapPerPort(const Port& port, FlexCounterQueueStates& queuesState)
189-
{
190-
}
191-
192-
void PortsOrch::createPortBufferQueueCounters(const Port &port, string queues)
193-
{
194-
}
195-
196-
void PortsOrch::removePortBufferQueueCounters(const Port &port, string queues)
197-
{
198-
}
199-
200-
void PortsOrch::generatePriorityGroupMap(std::map<string, FlexCounterPgStates> pgsStateVector)
201-
{
202-
}
203-
204-
void PortsOrch::generatePriorityGroupMapPerPort(const Port& port, FlexCounterPgStates& pgsState)
205-
{
206-
}
207-
208-
void PortsOrch::createPortBufferPgCounters(const Port& port, string pgs)
209-
{
210-
}
211-
212-
void PortsOrch::removePortBufferPgCounters(const Port& port, string pgs)
188+
void PortsOrch::generatePriorityGroupMap()
213189
{
214190
}
215191

@@ -605,6 +581,14 @@ bool PortsOrch::getQueueTypeAndIndex(sai_object_id_t queue_id, string &type, uin
605581
return true;
606582
}
607583

584+
void PortsOrch::generateQueueMapPerPort(const Port &port)
585+
{
586+
}
587+
588+
void PortsOrch::generatePriorityGroupMapPerPort(const Port &port)
589+
{
590+
}
591+
608592
task_process_status PortsOrch::setPortAutoNeg(sai_object_id_t id, int an)
609593
{
610594
return task_success;

0 commit comments

Comments
 (0)