Skip to content

Commit cafe17b

Browse files
author
Praveen Chaudhary
committed
[fpmsyncd]: Routes update frequenct stats.
Signed-off-by: Praveen Chaudhary <[email protected]> RB= G=lnos-reviewers R=pchaudhary,pmao,samaity,zxu A=
1 parent 687fc9c commit cafe17b

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

fpmsyncd/routesync.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "macaddress.h"
1313
#include <string.h>
1414
#include <arpa/inet.h>
15+
#include <chrono>
1516

1617
using namespace std;
1718
using namespace swss;
@@ -41,6 +42,13 @@ using namespace swss;
4142

4243
#define ETHER_ADDR_STRLEN (3*ETH_ALEN)
4344

45+
46+
/* helper function for time */
47+
uint64_t getTimeEpochMsec() {
48+
using namespace std::chrono;
49+
return duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
50+
}
51+
4452
RouteSync::RouteSync(RedisPipeline *pipeline) :
4553
m_routeTable(pipeline, APP_ROUTE_TABLE_NAME, true),
4654
m_vnet_routeTable(pipeline, APP_VNET_RT_TABLE_NAME, true),
@@ -51,6 +59,19 @@ RouteSync::RouteSync(RedisPipeline *pipeline) :
5159
m_nl_sock = nl_socket_alloc();
5260
nl_connect(m_nl_sock, NETLINK_ROUTE);
5361
rtnl_link_alloc_cache(m_nl_sock, AF_UNSPEC, &m_link_cache);
62+
63+
/* TODO: read from configDb */
64+
RED_THRESHOLD = 500;
65+
ORANGE_THREASHOLD = 100;
66+
currentRedroutes = 0;
67+
currentOrangeroutes = 0;
68+
/* update the time at start */
69+
lastRedUpdated = getTimeEpochMsec();
70+
lastOrangeUpdated = lastRedUpdated;
71+
/* BGP_ROUTE_UPDATES Table */
72+
DBConnector stateDb("STATE_DB", 0);
73+
Table bgpChurnTable(&stateDb, "BGP_ROUTE_UPDATES");
74+
this->bgpChurnTable = bgpChurnTable;
5475
}
5576

5677
char *RouteSync::prefixMac2Str(char *mac, char *buf, int size)
@@ -723,6 +744,10 @@ void RouteSync::onRouteMsg(int nlmsg_type, struct nl_object *obj, char *vrf)
723744
fvVector.push_back(nh);
724745
fvVector.push_back(idx);
725746

747+
SWSS_LOG_NOTICE("PC: fpmsyncd debug image");
748+
749+
this->updateRouteFrequencyStats();
750+
726751
if (!warmRestartInProgress)
727752
{
728753
m_routeTable.set(destipprefix, fvVector);
@@ -962,3 +987,25 @@ string RouteSync::getNextHopIf(struct rtnl_route *route_obj)
962987

963988
return result;
964989
}
990+
991+
void RouteSync::updateRouteFrequencyStats() {
992+
993+
++currentRedroutes;
994+
++currentOrangeroutes;
995+
996+
if (currentRedroutes >= RED_THRESHOLD) {
997+
uint64_t curTime = getTimeEpochMsec();
998+
SWSS_LOG_NOTICE("Red TH: %d routes are updated in %ld msecs\n", currentRedroutes, curTime-lastRedUpdated);
999+
bgpChurnTable.hset("ROUTE_CHURN_FREQUENCY", "RED_THRESHOLD", std::to_string((currentRedroutes*1000)/(curTime-lastRedUpdated)));
1000+
lastRedUpdated = curTime;
1001+
currentRedroutes = 0;
1002+
}
1003+
1004+
if (currentOrangeroutes >= ORANGE_THREASHOLD) {
1005+
uint64_t curTime = getTimeEpochMsec();
1006+
SWSS_LOG_NOTICE("Orange TH: %d routes are updated in %ld msecs\n", currentOrangeroutes, curTime-lastOrangeUpdated);
1007+
bgpChurnTable.hset("ROUTE_CHURN_FREQUENCY", "ORANGE_THRESHOLD", std::to_string((currentOrangeroutes*1000)/(curTime-lastOrangeUpdated)));
1008+
lastOrangeUpdated = curTime;
1009+
currentOrangeroutes = 0;
1010+
}
1011+
}

fpmsyncd/routesync.h

+10
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@ class RouteSync : public NetMsg
7575

7676
/* Get next hop interfaces */
7777
string getNextHopIf(struct rtnl_route *route_obj);
78+
79+
void updateRouteFrequencyStats();
80+
81+
int RED_THRESHOLD;
82+
int ORANGE_THREASHOLD;
83+
uint16_t currentRedroutes;
84+
uint16_t currentOrangeroutes;
85+
uint64_t lastRedUpdated;
86+
uint64_t lastOrangeUpdated;
87+
Table bgpChurnTable = nullptr;
7888
};
7989

8090
}

0 commit comments

Comments
 (0)