Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revert "[buffermgr] Support maximum port headroom checking" #1675

Merged
merged 1 commit into from
Mar 21, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions cfgmgr/buffer_check_headroom_mellanox.lua
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,36 @@ local new_pg = ARGV[3]
local accumulative_size = 0

local appl_db = "0"
local config_db = "4"
local state_db = "6"

local ret_true = {}
local ret_false = {}
local ret = {}
local default_ret = {}

table.insert(ret_true, "result:true")
table.insert(ret_false, "result:false")

default_ret = ret_true
-- Fetch the cable length from CONFIG_DB
redis.call('SELECT', config_db)
local cable_length_keys = redis.call('KEYS', 'CABLE_LENGTH*')
if #cable_length_keys == 0 then
return ret_true
end

-- Check whether cable length exceeds 300m (maximum value in the non-dynamic-buffer solution)
local cable_length_str = redis.call('HGET', cable_length_keys[1], port)
if cable_length_str == nil then
return ret_true
end
local cable_length = tonumber(string.sub(cable_length_str, 1, -2))
if cable_length > 300 then
default_ret = ret_false
else
default_ret = ret_true
end
table.insert(default_ret, 'debug:no max_headroom_size configured, check cable length instead')

local speed = redis.call('HGET', 'PORT|' .. port, 'speed')

Expand Down Expand Up @@ -46,6 +67,7 @@ local function get_number_of_pgs(keyname)
local range = string.match(keyname, "Ethernet%d+:([^%s]+)$")
local size
if range == nil then
table.insert(debuginfo, "debug:invalid pg:" .. keyname)
return 0
end
if string.len(range) == 1 then
Expand Down Expand Up @@ -97,9 +119,11 @@ if max_headroom_size > accumulative_size then
table.insert(ret, "result:true")
else
table.insert(ret, "result:false")
table.insert(ret, "debug:Accumulative headroom on port " .. accumulative_size .. " exceeds the maximum available headroom which is " .. max_headroom_size)
end

table.insert(ret, "debug:max headroom:" .. max_headroom_size)
table.insert(ret, "debug:accumulative headroom:" .. accumulative_size)

for i = 1, #debuginfo do
table.insert(ret, debuginfo[i])
end
Expand Down
1 change: 0 additions & 1 deletion orchagent/port.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@ class Port
uint32_t m_vnid = VNID_NONE;
uint32_t m_fdb_count = 0;
uint32_t m_up_member_count = 0;
uint32_t m_maximum_headroom = 0;

/*
* Following two bit vectors are used to lock
Expand Down
23 changes: 0 additions & 23 deletions orchagent/portsorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,9 +263,6 @@ PortsOrch::PortsOrch(DBConnector *db, vector<table_name_with_pri_t> &tableNames)
m_flexCounterTable = unique_ptr<ProducerTable>(new ProducerTable(m_flex_db.get(), FLEX_COUNTER_TABLE));
m_flexCounterGroupTable = unique_ptr<ProducerTable>(new ProducerTable(m_flex_db.get(), FLEX_COUNTER_GROUP_TABLE));

m_state_db = shared_ptr<DBConnector>(new DBConnector("STATE_DB", 0));
m_stateBufferMaximumValueTable = unique_ptr<Table>(new Table(m_state_db.get(), STATE_BUFFER_MAXIMUM_VALUE_TABLE));

initGearbox();

string queueWmSha, pgWmSha;
Expand Down Expand Up @@ -3325,25 +3322,6 @@ void PortsOrch::initializePriorityGroups(Port &port)
SWSS_LOG_INFO("Get priority groups for port %s", port.m_alias.c_str());
}

void PortsOrch::initializePortMaximumHeadroom(Port &port)
{
sai_attribute_t attr;

attr.id = SAI_PORT_ATTR_QOS_MAXIMUM_HEADROOM_SIZE;

sai_status_t status = sai_port_api->get_port_attribute(port.m_port_id, 1, &attr);
if (status != SAI_STATUS_SUCCESS)
{
SWSS_LOG_NOTICE("Unable to get the maximum headroom for port %s rv:%d, ignored", port.m_alias.c_str(), status);
return;
}

vector<FieldValueTuple> fvVector;
port.m_maximum_headroom = attr.value.u32;
fvVector.emplace_back("max_headroom_size", to_string(port.m_maximum_headroom));
m_stateBufferMaximumValueTable->set(port.m_alias, fvVector);
}

bool PortsOrch::initializePort(Port &port)
{
SWSS_LOG_ENTER();
Expand All @@ -3352,7 +3330,6 @@ bool PortsOrch::initializePort(Port &port)

initializePriorityGroups(port);
initializeQueues(port);
initializePortMaximumHeadroom(port);

/* Create host interface */
if (!addHostIntfs(port, port.m_alias, port.m_hif_id))
Expand Down
3 changes: 0 additions & 3 deletions orchagent/portsorch.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ class PortsOrch : public Orch, public Subject
unique_ptr<Table> m_pgTable;
unique_ptr<Table> m_pgPortTable;
unique_ptr<Table> m_pgIndexTable;
unique_ptr<Table> m_stateBufferMaximumValueTable;
unique_ptr<ProducerTable> m_flexCounterTable;
unique_ptr<ProducerTable> m_flexCounterGroupTable;

Expand All @@ -166,7 +165,6 @@ class PortsOrch : public Orch, public Subject

shared_ptr<DBConnector> m_counter_db;
shared_ptr<DBConnector> m_flex_db;
shared_ptr<DBConnector> m_state_db;

FlexCounterManager port_stat_manager;
FlexCounterManager port_buffer_drop_stat_manager;
Expand Down Expand Up @@ -229,7 +227,6 @@ class PortsOrch : public Orch, public Subject

bool initializePort(Port &port);
void initializePriorityGroups(Port &port);
void initializePortMaximumHeadroom(Port &port);
void initializeQueues(Port &port);

bool addHostIntfs(Port &port, string alias, sai_object_id_t &host_intfs_id);
Expand Down