mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Start tracking bytes/second over time per-flow. This is experimental; in theory it won't cause problems, but it needs to be thoroughly tested.
This commit is contained in:
parent
c7f06f9a39
commit
b9ad794dc5
@ -41,6 +41,8 @@ pub struct FlowbeeLocalData {
|
|||||||
pub flags: u8,
|
pub flags: u8,
|
||||||
/// Recent RTT median
|
/// Recent RTT median
|
||||||
pub rtt: [RttData; 2],
|
pub rtt: [RttData; 2],
|
||||||
|
/// Throughput Buffer
|
||||||
|
pub throughput_buffer: Vec<DownUpOrder<u64>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&FlowbeeData> for FlowbeeLocalData {
|
impl From<&FlowbeeData> for FlowbeeLocalData {
|
||||||
@ -56,6 +58,7 @@ impl From<&FlowbeeData> for FlowbeeLocalData {
|
|||||||
tos: data.tos,
|
tos: data.tos,
|
||||||
flags: data.flags,
|
flags: data.flags,
|
||||||
rtt: [RttData::from_nanos(0); 2],
|
rtt: [RttData::from_nanos(0); 2],
|
||||||
|
throughput_buffer: vec![ data.bytes_sent ],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -200,6 +200,7 @@ impl ThroughputTracker {
|
|||||||
get_flowbee_event_count_and_reset();
|
get_flowbee_event_count_and_reset();
|
||||||
let since_boot = Duration::from(now);
|
let since_boot = Duration::from(now);
|
||||||
let expire = (since_boot - Duration::from_secs(timeout_seconds)).as_nanos() as u64;
|
let expire = (since_boot - Duration::from_secs(timeout_seconds)).as_nanos() as u64;
|
||||||
|
let zeroed = DownUpOrder::zeroed();
|
||||||
|
|
||||||
// Tracker for per-circuit RTT data. We're losing some of the smoothness by sampling
|
// Tracker for per-circuit RTT data. We're losing some of the smoothness by sampling
|
||||||
// every flow; the idea is to combine them into a single entry for the circuit. This
|
// every flow; the idea is to combine them into a single entry for the circuit. This
|
||||||
@ -234,6 +235,8 @@ impl ThroughputTracker {
|
|||||||
this_flow.0.end_status = data.end_status;
|
this_flow.0.end_status = data.end_status;
|
||||||
this_flow.0.tos = data.tos;
|
this_flow.0.tos = data.tos;
|
||||||
this_flow.0.flags = data.flags;
|
this_flow.0.flags = data.flags;
|
||||||
|
let prev_bytes = this_flow.0.throughput_buffer.last().unwrap_or(&zeroed);
|
||||||
|
this_flow.0.throughput_buffer.push(data.bytes_sent.checked_sub_or_zero(*prev_bytes));
|
||||||
if let Some([up, down]) = rtt_samples.get(&key) {
|
if let Some([up, down]) = rtt_samples.get(&key) {
|
||||||
if up.as_nanos() != 0 {
|
if up.as_nanos() != 0 {
|
||||||
this_flow.0.rtt[0] = *up;
|
this_flow.0.rtt[0] = *up;
|
||||||
|
Loading…
Reference in New Issue
Block a user