Skip to content

Commit

Permalink
[buffers] Add handler for "create_only_config_db_buffers" configurati…
Browse files Browse the repository at this point in the history
…on knob

Signed-off-by: vadymhlushko-mlnx <[email protected]>
  • Loading branch information
vadymhlushko-mlnx committed Aug 23, 2023
1 parent 3e2974d commit 147fc9b
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 0 deletions.
39 changes: 39 additions & 0 deletions orchagent/flexcounterorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ FlexCounterOrch::FlexCounterOrch(DBConnector *db, vector<string> &tableNames):
m_flexCounterConfigTable(db, CFG_FLEX_COUNTER_TABLE_NAME),
m_bufferQueueConfigTable(db, CFG_BUFFER_QUEUE_TABLE_NAME),
m_bufferPgConfigTable(db, CFG_BUFFER_PG_TABLE_NAME),
m_deviceMetadataConfigTable(db, CFG_DEVICE_METADATA_TABLE_NAME),
m_flexCounterDb(new DBConnector("FLEX_COUNTER_DB", 0)),
m_flexCounterGroupTable(new ProducerTable(m_flexCounterDb.get(), FLEX_COUNTER_GROUP_TABLE)),
m_gbflexCounterDb(new DBConnector("GB_FLEX_COUNTER_DB", 0)),
Expand Down Expand Up @@ -329,11 +330,41 @@ bool FlexCounterOrch::bake()
return consumer->addToSync(entries);
}

static bool isCreateOnlyConfigDbBuffers(Table& deviceMetadataConfigTable)
{
std::string createOnlyConfigDbBuffersValue;

try
{
if (deviceMetadataConfigTable.hget("localhost", "create_only_config_db_buffers", createOnlyConfigDbBuffersValue))
{
if (createOnlyConfigDbBuffersValue == "true")
{
return true;
}
}
}
catch(const std::system_error& e)
{
SWSS_LOG_ERROR("System error: %s", e.what());
}

return false;
}

map<string, FlexCounterQueueStates> FlexCounterOrch::getQueueConfigurations()
{
SWSS_LOG_ENTER();

map<string, FlexCounterQueueStates> queuesStateVector;

if (!isCreateOnlyConfigDbBuffers(m_deviceMetadataConfigTable))
{
FlexCounterQueueStates flexCounterQueueState(0);
queuesStateVector.insert(make_pair(createAllAvailableBuffersStr, flexCounterQueueState));
return queuesStateVector;
}

std::vector<std::string> portQueueKeys;
m_bufferQueueConfigTable.getKeys(portQueueKeys);

Expand Down Expand Up @@ -393,6 +424,14 @@ map<string, FlexCounterPgStates> FlexCounterOrch::getPgConfigurations()
SWSS_LOG_ENTER();

map<string, FlexCounterPgStates> pgsStateVector;

if (!isCreateOnlyConfigDbBuffers(m_deviceMetadataConfigTable))
{
FlexCounterPgStates flexCounterPgState(0);
pgsStateVector.insert(make_pair(createAllAvailableBuffersStr, flexCounterPgState));
return pgsStateVector;
}

std::vector<std::string> portPgKeys;
m_bufferPgConfigTable.getKeys(portPgKeys);

Expand Down
3 changes: 3 additions & 0 deletions orchagent/flexcounterorch.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ extern "C" {
#include "sai.h"
}

const std::string createAllAvailableBuffersStr = "create_all_available_buffers";

class FlexCounterQueueStates
{
public:
Expand Down Expand Up @@ -68,6 +70,7 @@ class FlexCounterOrch: public Orch
Table m_flexCounterConfigTable;
Table m_bufferQueueConfigTable;
Table m_bufferPgConfigTable;
Table m_deviceMetadataConfigTable;
};

#endif
76 changes: 76 additions & 0 deletions orchagent/portsorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6072,6 +6072,14 @@ void PortsOrch::generateQueueMap(map<string, FlexCounterQueueStates> queuesState
return;
}

bool isCreateAllQueues = false;

if (queuesStateVector.count(createAllAvailableBuffersStr))
{
isCreateAllQueues = true;
queuesStateVector.clear();
}

for (const auto& it: m_portList)
{
if (it.second.m_type == Port::PHY)
Expand All @@ -6080,6 +6088,10 @@ void PortsOrch::generateQueueMap(map<string, FlexCounterQueueStates> queuesState
{
auto maxQueueNumber = getNumberOfPortSupportedQueueCounters(it.second.m_alias);
FlexCounterQueueStates flexCounterQueueState(maxQueueNumber);
if (isCreateAllQueues)
{
flexCounterQueueState.enableQueueCounters(0, maxQueueNumber - 1);
}
queuesStateVector.insert(make_pair(it.second.m_alias, flexCounterQueueState));
}
generateQueueMapPerPort(it.second, queuesStateVector.at(it.second.m_alias), false);
Expand All @@ -6094,6 +6106,10 @@ void PortsOrch::generateQueueMap(map<string, FlexCounterQueueStates> queuesState
{
auto maxQueueNumber = getNumberOfPortSupportedQueueCounters(it.second.m_alias);
FlexCounterQueueStates flexCounterQueueState(maxQueueNumber);
if (isCreateAllQueues)
{
flexCounterQueueState.enableQueueCounters(0, maxQueueNumber - 1);
}
queuesStateVector.insert(make_pair(it.second.m_alias, flexCounterQueueState));
}

Expand Down Expand Up @@ -6198,6 +6214,14 @@ void PortsOrch::addQueueFlexCounters(map<string, FlexCounterQueueStates> queuesS
return;
}

bool isCreateAllQueues = false;

if (queuesStateVector.count(createAllAvailableBuffersStr))
{
isCreateAllQueues = true;
queuesStateVector.clear();
}

for (const auto& it: m_portList)
{
if (it.second.m_type == Port::PHY)
Expand All @@ -6206,6 +6230,10 @@ void PortsOrch::addQueueFlexCounters(map<string, FlexCounterQueueStates> queuesS
{
auto maxQueueNumber = getNumberOfPortSupportedQueueCounters(it.second.m_alias);
FlexCounterQueueStates flexCounterQueueState(maxQueueNumber);
if (isCreateAllQueues)
{
flexCounterQueueState.enableQueueCounters(0, maxQueueNumber - 1);
}
queuesStateVector.insert(make_pair(it.second.m_alias, flexCounterQueueState));
}
addQueueFlexCountersPerPort(it.second, queuesStateVector.at(it.second.m_alias));
Expand Down Expand Up @@ -6263,6 +6291,14 @@ void PortsOrch::addQueueWatermarkFlexCounters(map<string, FlexCounterQueueStates
return;
}

bool isCreateAllQueues = false;

if (queuesStateVector.count(createAllAvailableBuffersStr))
{
isCreateAllQueues = true;
queuesStateVector.clear();
}

for (const auto& it: m_portList)
{
if (it.second.m_type == Port::PHY)
Expand All @@ -6271,6 +6307,10 @@ void PortsOrch::addQueueWatermarkFlexCounters(map<string, FlexCounterQueueStates
{
auto maxQueueNumber = getNumberOfPortSupportedQueueCounters(it.second.m_alias);
FlexCounterQueueStates flexCounterQueueState(maxQueueNumber);
if (isCreateAllQueues)
{
flexCounterQueueState.enableQueueCounters(0, maxQueueNumber - 1);
}
queuesStateVector.insert(make_pair(it.second.m_alias, flexCounterQueueState));
}
addQueueWatermarkFlexCountersPerPort(it.second, queuesStateVector.at(it.second.m_alias));
Expand Down Expand Up @@ -6434,6 +6474,14 @@ void PortsOrch::generatePriorityGroupMap(map<string, FlexCounterPgStates> pgsSta
return;
}

bool isCreateAllPgs = false;

if (pgsStateVector.count(createAllAvailableBuffersStr))
{
isCreateAllPgs = true;
pgsStateVector.clear();
}

for (const auto& it: m_portList)
{
if (it.second.m_type == Port::PHY)
Expand All @@ -6442,6 +6490,10 @@ void PortsOrch::generatePriorityGroupMap(map<string, FlexCounterPgStates> pgsSta
{
auto maxPgNumber = getNumberOfPortSupportedPgCounters(it.second.m_alias);
FlexCounterPgStates flexCounterPgState(maxPgNumber);
if (isCreateAllPgs)
{
flexCounterPgState.enablePgCounters(0, maxPgNumber - 1);
}
pgsStateVector.insert(make_pair(it.second.m_alias, flexCounterPgState));
}
generatePriorityGroupMapPerPort(it.second, pgsStateVector.at(it.second.m_alias));
Expand Down Expand Up @@ -6538,6 +6590,14 @@ void PortsOrch::addPriorityGroupFlexCounters(map<string, FlexCounterPgStates> pg
return;
}

bool isCreateAllPgs = false;

if (pgsStateVector.count(createAllAvailableBuffersStr))
{
isCreateAllPgs = true;
pgsStateVector.clear();
}

for (const auto& it: m_portList)
{
if (it.second.m_type == Port::PHY)
Expand All @@ -6546,6 +6606,10 @@ void PortsOrch::addPriorityGroupFlexCounters(map<string, FlexCounterPgStates> pg
{
auto maxPgNumber = getNumberOfPortSupportedPgCounters(it.second.m_alias);
FlexCounterPgStates flexCounterPgState(maxPgNumber);
if (isCreateAllPgs)
{
flexCounterPgState.enablePgCounters(0, maxPgNumber - 1);
}
pgsStateVector.insert(make_pair(it.second.m_alias, flexCounterPgState));
}
addPriorityGroupFlexCountersPerPort(it.second, pgsStateVector.at(it.second.m_alias));
Expand Down Expand Up @@ -6595,6 +6659,14 @@ void PortsOrch::addPriorityGroupWatermarkFlexCounters(map<string, FlexCounterPgS
return;
}

bool isCreateAllPgs = false;

if (pgsStateVector.count(createAllAvailableBuffersStr))
{
isCreateAllPgs = true;
pgsStateVector.clear();
}

for (const auto& it: m_portList)
{
if (it.second.m_type == Port::PHY)
Expand All @@ -6603,6 +6675,10 @@ void PortsOrch::addPriorityGroupWatermarkFlexCounters(map<string, FlexCounterPgS
{
auto maxPgNumber = getNumberOfPortSupportedPgCounters(it.second.m_alias);
FlexCounterPgStates flexCounterPgState(maxPgNumber);
if (isCreateAllPgs)
{
flexCounterPgState.enablePgCounters(0, maxPgNumber - 1);
}
pgsStateVector.insert(make_pair(it.second.m_alias, flexCounterPgState));
}
addPriorityGroupWatermarkFlexCountersPerPort(it.second, pgsStateVector.at(it.second.m_alias));
Expand Down

0 comments on commit 147fc9b

Please sign in to comment.