1月 172012
 

前回のエントリーでは「購入した。」って書いたのですが、今回は実際に FreeBSD で動作確認したことについて書いてみます。

インストールには FreeBSD/amd64 9.0-RELEASE を利用したのですが、その後 9.0-STABLE にしました。なので今の環境は 9.0-STABLE です。そしてこの記事の内容も 9.0-STABLE についてです。気がついた点をツラツラと書いてみます。

1. 温度取れない
どーあがいても CPU 温度が取れません。amdtemp.ko や ports の sysutils/k8temp を利用しても CPU の温度が取れません・・。orz。 CPU のステッピングの問題なのかマザーボード(とか ACPI)の問題なのか定かではありません。ただファンの音だけで大体の温度を感じることしかできません・・。

2. Cool`n’Quiet 2.0 は無事に動作する
sysctrl の dev.cpu.0.freq_levels で CPU 可変になります。ただ、BIOS の設定で表示が二種類できます。前回のエントリで掲載した sysctrl の結果では以下のように表示されています。

dev.cpu.0.freq_levels: 3300/-1 2887/-1 2475/-1 2062/-1 1650/-1 1237/-1 825/-1 412/-1

 
ところが BIOS の設定で HPC (High Performance Computing) というのがあって、この設定を disable にすると以下のように表示されるようになります。

dev.cpu.0.freq_levels: 3300/13635 3000/10925 2625/9559 2400/7417 2100/6489 1800/4620
1575/4042 1400/3195 1225/2795 1050/2396 875/1996 700/1597 525/1198 350/798 175/399

 
BIOS の設定で HPC を無効にしたほうが良いですね。PRIMERGY MX130 S2 というのはラックにドドドと入れて HPC にも対応する製品のようですしね。

ちなみに HPC disable 時の dev.cpu.0.freq_levels の値には消費電力が表示されるようになりましたが、この値はちょっと変ですね。FX-6100 は Max 3.3GHz での動作時には 95W のはずなので、表示されている値を七倍する必要があります。しかし、FX-6100 ってのは CPU クロック変動の幅が広いですなぁ。

3. powerd 起動っ!! しかし・・
上記のように Cool`n’Quiet 2.0 が動作するので powerd を起動したら以下のようなメッセージを延々吐き出すようになってしまいました。

hwpstate0: set freq failed, err 6

 
dev.cpu.0.freq では速度が可変になっているので動作的には問題が無いのですが、結構ウザいです。ウェブで色々探してみると powerd を落とせとか /boot/loader.conf に以下の設定をしろ。みたいに書かれています。

hint.acpi_throttle.0.disabled="1"

 
が、これらの対処法を適用すると CPU クロックが Max の 3.3GHz に張り付いてしまうのでもったいない。じゃ。ということでソースコードを改修し、このログを出ないようにしました;-)。 /usr/src/sys/kern/kern_cpu.c の 406,407 行目の device_printf の部分をコメントアウトしてカーネルを再構築するだけで作業は終了です。ただ単にメッセージを出力しなくするだけの改修です。

4. smartctl でディスクの温度を取る
こちらも BIOS の設定で取れる場合と取れない場合があります。 BIOS の SATA Configuration の設定で External SATA Port を enable にすると smartctl が /dev/ada0 を見つけられなくなります。このオプションは disable にしておいたほうが良いでしょう。

僕は Seagate の ST1000DM003-9YN162 という、 1 テラ、 1 スピンドル、 1TB の HDD を利用しているのですが、smartctl の Airflow_Temperature_Cel を見ると今のところ温度は 20 度前後で推移しているので PC 内の換気が上手く行っているとか HDD 自体の温度が高くならないとか、そんな印象を受けました。

5. シリアルポート
シリアルポートのある PC をいじるのは随分と久しぶりです。随分前から sio0 から uart0 に変更になっているのでどうだろう?と思いトライして見ました。以前よりも設定はグっと楽になりましたね。順番にその設定内容を見ていくことにしましょう。

o. /etc/ttys の変更
ttyu0 というのが uart0 に対応したシリアルポートになります。default の設定から以下のように変更します。

ttyu0 "/usr/libexec/getty std.9600" vt100 on secure

 
速度は 9600 のままとしておきました。

o. /boot/loader.conf に追加設定
以下の行を追加します。

boot_multicons="YES"
hint.uart.0.flags="0x10"
console="comconsole,vidconsole"

 
設定が完了したら PC を再起動します。するとあとは無事にシリアルポートが利用できるようになるかと思います。 /boot.config も設定してないし、boot2 とかも変更する必要がありませんでした。

あ。しかし、uart0 の認識にも二パターンありました。

起動時の認識がこのパターンだと利用できません。

uart0: <Non-standard ns8250 class UART with FIFOs> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0

 
こちらのパターンで認識すると利用できるようになります。

uart0: <16550 or compatible> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
uart0: console (9600,n,8,1)

 
どうして上記のようになるのか解らないのですが、 kldload uart0.ko すると上のようになるような気がします。僕の場合は結局カーネルモジュールは利用せずに、カーネルコンフィグのファイルに device uart と書いてしまいました。

まぁ、 uart に限らず、今回はカスタムカーネルのコンフィグファイルを利用したのですが、 GENERIC カーネルでは無事に動作するのにカスタムカーネル+ロードモジュールでは動作しないということが多々おきました。以下にその一例を書いておきます。

・パーティションを認識してくれなかった -> options GEOM_PART_GPT を消したのを復活
・cs0 を認識せずリブート -> ロードするカーネルモジュールの見直し
・カーネルパニック -> bvox のモジュールを /boot/loader.conf に書くのをやめた

などなど・・。けっこう苦労が多かったのは PC が駄々っ子なのか 9.0-STABLE が駄々っ子なのか・・。もう既に何台も 9.0-STABLE を利用しているので安心しきっていた部分はありましたね。

これでだいたいサーバとしての設定が完了したかなー。と、言う感じはします。良かった。それにしても CPU 温度が取れないのはちょっと痛いですね。STABLE 利用してバージョンが上がるのを待つかなぁ。と言う感じがしないでもないです。

まぁ、僕的には今回のお買い物は一応満足の行くものとなりました。ちなみに今ではもう既に virtualbox-ose-4.0.14 で Windows Server 2008 R2 が動作しています。ゲスト OS には二個の CPU と 4GB のメモリを上げているのですが、そーすると Windows Server 2008 R2 ってのはサクサク動作するんですねぇ。感激;-)。

PRIMERGY MX130 S2 のネタはこれで終りですが、機会があれば、また update があれば書いてみたいと思います。

  7 件のコメント to “PRIMERGY MX130 S2 を FreeBSD で利用する。”

  1. *** amdtemp.c-orij 2011-11-22 14:01:44.000000000 +0900
    — amdtemp.c 2012-02-01 20:30:43.000000000 +0900
    ***************
    *** 76,81 ****
    — 76,83 —-
    #define DEVICEID_AMD_MISC0F 0x1103
    #define DEVICEID_AMD_MISC10 0x1203
    #define DEVICEID_AMD_MISC11 0x1303
    + #define DEVICEID_AMD_MISC14 0x1703
    + #define DEVICEID_AMD_MISC15 0x1603
    static struct amdtemp_product {
    uint16_t amdtemp_vendorid;
    ***************
    *** 84,89 ****
    — 86,93 —-
    { VENDORID_AMD, DEVICEID_AMD_MISC0F },
    { VENDORID_AMD, DEVICEID_AMD_MISC10 },
    { VENDORID_AMD, DEVICEID_AMD_MISC11 },
    + { VENDORID_AMD, DEVICEID_AMD_MISC14 },
    + { VENDORID_AMD, DEVICEID_AMD_MISC15 },
    { 0, 0 }
    };
    ***************
    *** 190,195 ****
    — 194,203 —-
    case 0x10:
    case 0x11:
    break;
    + case 0x14:
    + break;
    + case 0x15:
    + break;
    default:
    return (ENXIO);
    }
    ***************
    *** 281,286 ****
    — 289,302 —-
    sc->sc_gettemp = amdtemp_gettemp;
    break;
    + case 0x14:
    + sc->sc_ntemps = 1;
    + sc->sc_gettemp = amdtemp_gettemp;
    + break;
    + case 0x15:
    + sc->sc_ntemps = 1;
    + sc->sc_gettemp = amdtemp_gettemp;
    + break;
    }
    /* Find number of cores per package. */
    ——————————–
    これで温度取れたらもう獣。じゃない儲け物。実際このCPU持ってないので試してませんがw。
    CPU: AMD E-350 Processor (1600.03-MHz K8-class CPU)だと、温度らしいのが取れてます。
    dev.amdtemp.0.%desc: AMD CPU On-Die Thermal Sensors
    dev.amdtemp.0.%driver: amdtemp
    dev.amdtemp.0.%parent: hostb4
    dev.amdtemp.0.sensor0.core0: 49.3C

  2. tomicsさん。こんばんは。
    パッチ、ありがとうございました。教えていただいたパッチを適用したら amdtemp.ko で見事に温度が取得できるようになりました。。
    > sysctl -a | grep amdtemp
    dev.amdtemp.0.%desc: AMD CPU On-Die Thermal Sensors
    dev.amdtemp.0.%driver: amdtemp
    dev.amdtemp.0.%parent: hostb4
    dev.amdtemp.0.sensor0.core0: 20.0C
    > sysctl -a | grep temperature
    dev.cpu.0.temperature: 20.3C
    dev.cpu.1.temperature: 20.3C
    dev.cpu.2.temperature: 20.3C
    dev.cpu.3.temperature: 20.3C
    dev.cpu.4.temperature: 20.3C
    dev.cpu.5.temperature: 20.3C
    もうばっちりですねぇ;-)。
    それにしても、amdtemo.c のソースコードは眺めもしませんでした。もっと ACPI のレイヤのほうだと思っていたので・・。今回は勉強になりました。
    それにしてもこのパッチ、send-pr はしないのでしょうか?

  3. dev.cpu.N.temperatureの値ってすべて同じ値ではありませんか?
    因みに私の所では常に同じ値が出力されてます。
    本来なら微妙に違う値が出力されてもよさそーなのですが・・・。
    実はこのパッチの原型をhttp://forums.freebsd.org/showthread.php?t=27519 で既に公開していて
    いくつか指摘をもらってます(ちょっと温度が違うんじゃねーの?とか8じゃ動かないとか)
    #ある意味やっつけパッチなのでしょーがないですがw。
    上記の2点が解決出来ればsend-prもいいかなぁ?と思ってます。

  4. tomicsさん。こんばんは。
    なるほど−。もう利用している方がたくさんいらっしゃるわけですね。ちゃんと調べずに済みませんでした。
    それにしても温度、確かに全部一緒ですねぇ(^^;;。けどもまぁ、取れるだけで幸せな部分はあります。六個全部の温度は必要ないので、
    dev.amdtemp.0.sensor0.core0
    だけでも十分なような気がします;-)。

  5. 二台目の PRIMERGY MX130 S2 を購入。

    今年の初め頃に自宅のサーバをリプレスしました。安い値段で PRIMERGY MX…

  6. […] あと、以前の「PRIMERGY MX130 S2 を FreeBSD で利用する。」というエントリで「hwpstate0: set freq failed, err 6」というメッセージが延々と出力される。と書いたことが有りましたが、この NotePC で […]

  7. […] PRIMERGY MX130 S2 を FreeBSD で利用する。   以上で全ての準備が整いました。必要であれば、各サーバをリブートして実際に接続できるか確認してみましょう。 僕の場合は cu(1) コマンド […]

 コメントを書いてください。

HTML タグが利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

(必須項目)

(必須項目)

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)