Browse Source

etcpmon: add queue metrics, error counters, timer flags and peer_node_id

- Added queue bytes/packets for all 6 ETCP queues
- Added error counters: reinit_count, reset_count, pkt_format_errors
- Added timer active flags for connection and link timers
- Added peer_node_id to identify connection in metrics
nodeinfo-routing-update
Evgeny 4 weeks ago
parent
commit
fbd1128bf1
  1. 28
      src/control_server.c
  2. 29
      tools/etcpmon/etcpmon_protocol.h

28
src/control_server.c

@ -12,6 +12,7 @@
#include "../lib/u_async.h"
#include "../lib/debug_config.h"
#include "../lib/mem.h"
#include "../lib/ll_queue.h"
#include <stdlib.h>
#include <string.h>
@ -717,6 +718,7 @@ static void send_metrics(struct control_server* server, struct control_client* c
struct etcpmon_rsp_metrics* rsp = (struct etcpmon_rsp_metrics*)(buffer + sizeof(*hdr));
/* Fill ETCP metrics */
rsp->etcp.peer_node_id = conn->peer_node_id;
rsp->etcp.rtt_last = conn->rtt_last;
rsp->etcp.rtt_avg_10 = conn->rtt_avg_10;
rsp->etcp.rtt_avg_100 = conn->rtt_avg_100;
@ -727,6 +729,29 @@ static void send_metrics(struct control_server* server, struct control_client* c
rsp->etcp.unacked_bytes = conn->unacked_bytes;
rsp->etcp.optimal_inflight = conn->optimal_inflight;
rsp->etcp.links_count = links_count;
/* Queue metrics */
rsp->etcp.input_queue_bytes = (uint32_t)queue_total_bytes(conn->input_queue);
rsp->etcp.input_queue_packets = (uint32_t)queue_entry_count(conn->input_queue);
rsp->etcp.input_send_q_bytes = (uint32_t)queue_total_bytes(conn->input_send_q);
rsp->etcp.input_send_q_packets = (uint32_t)queue_entry_count(conn->input_send_q);
rsp->etcp.input_wait_ack_bytes = (uint32_t)queue_total_bytes(conn->input_wait_ack);
rsp->etcp.input_wait_ack_packets = (uint32_t)queue_entry_count(conn->input_wait_ack);
rsp->etcp.ack_q_bytes = (uint32_t)queue_total_bytes(conn->ack_q);
rsp->etcp.ack_q_packets = (uint32_t)queue_entry_count(conn->ack_q);
rsp->etcp.recv_q_bytes = (uint32_t)queue_total_bytes(conn->recv_q);
rsp->etcp.recv_q_packets = (uint32_t)queue_entry_count(conn->recv_q);
rsp->etcp.output_queue_bytes = (uint32_t)queue_total_bytes(conn->output_queue);
rsp->etcp.output_queue_packets = (uint32_t)queue_entry_count(conn->output_queue);
/* Error counters */
rsp->etcp.reinit_count = conn->reinit_count;
rsp->etcp.reset_count = conn->reset_count;
rsp->etcp.pkt_format_errors = (conn->links && conn->links->conn) ? (uint32_t)conn->links->conn->pkt_format_errors : 0;
/* Timer flags */
rsp->etcp.retrans_timer_active = (conn->retrans_timer != NULL) ? 1 : 0;
rsp->etcp.ack_resp_timer_active = (conn->ack_resp_timer != NULL) ? 1 : 0;
/* Fill TUN metrics */
if (instance->tun) {
@ -756,6 +781,9 @@ static void send_metrics(struct control_server* server, struct control_client* c
link_info[i].nat_changes_count = link->nat_changes_count;
link_info[i].rtt_last = link->rtt_last;
link_info[i].tt_last = link->tt_last;
link_info[i].init_timer_active = (link->init_timer != NULL) ? 1 : 0;
link_info[i].keepalive_timer_active = (link->keepalive_timer != NULL) ? 1 : 0;
link_info[i].shaper_timer_active = (link->shaper_timer != NULL) ? 1 : 0;
link = link->next;
}

29
tools/etcpmon/etcpmon_protocol.h

@ -95,6 +95,7 @@ struct etcpmon_rsp_conn_list {
/* ETCP Connection metrics */
struct etcpmon_etcp_metrics {
uint64_t peer_node_id; /* Connection identifier */
uint32_t rtt_last; /* Last RTT (0.1ms units) */
uint32_t rtt_avg_10; /* Average RTT over 10 packets */
uint32_t rtt_avg_100; /* Average RTT over 100 packets */
@ -105,6 +106,29 @@ struct etcpmon_etcp_metrics {
uint32_t unacked_bytes; /* Current unacknowledged bytes */
uint32_t optimal_inflight; /* Target inflight window */
uint8_t links_count; /* Number of active links */
/* Queue metrics */
uint32_t input_queue_bytes;
uint32_t input_queue_packets;
uint32_t input_send_q_bytes;
uint32_t input_send_q_packets;
uint32_t input_wait_ack_bytes;
uint32_t input_wait_ack_packets;
uint32_t ack_q_bytes;
uint32_t ack_q_packets;
uint32_t recv_q_bytes;
uint32_t recv_q_packets;
uint32_t output_queue_bytes;
uint32_t output_queue_packets;
/* Error counters */
uint32_t reinit_count;
uint32_t reset_count;
uint32_t pkt_format_errors;
/* Timer flags (1 = active, 0 = NULL) */
uint8_t retrans_timer_active;
uint8_t ack_resp_timer_active;
};
/* Link metrics */
@ -121,6 +145,11 @@ struct etcpmon_link_metrics {
uint32_t nat_changes_count; /* NAT address changes */
uint32_t rtt_last; /* Last RTT (0.1ms units) */
uint32_t tt_last; /* Last transmit time (0.1ms units) */
/* Timer flags (1 = active, 0 = NULL) */
uint8_t init_timer_active;
uint8_t keepalive_timer_active;
uint8_t shaper_timer_active;
};
/* TUN interface metrics */

Loading…
Cancel
Save