Skip to content

Commit d608765

Browse files
committed
Move timestamps out of counter table to avoid update too frequently
Signed-off-by: Stephen Sun <[email protected]>
1 parent 822ab91 commit d608765

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

orchagent/pfc_detect_mellanox.lua

+17-25
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,22 @@ if timestamp_last ~= false then
2525
redis.call('HSET', 'TIMESTAMP', 'effective_pfcwd_poll_time_last', global_effective_poll_time)
2626
end
2727

28+
-- Get timestamp from TIME_STAMP table for PFC_WD counters
29+
-- Use a field name without spaces to avoid issues
30+
local port_timestamp_current = tonumber(redis.call('HGET', 'COUNTERS:TIME_STAMP', 'PFC_WD_Port_Counter_time_stamp'))
31+
local port_timestamp_last = tonumber(redis.call('HGET', 'COUNTERS:TIME_STAMP', 'PFC_WD_Port_Counter_time_stamp_last'))
32+
33+
-- Update the last timestamp for all ports at once
34+
if port_timestamp_current ~= nil then
35+
redis.call('HSET', 'COUNTERS:TIME_STAMP', 'PFC_WD_Port_Counter_time_stamp_last', port_timestamp_current)
36+
end
37+
2838
local effective_poll_time
29-
local effective_poll_time_lasttime
30-
local port_timestamp_last_cache = {}
39+
if port_timestamp_current ~= nil and port_timestamp_last ~= nil then
40+
effective_poll_time = (port_timestamp_current - port_timestamp_last) / 1000
41+
else
42+
effective_poll_time = global_effective_poll_time
43+
end
3144

3245
local debug_storm_global = redis.call('HGET', 'DEBUG_STORM', 'enabled') == 'true'
3346
local debug_storm_threshold = tonumber(redis.call('HGET', 'DEBUG_STORM', 'threshold'))
@@ -63,27 +76,6 @@ for i = n, 1, -1 do
6376
local pfc_rx_pkt_key = 'SAI_PORT_STAT_PFC_' .. queue_index .. '_RX_PKTS'
6477
local pfc_duration_key = 'SAI_PORT_STAT_PFC_' .. queue_index .. '_RX_PAUSE_DURATION_US'
6578

66-
-- Get port specific timestamp
67-
local port_timestamp_current = tonumber(redis.call('HGET', counters_table_name .. ':' .. port_id, 'PFC_WD_time_stamp'))
68-
if port_timestamp_current ~= nil then
69-
local port_timestamp_lasttime = port_timestamp_last_cache[port_id]
70-
if port_timestamp_lasttime == nil then
71-
port_timestamp_lasttime = tonumber(redis.call('HGET', counters_table_name .. ':' .. port_id, 'PFC_WD_time_stamp_last'))
72-
port_timestamp_last_cache[port_id] = port_timestamp_lasttime
73-
redis.call('HSET', counters_table_name .. ':' .. port_id, 'PFC_WD_time_stamp_last', port_timestamp_current)
74-
end
75-
76-
if port_timestamp_lasttime ~= nil then
77-
effective_poll_time = (port_timestamp_current - port_timestamp_lasttime) / 1000
78-
else
79-
effective_poll_time = global_effective_poll_time
80-
end
81-
effective_poll_time_lasttime = false
82-
else
83-
effective_poll_time = global_effective_poll_time
84-
effective_poll_time_lasttime = global_effective_poll_time_lasttime
85-
end
86-
8779
-- Get all counters
8880
local occupancy_bytes = redis.call('HGET', counters_table_name .. ':' .. KEYS[i], 'SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES')
8981
local packets = redis.call('HGET', counters_table_name .. ':' .. KEYS[i], 'SAI_QUEUE_STAT_PACKETS')
@@ -132,8 +124,8 @@ for i = n, 1, -1 do
132124
local pfc_rx_packets_string = '"pfc_rx_packets","' .. tostring(pfc_rx_packets) .. '","pfc_rx_packets_last","' .. tostring(pfc_rx_packets_last) .. '",'
133125
local storm_condition_string = '"pfc_duration","' .. tostring(pfc_duration) .. '","pfc_duration_last","' .. tostring(pfc_duration_last) .. '",'
134126
local timestamps = '"timestamp","' .. timestamp_string .. '","timestamp_last","' .. timestamp_last .. '","effective_poll_time","' .. effective_poll_time .. '"'
135-
if effective_poll_time_lasttime ~= false then
136-
timestamps = timestamps .. ',"effective_pfcwd_poll_time_last","' .. effective_poll_time_lasttime .. '"'
127+
if global_effective_poll_time_lasttime ~= false then
128+
timestamps = timestamps .. ',"effective_pfcwd_poll_time_last","' .. global_effective_poll_time_lasttime .. '"'
137129
end
138130
redis.call('PUBLISH', 'PFC_WD_ACTION', '["' .. KEYS[i] .. '","storm",' .. occupancy_string .. packets_string .. pfc_rx_packets_string .. storm_condition_string .. timestamps .. ']')
139131
is_deadlock = true

0 commit comments

Comments
 (0)