さとうです。 何年ぶりかでのこの MLへのメールですが、せっかく作ったので...
powernow, hwpstate で周波数変更が可能な AMD の CPU で、周波数とコア電圧を device.hints の設定でデフォルトから変更できるようにする cpufreq ドライバの パッチつくりました。 以下に置いてますので、試してみたい方はどうぞ。 http://configure.sh/FreeBSD/cpufreq-j.html 少なくとも、うちの ML115 G5 では問題なく動作していますが、他の環境(H/W)で マトモに動作するかは分かりません。自己責任で。:p device.hints ファイルにて次のように指定すると、変更できます。 周波数やコア電圧そのものをバリっと書くのではなく、BIOS のデフォルトから どれだけ*ずらす*か、という考え方での設定になります。 ------------------------------------------------------------------- hint.{drivername}.0.adjfreq=XXX 全 P-state において、周波数をデフォルトから XXX MHz 変更する。 hint.{drivername}.0.adjfreqN=XXX P-state N において、周波数をデフォルトから XXX MHz 変更する。 hint.{drivername}.0.adjvcore=XXX 全 P-state において、コア電圧をデフォルトから XXX mV 変更する。 hint.{drivername}.0.adjvcoreN=XXX P-state N において、コア電圧をデフォルトから XXX mV 変更する。 #{drivername} は、"powernow" または "hwpstate" #FreeBSD7系は、powernow のみ。 ------------------------------------------------------------------ 全体を ±○MHz, ±○mV という調整のほか、P-state ごとの調整ができるように なってますので、 . フルパワーで動作させる時はオーバークロックして(BlackEdition な CPU じゃないとダメですけど)パフォーマンスを得る。 . アイドル状態の時は逆にデフォルトよりもさらに周波数・電圧を下げて 節電する。 なんてことができます。(例2) ○ 例1 OS : FreeBSD 8.0-BETA2 H/W: HP ProLiant ML115 G5 CPU: Athlon 1640B (2.7GHz) /boot/device.hints の設定 ======================================================================== hint.powernow.0.adjvcore="-200" -> (全P-stateの)コア電圧をデフォルトから -200mV に設定する。 hint.powernow.0.adjfreq="-100" -> (全P-stateの)周波数をデフォルトから -100MHz に設定する。 hint.powernow.0.adjfreq0="0" -> P-state0 のみ周波数をデフォルトとする。 ======================================================================== dmesg の結果 ======================================================================== Copyright (c) 1992-2009 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 8.0-BETA2 #56: Sun Aug 23 10:34:37 JST 2009 juni...@shiga.pn.junichi.org:/usr/src/sys/amd64/compile/SHIGA WARNING: WITNESS option enabled, expect reduced performance. Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: AMD Athlon(tm) Processor 1640B (2700.02-MHz K8-class CPU) Origin = "AuthenticAMD" Id = 0x70ff2 Stepping = 2 Features=0x78bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2> Features2=0x2001<SSE3,CX16> AMD Features=0xea500800<SYSCALL,NX,MMX+,FFXSR,RDTSCP,LM,3DNow!+,3DNow!> AMD Features2=0x11d<LAHF,SVM,ExtAPIC,CR8,Prefetch> real memory = 2147483648 (2048 MB) avail memory = 4105457664 (3915 MB) ACPI APIC Table: <HP ProLiant> ioapic0 <Version 1.1> irqs 0-23 on motherboard kbd1 at kbdmux0 acpi0: <HP ProLiant> on motherboard acpi0: [ITHREAD] acpi0: Power Button (fixed) acpi0: reservation of fec00000, 1000 (3) failed acpi0: reservation of fee00000, 1000 (3) failed Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x2008-0x200b on acpi0 acpi_hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0 Timecounter "HPET" frequency 25000000 Hz quality 900 .... cpu0: <ACPI CPU> on acpi0 powernow0: <PowerNow! K8> on cpu0 powernow0: P-state0: 2700MHz->2700MHz, 1350mV->1150mV powernow0: P-state1: 2600MHz->2500MHz, 1325mV->1125mV powernow0: P-state2: 2400MHz->2300MHz, 1275mV->1075mV powernow0: P-state3: 2200MHz->2100MHz, 1225mV->1025mV powernow0: P-state4: 2000MHz->1900MHz, 1175mV->975mV powernow0: P-state5: 1800MHz->1700MHz, 1125mV->925mV powernow0: P-state6: 1000MHz->900MHz, 1100mV->900mV ... ======================================================================== sysctl dev.cpu.0.freq_levels の結果 ======================================================================== dev.cpu.0.freq_levels: 2700/50000 2500/46381 2300/39643 2100/33545 1900/28057 1700/23148 900/12249 ======================================================================== ○ 例2 OS: FreeBSD 8.0-BETA3 H/W: HP ProLiant ML115 G5 CPU: Phenom 9850 Black Edition (2.5GHz) /boot/device.hints の設定 ======================================================================== hint.hwpstate.0.adjfreq0="200" -> P-state0 の周波数をデフォルトから +200MHz に設定する。(オーバークロック) hint.hwpstate.0.adjfreq1="-350" -> P-state1 の周波数をデフォルトから -350MHz に設定する。 hint.hwpstate.0.adjvcore1="-175" -> P-state1 のコア電圧をデフォルトから -175mV に設定する。 ======================================================================== dmesg の結果 ======================================================================== Copyright (c) 1992-2009 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD is a registered trademark of The FreeBSD Foundation. FreeBSD 8.0-BETA3 #0: Mon Aug 24 23:29:36 JST 2009 juni...@shiga.pn.junichi.org:/usr/src/sys/amd64/compile/SHIGA WARNING: WITNESS option enabled, expect reduced performance. Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: AMD Phenom(tm) 9850 Quad-Core Processor (2500.02-MHz K8-class CPU) Origin = "AuthenticAMD" Id = 0x100f23 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=0x802009<SSE3,MON,CX16,POPCNT> AMD Features=0xee500800<SYSCALL,NX,MMX+,FFXSR,Page1GB,RDTSCP,LM,3DNow!+,3DNow!> AMD Features2=0x7ff<LAHF,CMP,SVM,ExtAPIC,CR8,ABM,SSE4A,MAS,Prefetch,OSVW,IBS> TSC: P-state invariant real memory = 5100273664 (4864 MB) avail memory = 4105482240 (3915 MB) ACPI APIC Table: <HP ProLiant> FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs FreeBSD/SMP: 1 package(s) x 4 core(s) cpu0 (BSP): APIC ID: 0 cpu1 (AP): APIC ID: 1 cpu2 (AP): APIC ID: 2 cpu3 (AP): APIC ID: 3 ioapic0 <Version 1.1> irqs 0-23 on motherboard kbd1 at kbdmux0 acpi0: <HP ProLiant> on motherboard acpi0: [ITHREAD] acpi0: Power Button (fixed) acpi0: reservation of fec00000, 1000 (3) failed acpi0: reservation of fee00000, 1000 (3) failed Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000 acpi_timer0: <24-bit timer at 3.579545MHz> port 0x2008-0x200b on acpi0 acpi_hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0 Timecounter "HPET" frequency 25000000 Hz quality 900 ... cpu0: <ACPI CPU> on acpi0 hwpstate0: P-state0: 2500MHz->2700MHz, 1300mV->1300mV hwpstate0: P-state1: 1250MHz->900MHz, 1050mV->875mV hwpstate0: <Cool`n'Quiet 2.0> on cpu0 cpu1: <ACPI CPU> on acpi0 cpu2: <ACPI CPU> on acpi0 cpu3: <ACPI CPU> on acpi0 ... ======================================================================== sysctl dev.cpu.0.freq_levels の結果 ======================================================================== dev.cpu.0.freq_levels: 2700/30940 900/1848 ======================================================================== --- 佐藤 淳一 juni...@junichi.org