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.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> {

View File

@ -198,7 +198,7 @@ fn retire_check(cycle: u64, recent_cycle: u64) -> bool {
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 {
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),
median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits,
tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
},
)
.collect();
@ -296,7 +296,7 @@ pub fn worst_n(start: u32, end: u32) -> BusResponse {
packets_per_second: (packets.down, packets.up),
median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits,
tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
},
)
.collect();
@ -328,8 +328,8 @@ pub fn worst_n_retransmits(start: u32, end: u32) -> BusResponse {
.collect()
};
full_list.sort_by(|a, b| {
let total_a = a.6 .0 + a.6 .1;
let total_b = b.6 .0 + b.6 .1;
let total_a = a.6.sum();
let total_b = b.6.sum();
total_b.cmp(&total_a)
});
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),
median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits,
tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
},
)
.collect();
@ -405,7 +405,7 @@ pub fn best_n(start: u32, end: u32) -> BusResponse {
packets_per_second: (packets.down, packets.up),
median_tcp_rtt: *median_rtt,
tc_handle: *tc_handle,
tcp_retransmits: *tcp_retransmits,
tcp_retransmits: (tcp_retransmits.down, tcp_retransmits.up),
},
)
.collect();

View File

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

View File

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