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

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

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

CPU 无法正常执行指令.读者如果简单的计算一下不难发现,即使对于一个主频为 1GHz 的 CPU 而言, 250 微秒也意味着 250,000 个时钟周期,在这期间 CPU 完全可以执行完上万条指令.因此从这个角度而言,简单的降低采样分析的时间间隔对系统性能带来的负面影响更加严重.幸运的是随着硬件技术的不断完善和改进,对 CPU 进行变频设置所需的操作时间已经显着降低,例如 Intel 最新的 Enhanced Speedstep 技术在对 CPU 进行变频设置时耗时已降至 10 微秒,下降了不止一个数量级.正是这种 CPU 硬件技术的发展为内核开发人员解决这些早期的遗留问题提供了契机,Venkatesh 等人提出并设计实现了一个新的名为 ondemand 的 governor ,它正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的 governor.在介绍 ondemand governor 的具体实现之前,我们先来看一下如何使用 ondemand governor 及其向用户提供了哪些操作接口.通过 cpufreq-set 将 ondemand 设置为当前所使用的 governor 之后,在 /sys/devices/system/cpu/cpuX/cpufreq 目录下会出现一个名为 ondemand 的子目录

$ sudo cpufreq-set -g ondemand

$ ls /sys/devices/system/cpu/cpu0/cpufreq/ondemand/

ignore_nice_load

powersave_bias

sampling_rate

sampling_rate_max

sampling_rate_min

up_threshold

$ sudo cat sampling_rate_min sampling_rate

sampling_rate_max

40000

80000

40000000

$ sudo cat up_threshold

30

在这个子目录下名字以 sampling 打头的三个文件分别给出了ondemand governor 允许使用的最短采样间隔,当前使用的采样间隔以及允许使用的最长采样间隔,三者均以微秒为单位.

以笔者的电脑为例, ondemand governor 每隔 80 毫秒进行一次采样.另外比较重要的一个文件是 up_threshold ,它表明了系统负载超过什么百分比时ondemand governor 会自动提高CPU 的运行频率.以笔者的电脑为例,这个数值为 30% .那么这个表明系统负载的百分比数值是如何得到的呢?在支持Intel 最新的 Enhanced Speedstep 技术的 CPU 中,在处理器硬件中直接提供了两个 MSR 寄存器(Model Specific Register)供 ondemand governor 采样分析系统负载情况使用.这两个 MSR 寄存器的 名字分别为 IA32_MPERF 和 IA32_APERF[5] ,其中 IA32_MPERF MSR 中的 MPERF 代表Maximum Performance , IA32_APERF MSR 中的 APERF 代表Actual Performance .就像这两个 MSR 的名字一样, IA32_MPERF MSR 寄存器是一个当 CPU 处在 ACPI C0 状态下时按照 CPU 硬件支持的最高运行频率每隔一个时钟周期加一的计数器;IA32_APERF MSR 寄存器是一个当 CPU 处在 ACPI C0 状态下时按照 CPU 硬件当前的实际运行频率每隔一个时钟周期加一的计数器.有了这两个寄存器的存在,再考虑上 CPU 处于ACPI C0 和处于 ACPI C1、C2、C3 三种状态下的时间比例,也就是 CPU 处于工作状态和休眠状态的时间比例, ondemand governor 就可以准确的计算出 CPU 的负载情况了.

得到了 CPU 的负载情况,接下来的问题就是如何选择 CPU 合适的运行频率了.刚刚在前面提到,当系统负载超过up_threshold 所设定的百分比时, ondemand governor 将会自动提高 CPU 的运行频率,但是具体提高到哪个频率上运行呢?在 ondemand governor 监测到系统负载超过 up_threshold所设定的百分比时,说明用户当前需要 CPU 提供更强大的处理能力,因此 ondemand governor 会将CPU设置在最高频率上运行,这一点社区中的开发人员和广大用户都没有任何异议.但是当 ondemand governor 监测到系统负载下降,可以降低 CPU 的运行频率时,到底应该降低到哪个频率呢? ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率,例如笔者使用的 CPU 支持三个可选频率,分别为 1.67GHz、 1.33GHz 和 1GHz ,如果 CPU 运行在 1.67GHz 时ondemand governor 发现可以降低运行频率,那么 1.33GHz 将被选作降频的目标频率.这种降频策略的主导思想是尽量减小对系统性能的负面影响,从而不会使得系统性能在短时间内迅速降低以影响用户体验.但是在 ondemand governor 的这种最初实现版本在社区发布后,大量用户的使用结果表明这种担心实际上是多余的, ondemand governor 在降频时对于目标频率的选择完全可以更加激进.因此最新的 ondemand governor 在降频时会在所有可选频率中一次性选择出可以保证 CPU 工作在 80% 以上负荷的频率,当然如果没有任何一个

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

网站地图

Top