diff --git a/libknet/internals.h b/libknet/internals.h index d20886437..7475a88ae 100644 --- a/libknet/internals.h +++ b/libknet/internals.h @@ -66,7 +66,6 @@ struct knet_link { unsigned long long pong_timeout_adj; /* timeout adjusted for latency */ uint8_t pong_timeout_backoff; /* see link.h for definition */ unsigned int latency_max_samples; /* precision */ - unsigned int latency_cur_samples; uint8_t pong_count; /* how many ping/pong to send/receive before link is up */ uint64_t flags; /* status */ diff --git a/libknet/libknet.h b/libknet/libknet.h index 7e22ce519..ee26197e9 100644 --- a/libknet/libknet.h +++ b/libknet/libknet.h @@ -1962,9 +1962,6 @@ int knet_link_get_link_list(knet_handle_t knet_h, knet_node_id_t host_id, * dynconnected the link has dynamic ip on the other end, and * we can see the other host is sending pings to us. * - * latency average latency of this link - * see also knet_link_set/get_timeout. - * * pong_last if the link is down, this value tells us how long * ago this link was active. A value of 0 means that the link * has never been active. @@ -2042,7 +2039,6 @@ struct knet_link_status { uint8_t enabled; /* link is configured and admin enabled for traffic */ uint8_t connected; /* link is connected for data (local view) */ uint8_t dynconnected; /* link has been activated by remote dynip */ - unsigned long long latency; /* average latency computed by fix/exp */ struct timespec pong_last; unsigned int mtu; /* current detected MTU on this link */ unsigned int proto_overhead; /* contains the size of the IP protocol, knet headers and diff --git a/libknet/links.c b/libknet/links.c index 316158619..1bf5c1165 100644 --- a/libknet/links.c +++ b/libknet/links.c @@ -246,7 +246,7 @@ int knet_link_set_config(knet_handle_t knet_h, knet_node_id_t host_id, uint8_t l link->pong_timeout_backoff = KNET_LINK_PONG_TIMEOUT_BACKOFF; link->pong_timeout_adj = link->pong_timeout * link->pong_timeout_backoff; /* microseconds */ link->latency_max_samples = KNET_LINK_DEFAULT_PING_PRECISION; - link->latency_cur_samples = 0; + link->status.stats.latency_samples = 0; link->flags = flags; if (transport_link_set_config(knet_h, link, transport) < 0) { diff --git a/libknet/threads_heartbeat.c b/libknet/threads_heartbeat.c index 9b3c0e2e5..719ca4454 100644 --- a/libknet/threads_heartbeat.c +++ b/libknet/threads_heartbeat.c @@ -177,7 +177,7 @@ static void _adjust_pong_timeouts(knet_handle_t knet_h) dst_link->pong_timeout_backoff--; } - dst_link->pong_timeout_adj = (dst_link->pong_timeout * dst_link->pong_timeout_backoff) + (dst_link->status.latency * KNET_LINK_PONG_TIMEOUT_LAT_MUL); + dst_link->pong_timeout_adj = (dst_link->pong_timeout * dst_link->pong_timeout_backoff) + (dst_link->status.stats.latency_ave * KNET_LINK_PONG_TIMEOUT_LAT_MUL); } } diff --git a/libknet/threads_rx.c b/libknet/threads_rx.c index 957377a0e..afe5a6b37 100644 --- a/libknet/threads_rx.c +++ b/libknet/threads_rx.c @@ -632,18 +632,18 @@ static void _parse_recv_from_links(knet_handle_t knet_h, int sockfd, const struc * in words : ('previous mean' * '(count -1)') + 'new value') / 'count' */ - src_link->latency_cur_samples++; + src_link->status.stats.latency_samples++; /* * limit to max_samples (precision) */ - if (src_link->latency_cur_samples >= src_link->latency_max_samples) { - src_link->latency_cur_samples = src_link->latency_max_samples; + if (src_link->status.stats.latency_samples >= src_link->latency_max_samples) { + src_link->status.stats.latency_samples = src_link->latency_max_samples; } - src_link->status.latency = - (((src_link->status.latency * (src_link->latency_cur_samples - 1)) + (latency_last / 1000llu)) / src_link->latency_cur_samples); + src_link->status.stats.latency_ave = + (((src_link->status.stats.latency_ave * (src_link->status.stats.latency_samples - 1)) + (latency_last / 1000llu)) / src_link->status.stats.latency_samples); - if (src_link->status.latency < src_link->pong_timeout_adj) { + if (src_link->status.stats.latency_ave < src_link->pong_timeout_adj) { if (!src_link->status.connected) { if (src_link->received_pong >= src_link->pong_count) { log_info(knet_h, KNET_SUB_RX, "host: %u link: %u is up", @@ -657,21 +657,12 @@ static void _parse_recv_from_links(knet_handle_t knet_h, int sockfd, const struc } } /* Calculate latency stats */ - if (src_link->status.latency > src_link->status.stats.latency_max) { - src_link->status.stats.latency_max = src_link->status.latency; + if (src_link->status.stats.latency_ave > src_link->status.stats.latency_max) { + src_link->status.stats.latency_max = src_link->status.stats.latency_ave; } - if (src_link->status.latency < src_link->status.stats.latency_min) { - src_link->status.stats.latency_min = src_link->status.latency; + if (src_link->status.stats.latency_ave < src_link->status.stats.latency_min) { + src_link->status.stats.latency_min = src_link->status.stats.latency_ave; } - - /* - * those 2 lines below make all latency average calculations consistent and capped to - * link precision. In future we will kill the one above to keep only this one in - * the stats structure, but for now we leave it around to avoid API/ABI - * breakage as we backport the fixes to stable - */ - src_link->status.stats.latency_ave = src_link->status.latency; - src_link->status.stats.latency_samples = src_link->latency_cur_samples; } break; case KNET_HEADER_TYPE_PMTUD: