DragonflyBSD上的能耗管理

dragonflyseallyhs 发布于 2015/07/30 09:44
阅读 260
收藏 0

DragonflyBSD官方微信:BSDchina 或 BSD操作系统 加关注  邮箱:seallyhs@gmail.com

首先介绍一下在DragonflyBSD上的主要功耗管理功能。

 

- ACPI P-state(支持CPU功耗域)。

- ACPI C-state。在相对较新的Intel CPU上(最老的测试过的CPU也是Sandy Bridge的)DragonFlyBSD的做法和其他BSD不一样。DragonFlyBSD不使用I/O端口来进入ACPI C2/C3DragonFlyBSD使用_OSC来告知BIOS操作系统支持native C2/C3BIOS则将ACPI C2/C3mwait C-state映射通过GAS告知DragonFlyBSD。同时GAS中还包含其他信息,比如进入ACPI C3是否需要检查bus master状态。同时从core2开始Intel CPU进入ACPI C3就不需要冲刷cache或者使能bus master仲裁。有了这些先决条件后,进入ACPI C2/C3其实就简化为执行monitor/mwait指令了。

- Intel Performance and Energy Bias Hint。根据Intel软件开发人员手册,这个功能可以提示硬件是偏向性能呢还是偏向节省能耗。

- mwait C-state。这个功能需要mwait的一个扩展(这个扩展在较新的CPU上都有)。但是如果在进入ACPI C3前需要检测bus master状态,冲刷cache或者需要使能bus master仲裁的话,那比mwait C2/0更深的mwait C-state就不能被直接使用。

 

========================

 

ACPI P-state

 

Intel i7-3770 3.40GHzIntel i5-3230M 2.60GHz和很多其他较新的Intel CPU上(Matthew Dillon帮忙测试的),改变ACPI P-state不会降低功耗。在这些Intel CPU上改变ACPI P-state只会影响动态频率,比如在Intel i5-3230M上(系统基本空闲):

ACPI P-state 2601 (TurboBoost):

hw.sensors.cpu0.freq0: 2721627000 Hz (cpu0 freq)

hw.sensors.cpu1.freq0: 2751159000 Hz (cpu1 freq)

hw.sensors.cpu2.freq0: 2627060000 Hz (cpu2 freq)

hw.sensors.cpu3.freq0: 2191103000 Hz (cpu3 freq)

ACPI P-state 2600:

hw.sensors.cpu0.freq0: 2266678000 Hz (cpu0 freq)

hw.sensors.cpu1.freq0: 2401977000 Hz (cpu1 freq)

hw.sensors.cpu2.freq0: 2248562000 Hz (cpu2 freq)

hw.sensors.cpu3.freq0: 2406333000 Hz (cpu3 freq)

ACPI P-state 1200:

hw.sensors.cpu0.freq0: 1197281000 Hz (cpu0 freq)

hw.sensors.cpu1.freq0: 1197340000 Hz (cpu1 freq)

hw.sensors.cpu2.freq0: 1197284000 Hz (cpu2 freq)

hw.sensors.cpu3.freq0: 1197300000 Hz (cpu3 freq)

 

然而在Intel E5-2620 v2 2.10GHz上,改变ACPI P-state可以降低功耗。但是根据我的测试,功耗变化仅限于使能TurboBoost和关闭TurboBoost

ACPI P-state 2101 (TurboBoost): 94.6w

ACPI P-state 2100: 92.5w

ACPI P-state 1200: 92.5w

 

========================

 

Intel Performance and Energy Bias Hint

 

在我测试过的Intel CPU上,调整这个参数基本没用,即没有功耗变化,CPU也没有温度变化。

 

========================

 

ACPI C-state

 

在我测试过的Intel CPU上,ACPI C-state都是映射为mwait C-state的并且不需要bus master操作,因此我们直接进入下一段。

 

========================

 

mwait C-state

 

在我和Matthew Dillon测试过的Intel CPU上,使用mwait C-state都是能够降低功耗的。我测试的几个CPU的功耗:

 

Intel i7-3770 (ACPI P-state 3401):

mwait C1/0: 38.3w

mwait C1/1: 38.3w

mwait C2/0: 37.6w

mwait C3/0: 36.8w

 

Intel i5-3230M (ACPI P-state 2601):

mwait C1/0: 14.7w

mwait C1/1: 14.7w

mwait C2/0: 13.3w

mwait C3/0: 12.9w

mwait C4/0: 12.9w

mwait C4/1: 12.9w

 

Intel E5-2620 v2 (2-way)

(ACPI P-state 2101 TurboBoost):

mwait C1/0: 94.6w

mwait C1/1: 94.6w

mwait C2/0: 93.7w

mwait C3/0: 92.3w

(ACPI P-state 2100~1200):

mwait C1/0: 92.5w

mwait C1/1: 92.5w

mwait C2/0: 85.3w

mwait C3/0: 83.8w

 

基本共通的一点是mwait C1/0mwait C1/1C1E?)是没有功耗区别的。很有可能是因为当所有的core都进入C1后,CPU会进入C1EIntel E5-2600 v2datasheet中有提到)。

 

虽然越深的mwait C-state越是能降低功耗,但是越深的mwait C-state会导致越大的延时。经我测试当CPU进入深度package C-state时,延时可以大到将近40us。以下是不同的mwait C-stateCPU延时测试结果(使用debug.ipiq.latency_test):

 

Intel i7-3770 (ACPI P-state 3401):

mwait C1/0 and C1/1: 760ns

mwait C2/0: 18us

mwait C3/0: 25us

 

Intel i5-3230M (ACPI P-state 2601):

mwait C1/0 and C1/1: 950ns

mwait C2/0: 21us

mwait C3/0, C4/0, C4/1: 26us

 

Intel E5-2620 v2 (2-way)

(ACPI P-state 2101 TurboBoost)

mwait C1/0 and C1/1: 同一物理CPU 2200ns,不同物理CPU 2600ns

mwait C2/0: 同一物理CPU 15us,不同物理CPU 24us

mwait C3/0: 同一物理CPU 33us,不同物理CPU 37us

(ACPI P-state 2100)

mwait C1/0 and C1/1: 同一物理CPU 2200ns,不同物理CPU 2600ns

mwait C2/0: 同一物理CPU 15us,不同物理CPU 22us

mwait C3/0: 同一物理CPU 26us,不同物理CPU 36us

 

Intel E5-2620 v2 (2-way) TurboBoost模式下,在同一物理CPUmwait C2/0mwait C3/0的测试中偶尔出现60us的延时(目前我还没有发现原因)。

 

如果你的应用对延时比较敏感,那使用较深的mwait C-state时要注意。

 

--------

 

在有些情况下使用较深的mwait C-state既能降低能耗又能让你的系统运行的更快!我发现在一些情况下较深的mwait C-state可以让负载较高的CPU睿频到更高的频率。以下是我在Intel E5-2620 v2 (2-way) (ACPI P-state 2101 TurboBoost)的测试结果:

 

make -j 48 -DNO_MODULES buildkernel KERNCONF=LINT64

 

强制所有的CPU在空闲时使用mwait C1/0。以上命令花费的时间:182

make depend时的功耗:110w

make depend时的CPU主频:2.37GHz

完全运行时的功耗:161w

完全运行时的主频:2.4GHz

 

强制所有的CPU在空闲时使用mwait C3/0。以上命令花费的时间:180秒(快了2秒!)

make depend时的功耗:106w(省了4w

make depend时的CPU主频:2.57GHz(高了200MHz

完全运行时的功耗:161w

完全运行时的主频:2.4GHz

加载中
返回顶部
顶部