smectic_gの日記

2010-02-21

[][][]zfs bootかつCAM化

結構面倒くさかったというか,なんで現状うまく起動出来ているのかが謎過ぎるくらいに危ういので,メモ.

基本的には

404 Not Found

の手順を参考に,FreeBSD 8-RELEASEをインストール

その後,FreeBSD 9-CURRENTにあげる.

ここで,うっかりZFSのversionをv14にあげてしまって,起動できなくするのだけど,Google グループの手順で復活.

その後,FreeBSD 9-CURRENTで,AHCI to CAMを有効にしてコンパイル

cd /usr/src/sys/amd64/conf
cp GENERIC WITH_CAM
vi WITH_CAM # ATA関係を消した上で,device ahciを追加.
cd /usr/src
make buildkernel KERNCONF=WITH_CAM
make installkernel KERNCONF=WITH_CAM

ここで,再起動をかけると,案の定ルートのマウントに失敗する.ともかく,ドライブの割当が変わってるので,それに対応して/boot/zfs/zpool.cacheを書き換えてあげる必要がある.

起動ディスク単独だとどうにもならないので,ルートのマウントに失敗して,手動でマウントポイントを指定する画面でrescue用に作ってある(FreeBSD 9-CURRENTが入っている)USBスティックを突っ込んで,ルートとしてマウントさせる(ufs:/dev/da0s1a とでも入力する).

このUSBスティックはAHCI to CAMを有効にしていないので,最初からこれで起動しても/boot/zfs/zpool.cacheの書き換えは出来ない.こういうねじれた状態でも,一度CAMを有効にしたシステムで起動して,ルートのマウントに失敗させた状態でマウントさせればOK.素直に,CAM有効かつUFSなUSBスティックを作って起動させてもOKといえばOK.

この状態で,

zpool export <pool名>
zpool import -a -f

とすると,ルートでimportされたZFS上の/boot/zfs/zpool.cacheが書き換えられて,以降普通に起動するようになる.

この方法はちょっと危うすぎるので,

zpool export <pool名>
zpool import <pool名> -R /mnt/ 
cp /boot/zfs/zpool.cache /mnt/boot/zfs/zpool.cache

とした方が安全かも知れない.

懸案だった消費電力は

/boot/loader.conf

cpufreq_load="YES"

kern.hz=250

hint.acpi_throttle.0.disabled=1

hint.acpi_throttle.1.disabled=1

hint.acpi_throttle.2.disabled=1

hint.acpi_throttle.3.disabled=1

/etc/rc.conf

powerd_enable="YES"

performance_cx_lowest="C2"

economy_cx_lowest="C2"

で,Linuxよりは少し消費電力が高いけど,アイドル34W.

cpufreqをわざわざ有効にしないといけないってのは盲点.

ただ,結局無線LAN経由のTS再生の問題は解決せず.アイドル消費電力(といっても,再生時もほとんど変わらない)と,OSX上のvlc 1.0.5で再生した時の状況をまとめると,

kern.hzアイドル消費電力(W)TS再生時の状況
10032-33ほとんど再生できない
25034-36ときどき途切れる
30039-40ときどき途切れる
50040-41問題なし
100040-41問題なし

というような感じ.マシン構成はH55を買ってみた. - smectic_gの日記にあるとおりで,ネットワークカードの周期が100Hzなので,100だといろいろかち合うのかなと想像.

2010-02-13

[][]実はFreeBSDのclarkdale supportは問題を抱えているんじゃなかろうか.

まず,Linux(debian.Mutoさん作のlenny-custom-0116を使用.kernel 2.6.32)だと,

  • C1 stateはほとんど採用されず
  • C2 stateは非対応
  • C3 stateは比較的頻繁に採用

となるものが,FreeBSDだと通常のネットワークパフォーマンスを維持するために必要なkern.hz=1000だと,

  • C1 stateをほぼ採用
  • C2 stateはほとんど使用されず
  • C3 stateは存在しない

となる.ちょっとおかしい.

latencyを見ると,単にLinuxでのC3がFreeBSDのC2であるだけかも知れないので,たいした問題ではないかも知れない.

ただ,LinuxがC3 stateをレイテンシを維持しながら比較的うまく使うように調教されているのは確か.その結果,Linuxだとアイドル32Wを達成できるものが,FreeBSDだと46Wになる.

だいたい,冷静に考えればC3 stateに入ってしまっても254usで復活するのだから,1msごとの割り込みでも気にせずC3 state(FreeBSdであればC2 state)に問題無用で入れてしまっていいはずなのだが.よくわからない.

Linux

~$ cat /proc/acpi/processor/CPU*/power
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00004595] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00051364] duration[00000000013374181166]
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
>states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00007076] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00050811] duration[00000000013346051667]
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00003030] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00026452] duration[00000018460058369295]
active state:            C0
max_cstate:              C8
maximum allowed latency: 2000000000 usec
states:
    C1:                  type[C1] promotion[--] demotion[--] latency[003] usage[00006084] duration[00000000000000000000]
    C2:                  <not supported>
    C3:                  type[C3] promotion[--] demotion[--] latency[245] usage[00026253] duration[00000000013283923573]

FreeBSD(kern.hz=1000)

dev.cpu.0.cx_supported: C1/3 C2/245
dev.cpu.0.cx_lowest: C2
dev.cpu.0.cx_usage: 100.00% 0.00% last 500us
dev.cpu.1.cx_supported: C1/3 C2/245
dev.cpu.1.cx_lowest: C2
dev.cpu.1.cx_usage: 100.00% 0.00% last 500us
dev.cpu.2.cx_supported: C1/3 C2/245
dev.cpu.2.cx_lowest: C2
dev.cpu.2.cx_usage: 100.00% 0.00% last 500us
dev.cpu.3.cx_supported: C1/3 C2/245
dev.cpu.3.cx_lowest: C2
dev.cpu.3.cx_usage: 100.00% 0.00% last 500us

追記

ついでに言っておくと,FreeBSDは周波数の表示もおかしい

$ sudo sysctl -a dev.cpu.0.freq_levels
dev.cpu.0.freq_levels: 2926/9125
$ sudo sysctl -a dev.cpu.0.freq
dev.cpu.0.freq: 2926

2010-01-23

[][][][]CAM対応 FreeBSD

2010年1月4日 AHCI to CAMおよびATA to CAMを有効にする方法 :FreeBSD Daily Topics|gihyo.jp … 技術評論社を参考に,FreeBSD 8-stableにして,kernelを再構築したらあっけなくうまくいった.

といっても,使用前のベンチを取りわすれたので,あんま意味がないが,記録用に張っておく.

  • zfs raidz
  • SAMSUNG HD154UI*3
Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
fileserver.smec 12G   108  99 93200  30 63342  19   273  99 146630  20  94.1  15
Latency               457ms    7794ms    9355ms   53985us    2281ms    1651ms
Version  1.96       ------Sequential Create------ --------Random Create--------
fileserver.smectic_ -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 20625  95 +++++ +++ 17373  96 19135  97 +++++ +++ 15371  96
Latency             20195us     149us     193us   40508us   62877us     289us
1.96,1.96,fileserver.smectic_g.com,1,1264266532,12G,,108,99,93200,30,63342,19,273,99,146630,20,94.1,15,16,,,,,20625,95,+++++,+++,17373,96,19135,97,+++++,+++,15371,96,457ms,7794ms,9355ms,53985us,2281ms,1651ms,20195us,149us,193us,40508us,62877us,289us

実パフォーマンスはともかく,ネットワークディスクとしての転送速度の安定感がだいぶ改善した.

今までは,ファイルコピーを複数連続でやっていると(もしくは,MacBookでTS再生中にTime Machine発動とか),無線LAN経由のMPEG-TSの再生が途切れたりしたのだけど,CAM化して,NCQが有効になってからはほとんど途切れなくなった.また,複数ファイルコピーしたときに転送速度がふらつく感じもほぼ消滅.

その後

$ df -h
Filesystem           Size    Used   Avail Capacity  Mounted on
/dev/ada0s1a         496M    489M    -33M   107%    /
devfs                1.0K    1.0K      0B   100%    /dev
/dev/ada0s1e         496M    222K    456M     0%    /tmp
/dev/ada0s1f          46G    4.8G     38G    11%    /usr
/dev/ada0s1d         6.7G    181M    6.0G     3%    /var
share                2.3T    1.1T    1.2T    49%    /share
share/timemachine    150G     58G     92G    38%    /share/timemachine

好調かと思いきや,こんな明後日なことになってしまいました(/dev/ada0s1aのavailability).大丈夫かよFreeBSD

2010-01-11

[][][]FreeBSDの省電力設定

蛇の道は蛇ということで,i3 530を使ったのに46Wという惨状を省電力スレで嘆いたら,

TuningPowerConsumption - FreeBSD Wiki

というページを教えてもらう.

昨日のマシンをwindows 7で起動するとだいたいアイドルが29Wくらいになるので,46Wというのはいろいろとありえないのは明確だった.が,何をいじればいいんだよということで,上のページを参考にいろいろと考えてみた.

で,いじってみてわかったのはC2 stateは有効になっているものの,ほとんど使われていないということ.

dev.cpu.0.cx_supported: C1/3 C2/245
dev.cpu.0.cx_lowest: C2
dev.cpu.0.cx_usage: 100.00% 0.00% last 500us
dev.cpu.1.cx_supported: C1/3 C2/245
dev.cpu.1.cx_lowest: C2
dev.cpu.1.cx_usage: 100.00% 0.00% last 500us
dev.cpu.2.cx_supported: C1/3 C2/245
dev.cpu.2.cx_lowest: C2
dev.cpu.2.cx_usage: 100.00% 0.00% last 500us
dev.cpu.3.cx_supported: C1/3 C2/245
dev.cpu.3.cx_lowest: C2
dev.cpu.3.cx_usage: 100.00% 0.00% last 500us

これを改善するには割り込みを抑えることで,無理やりC2に持ってくようにするしかなかった.最終的な/boot/loader.confは

kern.hz=100 # きわめて有効(10Wくらい)
# hint.p4tcc.0.disabled=1 を有効にすると,EISTが有効にならなくなるのでダメ
hint.acpi_throttle.0.disabled=1 # 有効(C2が効果的に使えてる状態で5Wくらい)
hw.pci.do_power_nodriver=3 # 効かない

という感じ.これで,

dev.cpu.0.cx_supported: C1/3 C2/245
dev.cpu.0.cx_lowest: C2
dev.cpu.0.cx_usage: 9.47% 90.52% last 1979us
dev.cpu.1.cx_supported: C1/3 C2/245
dev.cpu.1.cx_lowest: C2
dev.cpu.1.cx_usage: 7.72% 92.27% last 9762us
dev.cpu.2.cx_supported: C1/3 C2/245
dev.cpu.2.cx_lowest: C2
dev.cpu.2.cx_usage: 7.76% 92.23% last 1446us
dev.cpu.3.cx_supported: C1/3 C2/245
dev.cpu.3.cx_lowest: C2
dev.cpu.3.cx_usage: 8.03% 91.96% last 659us

と結構な割合でC2にいるようになって,その結果,アイドルが32W.gccコンパイル時が75W前後に.


追記

現在運用中のファイルサーバに上の設定を適用してみたところ,

アイドル 66W(C1のみ,hz=1000)->61W(C2有効,hz=100)->61W(C3有効,hz=100)

なんか思ったより変わらない.でもまあ,コストが小さいC2まで有効で運用しようということで.

追記2

kern.hz=100だと,無線LAN経由の動画再生でかくつくようになったので,結局kern.hz=1000に戻す.アイドル時は64W.

追記3(2010-1-31)

BSDをCAM運用にして,動画再生時のかくつきが明らかに減ったので,kern.hz=100でも問題ないかと試してみたが,やっぱだめ.ノートPCみたいに,ユーザーのアクセスをもって動作するような用途や,ファイルコピーみたいにレイテンシがあっても問題のない用途ならいいんだろうけど,ファイルサーバ用途では低いkern.hzは致命的な模様.BSDももうちょっと賢く消費電力を減らして欲しいよ.

追記4 (2010-2-13)

debian(lenny, mutoさんバージョン)を入れてみたが,アイドル32Wで無線LAN経由でのTSファイル再生も問題なくできた.ファイル再生時も消費電力は32Wと変化なしなのは興味深い.このまま,次期ファイルサーバはlinux+btrfsで作ってみようかと思いつつも,やっぱテストのみだよなあ.怖すぎて.

2010-01-10

[][][]H55を買ってみた.

Intel DH55TC+i3 530でPCを一台組んでみたのだが,FreeBSD 8.0-RELEASEだと,オンボードのLANが認識されない(たぶんem0として認識されるはずなのに,ifconfigだとplip0とlo0しか出てこない.というか,plip0ってなんだよ).普通にインストールできて起動もするので,インストールした後にportsを一つ一つ入れようというところでようやく気がついた.

現在ファイルサーバに積んでいるintelのネットワークボードを刺してしまえば使えるんだろうけど,なんか間抜けだ.

それにしても,GPU関係や,SATA関係は普通に動くのに,なんでネットワークのみ動かないかな.HDDを購入するまで,計算用PCとして利用しようと思ってたのだけど,これではそれも出来ない.linuxだと普通に動くのかな.

追記

どうも,P55以降のintelマザーに付いている82578DCが鬼門らしい.

Linuxだと,kernel 2.6.31以降が何も考えないで動かすには必要みたい.

FreeBSDでは

Download Intel® Network Adapter Gigabit Base Driver for FreeBSD*

のREADMEに82758DCの記述があるので,動くのではないかと期待して突っ込んでみる予定.

追記2

上のドライバを普通にmakeするだけでネットワークは認識できるようになった.

ただ,今度はpowerdがうまく動かないことが判明.fileserverとしての運用は当分先だなあという印象.

何が起こるかというと,

  • 何もしてないのに,loadが50%とか表示される
    • topを見ると10.1%がpowerdの実行待ち(interrupt)で消費されているけど,基本的には0%なので,変.
    • というか,powerdがinterruptでCPUを消費するのがあり得ない.
  • CPU周波数の目標が5852MHzになる.そんな周波数ありえないのに.ということで,周波数が最大周波数に張り付く.

そんなわけで,SSDしか積んでいないのにアイドル46Wという情けない数値をたたき出してくれる.勘弁して下さい.

さらに追記

powerdのモードが標準であるhighadaptiveだと,上のような変なことになるみたいで,powerd -a adaptiveとすると,普通に動く.

でも,アイドル時の消費電力は46Wのまま….なんじゃそりゃ.

CPU】 i3 530 1.86GHz
【M/B】 DH55TC
【電源】KRPW-VII-600
【FAN】 120mm*1 140mm*1
【VGA】 オンボード
【HDD】 ADATA SSD 300
【メモリ】 DDR3 1333 2GB*2
【Sound】 オンボ
【LAN】 オンボ(82758DC)
【OS】 FreeBSD 8.0-RELEASE
【光学ドライブ】なし

アイドル 46W

gccコンパイル中 58-79W

HDDつんでないことを考えると,微妙.