feat: add average rtt statistics counter

This commit is contained in:
eeff
2022-09-13 23:53:38 +08:00
parent 00a934453e
commit da2dce252a
3 changed files with 19 additions and 0 deletions
+4
View File
@@ -30,6 +30,8 @@ extern "C" {
#include "tag.h"
#include "type.h"
#define NEU_NODE_STAT_RTT_MAX 9999
/** Kinds of node statistics counters.
*
* Some counters are maintained by the neuron core, while others should be
@@ -41,6 +43,7 @@ typedef enum {
NEU_NODE_STAT_BYTES_RECV, // number of bytes received
NEU_NODE_STAT_MSGS_SENT, // number of messages sent
NEU_NODE_STAT_MSGS_RECV, // number of messages received
NEU_NODE_STAT_AVG_RTT, // average round trip time (ms)
// kinds of counters maintained by the driver core
NEU_NODE_STAT_TAG_TOT_CNT, // number of tag read including errors
@@ -56,6 +59,7 @@ static inline const char *neu_node_stat_string(neu_node_stat_e s)
[NEU_NODE_STAT_BYTES_RECV] = "bytes_received",
[NEU_NODE_STAT_MSGS_SENT] = "messages_sent",
[NEU_NODE_STAT_MSGS_RECV] = "messages_received",
[NEU_NODE_STAT_AVG_RTT] = "average_rtt",
[NEU_NODE_STAT_TAG_TOT_CNT] = "tag_total_count",
[NEU_NODE_STAT_TAG_ERR_CNT] = "tag_error_count",
[NEU_NODE_STAT_MAX] = NULL,
+14
View File
@@ -88,6 +88,8 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info)
adapter->persister = neu_persister_create("persistence");
assert(adapter->persister != NULL);
adapter->stat.avg_rtt = NEU_NODE_STAT_RTT_MAX;
rv = nng_pair1_open(&adapter->sock);
assert(rv == 0);
nng_socket_set_int(adapter->sock, NNG_OPT_RECVBUF, 128);
@@ -184,6 +186,18 @@ static void adapter_stat_acc(neu_adapter_t *adapter, neu_node_stat_e s,
case NEU_NODE_STAT_MSGS_RECV:
adapter->stat.msgs_recv += n;
break;
case NEU_NODE_STAT_AVG_RTT: {
if (NEU_NODE_STAT_RTT_MAX <= n ||
adapter->stat.avg_rtt == NEU_NODE_STAT_RTT_MAX) {
adapter->stat.avg_rtt = n;
break;
}
// exponential moving average with alpha = 0.3
const double a = 0.3;
adapter->stat.avg_rtt = adapter->stat.avg_rtt * (1 - a) + n * a;
break;
}
// these are maintained by neuron core
case NEU_NODE_STAT_TAG_TOT_CNT:
+1
View File
@@ -60,6 +60,7 @@ struct neu_adapter {
uint64_t bytes_recv; // number of bytes received over network
uint64_t msgs_sent; // number of messages sent
uint64_t msgs_recv; // number of messages received
uint64_t avg_rtt; // average round trip time in milliseconds
uint64_t tag_tot_cnt; // number of tag read including errors
uint64_t tag_err_cnt; // number of tag read errors
};