Skip to content

Commit 1dc8437

Browse files
committed
feat: 缓解迁移问题
1 parent d9388c3 commit 1dc8437

File tree

1 file changed

+43
-13
lines changed

1 file changed

+43
-13
lines changed

src/cpu_common/mod.rs

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -131,20 +131,50 @@ impl Controller {
131131
#[cfg(debug_assertions)]
132132
debug!("change freq: {}", control);
133133

134-
for cpu in &mut self.cpu_infos {
135-
let cpu_usage = cpu
136-
.cpu_usage()
137-
.max_by(|a, b| a.partial_cmp(b).unwrap_or(cmp::Ordering::Equal))
138-
.unwrap_or_default();
139-
let usage_tracking_sugg_freq = (cpu.cur_freq as f32 * cpu_usage / 100.0 / 0.5) as isize; // target_usage: 50%
140-
let policy_freq = cpu
141-
.cur_freq
142-
.saturating_add(control)
143-
.min(usage_tracking_sugg_freq)
144-
.clamp(0, self.max_freq);
134+
let fas_freqs: HashMap<_, _> = self
135+
.cpu_infos
136+
.iter_mut()
137+
.map(|cpu| {
138+
let cpu_usage = cpu
139+
.cpu_usage()
140+
.max_by(|a, b| a.partial_cmp(b).unwrap_or(cmp::Ordering::Equal))
141+
.unwrap_or_default();
142+
let usage_tracking_sugg_freq =
143+
(cpu.cur_freq as f32 * cpu_usage / 100.0 / 0.5) as isize; // target_usage: 50%
144+
(
145+
cpu.policy,
146+
cpu.cur_freq
147+
.saturating_add(control)
148+
.min(usage_tracking_sugg_freq)
149+
.clamp(0, self.max_freq),
150+
)
151+
})
152+
.collect();
153+
154+
let fas_freq_max = fas_freqs.values().max().copied().unwrap();
155+
156+
#[cfg(debug_assertions)]
157+
debug!(
158+
"policy{} freq: {}",
159+
self.cpu_infos.last().unwrap().policy,
160+
fas_freq_max
161+
);
162+
163+
let _ = self
164+
.cpu_infos
165+
.last_mut()
166+
.unwrap()
167+
.write_freq(fas_freq_max, &mut self.file_handler);
168+
169+
// skip P cores
170+
for cpu in self.cpu_infos.iter_mut().rev().skip(1) {
171+
let freq = fas_freqs.get(&cpu.policy).copied().unwrap();
172+
let freq = freq.max(fas_freq_max * 80 / 100);
173+
145174
#[cfg(debug_assertions)]
146-
debug!("policy{} freq: {}", cpu.policy, policy_freq);
147-
let _ = cpu.write_freq(policy_freq, &mut self.file_handler);
175+
debug!("policy{} freq: {}", cpu.policy, freq);
176+
177+
let _ = cpu.write_freq(freq, &mut self.file_handler);
148178
}
149179
}
150180

0 commit comments

Comments
 (0)