mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2026-10-26 06:40:05 -05:00
changes
This commit is contained in:
1 parent
ca9659bf22
commit
a14d4bc99e
2 files changed
+77
-5
No files matched your search
@@ -432,6 +432,10 @@ fn detect_from_cpuid(possible: &[u32]) -> Option<ResolvedHybridCpuTopology> {
|
||||
#[cfg(target_arch = "x86_64")]
|
||||
use std::arch::x86_64::__cpuid_count;
|
||||
|
||||
if __cpuid_count(0, 0).eax < 0x1a {
|
||||
return None;
|
||||
}
|
||||
|
||||
let original_affinity = sched_getaffinity(Pid::from_raw(0)).ok()?;
|
||||
let restore_affinity = original_affinity;
|
||||
let mut performance = Vec::new();
|
||||
@@ -448,7 +452,7 @@ fn detect_from_cpuid(possible: &[u32]) -> Option<ResolvedHybridCpuTopology> {
|
||||
return None;
|
||||
}
|
||||
|
||||
let leaf = unsafe { __cpuid_count(0x1a, 0) };
|
||||
let leaf = __cpuid_count(0x1a, 0);
|
||||
let core_type = (leaf.eax >> 24) & 0xff;
|
||||
match core_type {
|
||||
CPUID_CORE_TYPE_CORE => performance.push(*cpu),
|
||||
|
||||
@@ -436,8 +436,11 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn link_does_not_virtualize_when_cpu_low() {
|
||||
let cpu = TreeguardCpuConfig::default();
|
||||
fn link_does_not_virtualize_when_cpu_low_in_cpu_aware_mode() {
|
||||
let cpu = TreeguardCpuConfig {
|
||||
mode: TreeguardCpuMode::CpuAware,
|
||||
..TreeguardCpuConfig::default()
|
||||
};
|
||||
let links = TreeguardLinksConfig::default();
|
||||
let qoo_cfg = TreeguardQooConfig::default();
|
||||
let state = LinkState::default();
|
||||
@@ -460,6 +463,34 @@ mod tests {
|
||||
assert_eq!(decision, LinkVirtualDecision::NoChange);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn link_virtualizes_when_cpu_low_in_traffic_rtt_only_mode() {
|
||||
let cpu = TreeguardCpuConfig::default();
|
||||
let links = TreeguardLinksConfig::default();
|
||||
let qoo_cfg = TreeguardQooConfig::default();
|
||||
let state = LinkState::default();
|
||||
let decision = decide_link_virtualization(LinkVirtualizationInput {
|
||||
now_unix: 1000,
|
||||
allowlisted: true,
|
||||
cpu_max_pct: Some(10),
|
||||
cpu_cfg: &cpu,
|
||||
links_cfg: &links,
|
||||
qoo_cfg: &qoo_cfg,
|
||||
rtt_missing: false,
|
||||
qoo: DownUpOrder {
|
||||
down: Some(100.0),
|
||||
up: Some(100.0),
|
||||
},
|
||||
util_ewma_pct: DownUpOrder { down: 1.0, up: 1.0 },
|
||||
sustained_idle: true,
|
||||
state: &state,
|
||||
});
|
||||
assert_eq!(
|
||||
decision,
|
||||
LinkVirtualDecision::Set(LinkVirtualState::Virtual)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn link_unvirtualizes_on_util_spike() {
|
||||
let cpu = TreeguardCpuConfig::default();
|
||||
@@ -694,8 +725,11 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn circuit_reverts_when_cpu_low() {
|
||||
let cpu = TreeguardCpuConfig::default();
|
||||
fn circuit_reverts_when_cpu_low_in_cpu_aware_mode() {
|
||||
let cpu = TreeguardCpuConfig {
|
||||
mode: TreeguardCpuMode::CpuAware,
|
||||
..TreeguardCpuConfig::default()
|
||||
};
|
||||
let circuits = TreeguardCircuitsConfig::default();
|
||||
let qoo_cfg = TreeguardQooConfig::default();
|
||||
let state = CircuitState {
|
||||
@@ -727,6 +761,40 @@ mod tests {
|
||||
assert_eq!(decision.up, Some(CircuitSqmState::Cake));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn circuit_does_not_revert_when_cpu_low_in_traffic_rtt_only_mode() {
|
||||
let cpu = TreeguardCpuConfig::default();
|
||||
let circuits = TreeguardCircuitsConfig::default();
|
||||
let qoo_cfg = TreeguardQooConfig::default();
|
||||
let state = CircuitState {
|
||||
down: CircuitDirectionState {
|
||||
desired: CircuitSqmState::FqCodel,
|
||||
..Default::default()
|
||||
},
|
||||
up: CircuitDirectionState {
|
||||
desired: CircuitSqmState::FqCodel,
|
||||
..Default::default()
|
||||
},
|
||||
};
|
||||
|
||||
let decision = decide_circuit_sqm(CircuitSqmInput {
|
||||
now_unix: 1000,
|
||||
allowlisted: true,
|
||||
cpu_max_pct: Some(10),
|
||||
cpu_cfg: &cpu,
|
||||
circuits_cfg: &circuits,
|
||||
qoo_cfg: &qoo_cfg,
|
||||
rtt_missing: false,
|
||||
qoo: DownUpOrder {
|
||||
down: Some(90.0),
|
||||
up: Some(90.0),
|
||||
},
|
||||
state: &state,
|
||||
});
|
||||
assert_eq!(decision.down, None);
|
||||
assert_eq!(decision.up, None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn circuit_missing_rtt_does_not_block_downgrade_when_idle() {
|
||||
let cpu = TreeguardCpuConfig::default();
|
||||
|
||||
Reference in new issue
Block a user