Change TCP retransmits counter to a DownUp

This commit is contained in:
Herbert Wolverson 2024-07-02 10:42:31 -05:00
parent 2675d56e6b
commit ff97674885
4 changed files with 20 additions and 16 deletions

View File

@ -44,6 +44,10 @@ where T: std::cmp::Ord + num_traits::Zero + Copy + num_traits::CheckedSub
self.down = self.down.checked_add(&down).unwrap_or(T::zero()); self.down = self.down.checked_add(&down).unwrap_or(T::zero());
self.up = self.up.checked_add(&up).unwrap_or(T::zero()); self.up = self.up.checked_add(&up).unwrap_or(T::zero());
} }
pub fn sum(&self) -> T {
self.down + self.up
}
} }
impl <T> Into<UpDownOrder<T>> for DownUpOrder<T> { impl <T> Into<UpDownOrder<T>> for DownUpOrder<T> {

View File

@ -198,7 +198,7 @@ fn retire_check(cycle: u64, recent_cycle: u64) -> bool {
cycle < recent_cycle + RETIRE_AFTER_SECONDS cycle < recent_cycle + RETIRE_AFTER_SECONDS
} }
type TopList = (XdpIpAddress, DownUpOrder<u64>,DownUpOrder<u64>, f32, TcHandle, String, (u64, u64)); type TopList = (XdpIpAddress, DownUpOrder<u64>,DownUpOrder<u64>, f32, TcHandle, String, DownUpOrder<u64>);
pub fn top_n(start: u32, end: u32) -> BusResponse { pub fn top_n(start: u32, end: u32) -> BusResponse {
let mut full_list: Vec<TopList> = { let mut full_list: Vec<TopList> = {
@ -244,7 +244,7 @@ pub fn top_n(start: u32, end: u32) -> BusResponse {
packets_per_second: (packets.down, packets.up), packets_per_second: (packets.down, packets.up),
median_tcp_rtt: *median_rtt, median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle, tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits, tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
}, },
) )
.collect(); .collect();
@ -296,7 +296,7 @@ pub fn worst_n(start: u32, end: u32) -> BusResponse {
packets_per_second: (packets.down, packets.up), packets_per_second: (packets.down, packets.up),
median_tcp_rtt: *median_rtt, median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle, tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits, tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
}, },
) )
.collect(); .collect();
@ -328,8 +328,8 @@ pub fn worst_n_retransmits(start: u32, end: u32) -> BusResponse {
.collect() .collect()
}; };
full_list.sort_by(|a, b| { full_list.sort_by(|a, b| {
let total_a = a.6 .0 + a.6 .1; let total_a = a.6.sum();
let total_b = b.6 .0 + b.6 .1; let total_b = b.6.sum();
total_b.cmp(&total_a) total_b.cmp(&total_a)
}); });
let result = full_list let result = full_list
@ -352,7 +352,7 @@ pub fn worst_n_retransmits(start: u32, end: u32) -> BusResponse {
packets_per_second: (packets.down, packets.up), packets_per_second: (packets.down, packets.up),
median_tcp_rtt: *median_rtt, median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle, tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits, tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
}, },
) )
.collect(); .collect();
@ -405,7 +405,7 @@ pub fn best_n(start: u32, end: u32) -> BusResponse {
packets_per_second: (packets.down, packets.up), packets_per_second: (packets.down, packets.up),
median_tcp_rtt: *median_rtt, median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle, tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits, tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
}, },
) )
.collect(); .collect();

View File

@ -18,8 +18,8 @@ pub(crate) struct ThroughputEntry {
pub(crate) recent_rtt_data: [RttData; 60], pub(crate) recent_rtt_data: [RttData; 60],
pub(crate) last_fresh_rtt_data_cycle: u64, pub(crate) last_fresh_rtt_data_cycle: u64,
pub(crate) last_seen: u64, // Last seen in kernel time since boot pub(crate) last_seen: u64, // Last seen in kernel time since boot
pub(crate) tcp_retransmits: (u64, u64), pub(crate) tcp_retransmits: DownUpOrder<u64>,
pub(crate) last_tcp_retransmits: (u64, u64), pub(crate) last_tcp_retransmits: DownUpOrder<u64>,
} }
impl ThroughputEntry { impl ThroughputEntry {

View File

@ -147,8 +147,8 @@ impl ThroughputTracker {
recent_rtt_data: [RttData::from_nanos(0); 60], recent_rtt_data: [RttData::from_nanos(0); 60],
last_fresh_rtt_data_cycle: 0, last_fresh_rtt_data_cycle: 0,
last_seen: 0, last_seen: 0,
tcp_retransmits: (0, 0), tcp_retransmits: DownUpOrder::zeroed(),
last_tcp_retransmits: (0, 0), last_tcp_retransmits: DownUpOrder::zeroed(),
}; };
for c in counts { for c in counts {
entry.bytes.checked_add_direct(c.download_bytes, c.upload_bytes); entry.bytes.checked_add_direct(c.download_bytes, c.upload_bytes);
@ -286,15 +286,15 @@ impl ThroughputTracker {
// Merge in the TCP retries // Merge in the TCP retries
// Reset all entries in the tracker to 0 // Reset all entries in the tracker to 0
for mut circuit in self.raw_data.iter_mut() { for mut circuit in self.raw_data.iter_mut() {
circuit.tcp_retransmits = (0, 0); circuit.tcp_retransmits = DownUpOrder::zeroed();
} }
// Apply the new ones // Apply the new ones
for (local_ip, retries) in tcp_retries { for (local_ip, retries) in tcp_retries {
if let Some(mut tracker) = self.raw_data.get_mut(&local_ip) { if let Some(mut tracker) = self.raw_data.get_mut(&local_ip) {
tracker.tcp_retransmits.0 = retries[0].saturating_sub(tracker.last_tcp_retransmits.0); tracker.tcp_retransmits.down = retries[0].saturating_sub(tracker.last_tcp_retransmits.down);
tracker.tcp_retransmits.1 = retries[1].saturating_sub(tracker.last_tcp_retransmits.1); tracker.tcp_retransmits.up = retries[1].saturating_sub(tracker.last_tcp_retransmits.up);
tracker.last_tcp_retransmits.0 = retries[0]; tracker.last_tcp_retransmits.down = retries[0];
tracker.last_tcp_retransmits.1 = retries[1]; tracker.last_tcp_retransmits.up = retries[1];
} }
} }