Skip to content

Commit f1f7f26

Browse files
AndriiSlguohan
authored andcommitted
Queue stat counters (sonic-net#230)
* Update port and queue counters by Flex counter * [stat counters sonic-net#230] added missing removing of empty instances
1 parent d11f550 commit f1f7f26

File tree

9 files changed

+294
-277
lines changed

9 files changed

+294
-277
lines changed

syncd/Makefile.am

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ syncd_SOURCES = \
2020
syncd_saiswitch.cpp \
2121
syncd_hard_reinit.cpp \
2222
syncd_notifications.cpp \
23-
syncd_counters.cpp \
2423
syncd_applyview.cpp \
2524
syncd_flex_counter.cpp
2625

@@ -42,7 +41,6 @@ tests_SOURCES = \
4241
syncd_saiswitch.cpp \
4342
syncd_hard_reinit.cpp \
4443
syncd_notifications.cpp \
45-
syncd_counters.cpp \
4644
syncd_applyview.cpp \
4745
syncd_flex_counter.cpp
4846

syncd/syncd.cpp

Lines changed: 61 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2243,10 +2243,10 @@ sai_status_t processBulkEvent(
22432243
sai_status_t processEvent(
22442244
_In_ swss::ConsumerTable &consumer)
22452245
{
2246-
std::lock_guard<std::mutex> lock(g_mutex);
2247-
22482246
SWSS_LOG_ENTER();
22492247

2248+
std::lock_guard<std::mutex> lock(g_mutex);
2249+
22502250
swss::KeyOpFieldsValuesTuple kco;
22512251

22522252
if (isInitViewMode())
@@ -2472,18 +2472,40 @@ sai_status_t processEvent(
24722472
void processFlexCounterEvent(
24732473
_In_ swss::ConsumerStateTable &consumer)
24742474
{
2475-
std::lock_guard<std::mutex> lock(g_mutex);
2476-
24772475
SWSS_LOG_ENTER();
24782476

2477+
std::lock_guard<std::mutex> lock(g_mutex);
2478+
24792479
swss::KeyOpFieldsValuesTuple kco;
24802480
consumer.pop(kco);
24812481

24822482
const auto &key = kfvKey(kco);
24832483
const auto &op = kfvOp(kco);
24842484

2485+
std::size_t delimiter = key.find_last_of(":");
2486+
2487+
if (delimiter == std::string::npos)
2488+
{
2489+
SWSS_LOG_ERROR("Failed to parse the key %s", key.c_str());
2490+
return;
2491+
}
2492+
2493+
const auto intervalStr = key.substr(delimiter + 1);
2494+
const auto vidStr = key.substr(0, delimiter);
2495+
int pollInterval;
2496+
2497+
try
2498+
{
2499+
pollInterval = std::stoi(intervalStr);
2500+
}
2501+
catch(const std::invalid_argument)
2502+
{
2503+
SWSS_LOG_ERROR("Failed to convert the poll intervall, key = %s", key.c_str());
2504+
return;
2505+
}
2506+
24852507
sai_object_id_t vid = SAI_NULL_OBJECT_ID;
2486-
sai_deserialize_object_id(key, vid);
2508+
sai_deserialize_object_id(vidStr, vid);
24872509
sai_object_id_t rid = translate_vid_to_rid(vid);
24882510
sai_object_type_t objectType = sai_object_type_query(rid);
24892511

@@ -2497,11 +2519,11 @@ void processFlexCounterEvent(
24972519
{
24982520
if (objectType == SAI_OBJECT_TYPE_PORT)
24992521
{
2500-
FlexCounter::removePort(vid);
2522+
FlexCounter::removePort(vid, pollInterval);
25012523
}
25022524
else if (objectType == SAI_OBJECT_TYPE_QUEUE)
25032525
{
2504-
FlexCounter::removeQueue(vid);
2526+
FlexCounter::removeQueue(vid, pollInterval);
25052527
}
25062528
else
25072529
{
@@ -2521,7 +2543,7 @@ void processFlexCounterEvent(
25212543
sai_deserialize_port_stat(str, stat);
25222544
portCounterIds.push_back(stat);
25232545
}
2524-
FlexCounter::setPortCounterList(vid, rid, portCounterIds);
2546+
FlexCounter::setPortCounterList(vid, rid, pollInterval, portCounterIds);
25252547
}
25262548
else if (objectType == SAI_OBJECT_TYPE_QUEUE && field == PFC_WD_QUEUE_COUNTER_ID_LIST)
25272549
{
@@ -2532,7 +2554,7 @@ void processFlexCounterEvent(
25322554
sai_deserialize_queue_stat(str, stat);
25332555
queueCounterIds.push_back(stat);
25342556
}
2535-
FlexCounter::setQueueCounterList(vid, rid, queueCounterIds);
2557+
FlexCounter::setQueueCounterList(vid, rid, pollInterval, queueCounterIds);
25362558
}
25372559
else if (objectType == SAI_OBJECT_TYPE_QUEUE && field == PFC_WD_QUEUE_ATTR_ID_LIST)
25382560
{
@@ -2544,7 +2566,7 @@ void processFlexCounterEvent(
25442566
queueAttrIds.push_back(attr);
25452567
}
25462568

2547-
FlexCounter::setQueueAttrList(vid, rid, queueAttrIds);
2569+
FlexCounter::setQueueAttrList(vid, rid, pollInterval, queueAttrIds);
25482570
}
25492571
else
25502572
{
@@ -2557,19 +2579,41 @@ void processFlexCounterEvent(
25572579
void processFlexCounterPluginEvent(
25582580
_In_ swss::ConsumerStateTable &consumer)
25592581
{
2560-
std::lock_guard<std::mutex> lock(g_mutex);
2561-
25622582
SWSS_LOG_ENTER();
25632583

2584+
std::lock_guard<std::mutex> lock(g_mutex);
2585+
25642586
swss::KeyOpFieldsValuesTuple kco;
25652587
consumer.pop(kco);
25662588

25672589
const auto &key = kfvKey(kco);
25682590
const auto &op = kfvOp(kco);
25692591

2592+
std::size_t delimiter = key.find_last_of(":");
2593+
2594+
if (delimiter == std::string::npos)
2595+
{
2596+
SWSS_LOG_ERROR("Failed to parse the key %s", key.c_str());
2597+
return;
2598+
}
2599+
2600+
const auto intervalStr = key.substr(delimiter + 1);
2601+
const auto sha = key.substr(0, delimiter);
2602+
int pollInterval;
2603+
2604+
try
2605+
{
2606+
pollInterval = std::stoi(intervalStr);
2607+
}
2608+
catch(const std::invalid_argument)
2609+
{
2610+
SWSS_LOG_ERROR("Failed to convert the poll intervall, key = %s", key.c_str());
2611+
return;
2612+
}
2613+
25702614
if (op == DEL_COMMAND)
25712615
{
2572-
FlexCounter::removeCounterPlugin(key);
2616+
FlexCounter::removeCounterPlugin(sha, pollInterval);
25732617
return;
25742618
}
25752619

@@ -2586,11 +2630,11 @@ void processFlexCounterPluginEvent(
25862630

25872631
if (value == sai_serialize_object_type(SAI_OBJECT_TYPE_PORT))
25882632
{
2589-
FlexCounter::addPortCounterPlugin(key);
2633+
FlexCounter::addPortCounterPlugin(sha, pollInterval);
25902634
}
25912635
else if (value == sai_serialize_object_type(SAI_OBJECT_TYPE_QUEUE))
25922636
{
2593-
FlexCounter::addQueueCounterPlugin(key);
2637+
FlexCounter::addQueueCounterPlugin(sha, pollInterval);
25942638
}
25952639
else
25962640
{
@@ -3036,6 +3080,7 @@ void performWarmRestart()
30363080

30373081
void onSyncdStart(bool warmStart)
30383082
{
3083+
SWSS_LOG_ENTER();
30393084
std::lock_guard<std::mutex> lock(g_mutex);
30403085

30413086
/*
@@ -3046,7 +3091,7 @@ void onSyncdStart(bool warmStart)
30463091
* need to use a lock here to prevent that.
30473092
*/
30483093

3049-
SWSS_LOG_ENTER();
3094+
30503095

30513096
SWSS_LOG_TIMER("on syncd start");
30523097

@@ -3260,13 +3305,6 @@ int syncd_main(int argc, char **argv)
32603305
onSyncdStart(options.startType == SAI_WARM_BOOT);
32613306
SWSS_LOG_NOTICE("after onSyncdStart");
32623307

3263-
if (options.disableCountersThread == false)
3264-
{
3265-
SWSS_LOG_NOTICE("starting counters thread");
3266-
3267-
startCountersThread(options.countersThreadIntervalInSeconds);
3268-
}
3269-
32703308
startNotificationsProcessingThread();
32713309

32723310
SWSS_LOG_NOTICE("syncd listening for events");
@@ -3322,8 +3360,6 @@ int syncd_main(int argc, char **argv)
33223360
exit_and_notify(EXIT_FAILURE);
33233361
}
33243362

3325-
endCountersThread();
3326-
33273363
if (warmRestartHint)
33283364
{
33293365
const char *warmBootWriteFile = profile_get_value(0, SAI_KEY_WARM_BOOT_WRITE_FILE);

syncd/syncd.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,6 @@ void translate_rid_to_vid_list(
9696
_In_ uint32_t attr_count,
9797
_In_ sai_attribute_t *attr_list);
9898

99-
void endCountersThread();
100-
void startCountersThread(
101-
_In_ int intervalInSeconds);
102-
10399
sai_status_t syncdApplyView();
104100
void check_notifications_pointers(
105101
_In_ uint32_t attr_count,

syncd/syncd_counters.cpp

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)