@@ -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