重村法克です。

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&sect=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.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
-

        以上よろしくお願いいたします。

メールによる返信