重村法克です。 On Mon, 03 Nov 2008 07:51:21 +0900 anno...@gmail.com wrote: >Phenom/opteron{1,2,8}3XXなcpufreqを作ってみました。 >まだβバージョンですが。
最近 Phenom II を手に入れたのでテストしてみました。 > current mailing listに投稿しても > なんというか、私の英語がひどいのかそれとも、 > 以前のpstate.cがひどかったのか、それともかなり間があいたからなのか > というかんじなものですから、こちらにも投稿させていただきます。 ちょいと見てみましたが, 使ってる人が少ない感じかな。という気がします。 あの辺だと jkim 氏あたり捕まえるのがいいかも。 > ベロニカさんの所ではうまくいったのですが、cghostsさんの所では > うまくいかないみたいでした。PHKさんの所ではどうなのかわかりません。 > currentのamd64でもためしているのでamd64でも大丈夫だと思います。 私の環境でもあまり安定しませんね。数秒でフリーズしてしまいます。 ちなみに動作確認環境は 8-current で amd64 です。 > なにぶんはじめてのカーネルモジュールなのでいたらないところ > こうしたほうがいいところなど指摘してくださると > うれしいです。 1. Phenom CPU を直接ご指名のようですが, Phenom II では動きませんで した。詳細はよくわかってないのですが, K10 アーキテクチャ全般で有効な ら P-state invariant TSC のコードを参考に下記のように変更してし まうのがいいかもしれません。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- hwpstate.c.orig 2009-02-26 02:46:11.000000000 +0900 +++ hwpstate.c 2009-02-27 02:54:04.000000000 +0900 @@ -15,6 +15,8 @@ #include <sys/proc.h> #include <dev/pci/pcivar.h> #include <machine/md_var.h> +#include <machine/cputypes.h> +#include <machine/specialreg.h> #include <contrib/dev/acpica/acpi.h> #include <dev/acpica/acpivar.h> @@ -238,14 +240,9 @@ return (ENXIO); } sc = device_get_softc(dev); - switch (cpu_id) { - case 0x100f2A: /* family 10h rev.DR-BA */ - case 0x100f22: /* family 10h rev.DR-B2 */ - case 0x100f23: /* family 10h rev.DR-B3 */ - break; - default: + if (cpu_vendor_id != CPU_VENDOR_AMD || AMD64_CPU_FAMILY(cpu_id) < 0x10) return (ENXIO); - } + msr = rdmsr(MSR_AMD10H_LIMIT); sc->cfnum = AMD10H_GET_PSTATE_MAX_VAL(msr); if (sc->cfnum == 0) { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2. カーネルモジュールしかできないということでしたので, kernel configuration に組み込むパッチを作りました。参考までに。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --- sys/conf/files.amd64.orig 2009-02-16 05:24:21.000000000 +0900 +++ sys/conf/files.amd64 2009-02-26 02:49:23.693819088 +0900 @@ -270,5 +270,6 @@ i386/cpufreq/powernow.c optional cpufreq i386/cpufreq/est.c optional cpufreq i386/cpufreq/p4tcc.c optional cpufreq +i386/cpufreq/hwpstate.c optional cpufreq # libkern/memset.c standard --- sys/conf/files.i386.orig 2009-02-16 05:24:21.000000000 +0900 +++ sys/conf/files.i386 2009-02-27 15:01:42.024721231 +0900 @@ -248,6 +248,7 @@ i386/cpufreq/p4tcc.c optional cpufreq i386/cpufreq/powernow.c optional cpufreq i386/cpufreq/smist.c optional cpufreq +i386/cpufreq/hwpstate.c optional cpufreq #i386/i386/apic_vector.s optional apic i386/i386/atomic.c standard \ compile-with "${CC} -c ${CFLAGS} ${DEFINED_PROF:S/^$/-fomit-frame-pointer/} ${.IMPSRC}" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 3. ソースの COPYRIGHT がないですね。全体的に style(9) に準拠しきれて いません。COPYRIGHT は /usr/share/examples/etc/bsd-style-copyright を参考にしてください。[id for your version control system, if any] は $FreeBSD$ に置き換えるといいです。style(9) は下記 URL を参考にして ください。 http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=style&dir=jpman-7.1.2%2Fman§=9 4. とりあえず dmesg でも。 フリーズした瞬間は, P2 state にいたのがさらに P2 state に移行しようとし て…を繰り返してという感じな動きになっているというか。P1 state は問題ない のかな。debug.cpufreq.lowest 指定してそれ以上下がらないようにするのが正 解か調べてみます。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CPU: AMD Phenom(tm) II X4 940 Processor (3511.86-MHz K8-class CPU) Origin = "AuthenticAMD" Id = 0x100f42 Stepping = 2 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=0x37ff<LAHF,CMP,SVM,ExtAPIC,CR8,ABM,SSE4A,MAS,Prefetch,OSVW,IBS,SKINIT,WDT> TSC: P-state invariant Cores per package: 4 : cpu0: <ACPI CPU> on acpi0 acpi_throttle0: <ACPI CPU Throttling> on cpu0 hwpstate0: <Cool`n'Quiet 2.0> on cpu0 hwpstate0: SVI mode hwpstate0: you have 4 P-state. hwpstate0: freq=3500MHz volts=1350mV hwpstate0: freq=2300MHz volts=1250mV hwpstate0: freq=1800MHz volts=1150mV hwpstate0: freq=800MHz volts=1000mV hwpstate0: Now P0-state. cpu1: <ACPI CPU> on acpi0 hwpstate1: <Cool`n'Quiet 2.0> on cpu1 hwpstate1: SVI mode hwpstate1: you have 4 P-state. hwpstate1: freq=3500MHz volts=1350mV hwpstate1: freq=2300MHz volts=1250mV hwpstate1: freq=1800MHz volts=1150mV hwpstate1: freq=800MHz volts=1000mV hwpstate1: Now P0-state. cpu2: <ACPI CPU> on acpi0 hwpstate2: <Cool`n'Quiet 2.0> on cpu2 hwpstate2: SVI mode hwpstate2: you have 4 P-state. hwpstate2: freq=3500MHz volts=1350mV hwpstate2: freq=2300MHz volts=1250mV hwpstate2: freq=1800MHz volts=1150mV hwpstate2: freq=800MHz volts=1000mV hwpstate2: Now P0-state. cpu3: <ACPI CPU> on acpi0 hwpstate3: <Cool`n'Quiet 2.0> on cpu3 hwpstate3: SVI mode hwpstate3: you have 4 P-state. hwpstate3: freq=3500MHz volts=1350mV hwpstate3: freq=2300MHz volts=1250mV hwpstate3: freq=1800MHz volts=1150mV hwpstate3: freq=800MHz volts=1000mV hwpstate3: Now P0-state. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 以上よろしくお願いいたします。