前回のエントリーでは「購入した。」って書いたのですが、今回は実際に 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 の結果では以下のように表示されています。
|
ところが BIOS の設定で HPC (High Performance Computing) というのがあって、この設定を disable にすると以下のように表示されるようになります。
|
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 を起動したら以下のようなメッセージを延々吐き出すようになってしまいました。
|
dev.cpu.0.freq では速度が可変になっているので動作的には問題が無いのですが、結構ウザいです。ウェブで色々探してみると powerd を落とせとか /boot/loader.conf に以下の設定をしろ。みたいに書かれています。
|
が、これらの対処法を適用すると 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 の設定から以下のように変更します。
|
速度は 9600 のままとしておきました。
o. /boot/loader.conf に追加設定
以下の行を追加します。
|
設定が完了したら PC を再起動します。するとあとは無事にシリアルポートが利用できるようになるかと思います。 /boot.config も設定してないし、boot2 とかも変更する必要がありませんでした。
あ。しかし、uart0 の認識にも二パターンありました。
起動時の認識がこのパターンだと利用できません。
|
こちらのパターンで認識すると利用できるようになります。
|
どうして上記のようになるのか解らないのですが、 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 があれば書いてみたいと思います。
*** 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
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 はしないのでしょうか?
dev.cpu.N.temperatureの値ってすべて同じ値ではありませんか?
因みに私の所では常に同じ値が出力されてます。
本来なら微妙に違う値が出力されてもよさそーなのですが・・・。
実はこのパッチの原型をhttp://forums.freebsd.org/showthread.php?t=27519 で既に公開していて
いくつか指摘をもらってます(ちょっと温度が違うんじゃねーの?とか8じゃ動かないとか)
#ある意味やっつけパッチなのでしょーがないですがw。
上記の2点が解決出来ればsend-prもいいかなぁ?と思ってます。
tomicsさん。こんばんは。
なるほど−。もう利用している方がたくさんいらっしゃるわけですね。ちゃんと調べずに済みませんでした。
それにしても温度、確かに全部一緒ですねぇ(^^;;。けどもまぁ、取れるだけで幸せな部分はあります。六個全部の温度は必要ないので、
dev.amdtemp.0.sensor0.core0
だけでも十分なような気がします;-)。
二台目の PRIMERGY MX130 S2 を購入。
今年の初め頃に自宅のサーバをリプレスしました。安い値段で PRIMERGY MX…
[…] あと、以前の「PRIMERGY MX130 S2 を FreeBSD で利用する。」というエントリで「hwpstate0: set freq failed, err 6」というメッセージが延々と出力される。と書いたことが有りましたが、この NotePC で […]
[…] PRIMERGY MX130 S2 を FreeBSD で利用する。 以上で全ての準備が整いました。必要であれば、各サーバをリブートして実際に接続できるか確認してみましょう。 僕の場合は cu(1) コマンド […]