微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Linux 2.6 内核中的电源管理技术

Linux 2.6 内核中的电源管理技术

时间:12-06 来源:互联网 点击:

和 CPU 相关的变频驱动程序的开发可以相互独立进行,并在最大限度上实现代码重用,内核开发人员在编写和试验新的 governor 时不会再陷入到某款特定 CPU 的变频技术的硬件实现细节中去,而 CPU 生产厂商在向 Linux 内核中添加支持其特定的 CPU 变频技术的代码时只需提供一个相对来说简单了很多的驱动程序,而不必考虑在各种不同的应用场景中如何选择合适的运行频率这些复杂的问题.

内核中的 cpufreq 子系统通过 sysfs 文件系统向上层应用提供了用户接口,对于系统中的每一个 CPU 而言,其 cpufreq 的 sysfs 用户接口位于 /sys/devices/system/cpu/cpuX/cpufreq/ 目录下,其中 X 代表 processor id ,与 /proc/cpuinfo 中的信息相对应.以cpu0 为例,用户一般会在该目录下观察到以下文件:

$ ls -F /sys/devices/system/cpu/cpu0/cpufreq/

affected_cpus

cpuinfo_cur_freq

cpuinfo_max_freq

cpuinfo_min_freq

ondemand/

scaling_available_frequencies

scaling_available_governors

scaling_cur_freq

scaling_driver

scaling_governor

scaling_max_freq

scaling_min_freq

stats/

这其中的所有可读文件都可以使用 cat 命令进行读操作,另外所有可写文件都可以使用 echo 命令进行写操作.其中cpuinfo_max_freq 和 cpuinfo_min_freq 分别给出了CPU 硬件所支持的最高运行频率及最低运行频率, cpuinfo_cur_freq 则会从 CPU 硬件寄存器中读取 CPU 当前所处的运行频率.虽然 CPU 硬件支持多种不同的运行频率,但是在有些场合下用户可以只选择使用其中的一个子集,这种控制是通过scaling_max_freq 和 scaling_min_freq 进行的.Governor在选择合适的运行频率时只会在 scaling_max_freq 和scaling_min_freq 所确定的频率范围内进行选择,这也就是scaling_available_frequencies 所显示的内容.与cpuinfo_cur_freq 不同, scaling_cur_freq 返回的是cpufreq 模块缓存的 CPU 当前运行频率,而不会对 CPU 硬件寄存器进行检查. scaling_available_governors 会告诉用户当前有哪些 governors 可供用户使用,而 scaling_driver 则会显示该 CPU 所使用的变频驱动程序. Stats 目录下给出了对 CPU 各种运行频率的使用统计情况,例如 CPU 在各种频率下的运行时间以及在各种频率之间的变频次数. Ondemand 目录则与 ondemand governor 相关,在后文会进行相应的介绍.

通过以上的介绍,大家对如何使用 cpufreq 通过 sysfs 提供的用户接口已经有了大致的了解,但是对于绝大部分用户而言,逐一操作这些文件既费力又耗时.因此 Dominik 等人开发了cpufrequtils 工具包[2],为用户提供了更加简便的对内核cpufreq 子系统的操作接口.通过 cpufreq-info 的输出,读者可以很清楚的看到刚刚在上面介绍过的/sys/devices/system/cpu/cpuX/cpufreq/ 目录下各个文件的内容.

$ cpufreq-info

cpufrequtils 002: cpufreq-info (C) Dominik Brodowski

2004-2006

Report errors and bugs to linux@brodo.de>linux@brodo.de, please.

analyzing CPU 0:

driver: acpi-cpufreq

CPUs which need to switch frequency at the same time:

0 1

hardware limits: 1000 MHz - 1.67 GHz

available frequency steps: 1.67 GHz, 1.33 GHz, 1000

MHz

available cpufreq governors: userspace, conservative,

ondemand, powersave, performance

current policy: frequency should be within 1000 MHz

and 1.67 GHz.

The governor “ondemand” may decide which

speed to use

within this range.

current CPU frequency is 1000 MHz.

analyzing CPU 1:

driver: acpi-cpufreq

CPUs which need to switch frequency at the same time:

0 1

hardware limits: 1000 MHz - 1.67 GHz

available frequency steps: 1.67 GHz, 1.33 GHz, 1000

MHz

available cpufreq governors: userspace, conservative,

ondemand, powersave, performance

current policy: frequency should be within 1000 MHz

and 1.67 GHz.

The governor “ondemand” may decide which

speed to use

within this range.

current CPU frequency is 1000 MHz.

Ondemand governor 的由来及其实现刚刚我们在 cpufreq-info 的输出中可以看到 cpufreq 子系统一共提供了五种 governors 供用户选择使用,它们分别是 userspace,conservative,ondemand,powersave 和performance.在最新的内核中如果用户不进行额外设置的话,ondemand 会被作为默认的 governor 使用.为了理解是什么原因造成了这种现状,我们在这里带领读者回顾一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top