一、应用态参数介绍
/sys/devices/system/cpu/cpu0/cpufreq/
affected_cpus //当前策略作用于哪些online core
cpuinfo_cur_freq //当前CPU硬件频率
cpuinfo_max_freq //CPU硬件支持的最低频率
cpuinfo_min_freq //CPU硬件支持的最高频率
cpuinfo_transition_latency //硬件支持的切换频率最小间隔
related_cpus //online和offline core
scaling_available_frequencies //软件支持的频率列表
scaling_available_governors //支持的策略列表
scaling_cur_freq //软件设置的当前频率,通常与cpuinfo_cpus相同,如果出现硬件问题可能导致不一致
scaling_driver //当前使用的driver
scaling_governor //当前使用的governor
scaling_max_freq //软件governor设置的最高频率
scaling_min_freq //软件governor设置的最低频率
scaling_setspeed //需将governor类型切换为userspace,才会出现,通过echo修改数值,会切换主频
二、scaling_available_frequencies 频率列表
governor支持的频率列表是哪里来的呢。因为频率不是随意设置的,governor计算使用的频率,需要在频率支持列表中,在嵌入式中这个列表是在设备树中定义的。那么在x86 桌面系统中,这里是在哪里定义的呢
1、首先在drivers/cpufreq 中搜索关键字scaling_available_frequencies
231 static ssize_t show_available_freqs(struct cpufreq_policy *policy, char *buf,
232 bool show_boost)
233 {
234 ssize_t count = 0;
235 struct cpufreq_frequency_table *pos, *table = policy->freq_table;
236
237 if (!table)
238 return -ENODEV;
239
240 cpufreq_for_each_valid_entry(pos, table) {
241 /*
242 * show_boost = true and driver_data = BOOST freq
243 * display BOOST freqs
244 *
245 * show_boost = false and driver_data = BOOST freq
246 * show_boost = true and driver_data != BOOST freq
247 * continue - do not display anything
248 *
249 * show_boost = false and driver_data != BOOST freq
250 * display NON BOOST freqs
251 */
252 if (show_boost ^ (pos->flags & CPUFREQ_BOOST_FREQ))
253 continue;
254
255 count += sprintf(&buf[count], "%d ", pos->frequency);
256 }
257 count += sprintf(&buf[count], "\n");
258
259 return count;
260
261 }
可以看到这个参数是从,freq_table 获取到的。
2、继续搜索关键字freq_table,找到关键函数acpi_cpufreq_cpu_init
650 static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
{
...
690 result = acpi_processor_register_performance(pe