This commit is contained in:
rchac committed 2026-03-20 03:27:35 +00:00
1 parent ca9659bf22
commit a14d4bc99e
2 files changed
+77 -5

No files matched your search

+5 -1
View File
@@ -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),
+72 -4
View File
@@ -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();