cpufreqとpowerdを使ってサーバの熱対策と省エネを実現する
夏に向けて、ML115の温度対策をするために、cpufreqとpowerdを使ってCPU動作周波数の制御を試してみた。CPU動作周波数が下がれば、発熱も減ってハッピーになれるはず。
さて、うちのML115は、Opteron 1210を搭載している。AMDはPowerNow!という名前でCPUの動作周波数制御機能を作ってるけど、このOpteronにもそれが搭載されてる。FreeBSDではdmesgを見ると、以下のように認識されていることがわかる。
CPU: Dual-Core AMD Opteron(tm) Processor 1210 (1800.01-MHz K8-class CPU) Origin = "AuthenticAMD" Id = 0x40f33 Stepping = 3 Features=0x178bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2,HTT> Features2=0x2001<SSE3,CX16> AMD Features=0xea500800<SYSCALL,NX,MMX+,FFXSR,RDTSCP,LM,3DNow!+,3DNow!> AMD Features2=0x1f<LAHF,CMP,SVM,ExtAPIC,CR8> Cores per package: 2 省略 cpu0: <ACPI CPU> on acpi0 powernow0: <PowerNow! K8> on cpu0 cpu1: <ACPI CPU> on acpi0 powernow1: <PowerNow! K8> on cpu1
さて、PowerNow!に対応していることはわかったけど、FreeBSDから制御できなきゃ意味がない。FreeBSDからCPU動作周波数を制御するために、cpufreqというフレームワークを使う。これを使ってCPU動作周波数を負荷によって動的に変更するのがpowerd。cpufreqはGENERIC kernelで有効にされてるので、powerdを起動すれば動作周波数変更の恩恵にすぐに与れる。
/etc/rc.confに以下を記述して、powerdを起動しよう。
powerd_enable="YES"
動作周波数は、sysctlで確認できる。1GHzと1.8GHzの2段階で切り替え可能、現在は1GHzで動作していることが分かる。あとはportsのbuildでもやって、1.8GHzに切り替わっていることを確認しておけばOK。
> sysctl dev.cpu | grep freq dev.cpu.0.freq: 1000 dev.cpu.0.freq_levels: 1800/100000 1000/39776
暇なときはCPUにものんびり動いてもらって、発熱を抑えてエコに生活しよう。