‘機材’ カテゴリーのアーカイブ

FreeBSD 7.1 + Microsoft iSCSI Initiator / MCSパッチの新しいの

2008年11月30日 日曜日

更新>MCS/MPIO/64bitLBAパッチ 2008/12/25版

いつもエラーが出て気になっていたので修正しました(汗)

パッチファイル: iscsi-target-20081129-patch.bz2
更新版をご利用ください。

# cd /usr/ports/net/iscsi-target
# make clean
# make patch
# bzcat < /path/to/iscsi-target-20081129-patch.bz2 | patch -p0
# make
# make install

-C 最大接続コネクション数(デフォルト4)
-P 接続可能なポータルのIPアドレス(カンマ区切り)

設定例は以前の投稿をどうぞ。

いわゆる仕様:
ネットマスクはまだ対応していないので0/0が必要です。
全てのIPアドレスが同じポート番号でグループ1のネットワークポータルになります。
ポート番号は従来の-pオプションで変更可能ですがグループ番号は固定です。

主な修正点:
正常ログアウト及びフェールオーバー時にシーケンス番号が
上書きされないようになりました。
再接続した場合に旧スレッドを破棄するようになりました。

NEC Express5800/110Ge にCore 2 Quad Q6600(G0)を載せてみる

2008年11月20日 木曜日

以前書いた予定通りCPUを載せ替えしてみました。
ついでにシャドウベイに9cmFANを追加しました。

Intel Core 2 Quad Q6600(G0ステップ)
65nm/TDP95W/FSB1066MHz/2.4GHz/キャッシュ8MB/4コア

KAMA-FLEX9cm SA0925FDB12M (2000rpm)

Core2Quad Q6600搭載後の消費電力は、
電源投入直後=>最大256W
FreeBSD loginプロンプト=>134W
ZFS上でddを1個起動=>186W
ZFS上でbzip2圧縮を4個起動=>198W

Core2Quad Q6600にしたらkvmが足りなくなりました(汗)
とりあえずシングルモードでkmem_sizeを下げて起動、
カーネルコンフィグを以下のように修正しました。
もし起動しなくなったらブートローダから手動で設定するか、
シングルモードで変更します。
↓のKVAは2KB/ページです。

Kernel CONFIG

include PAE
options KVA_PAGES=1152
nomakeoptions   NO_MODULES
makeoptions     MODULES_OVERRIDE="opensolaris zfs"
device          iscsi_initiator

/boot/loader.conf

vm.kmem_size_max="1536M"
vm.kmem_size="1536M"
vfs.zfs.arc_max="512M"
vfs.zfs.vdev.cache.size="20M"

フリーメモリの確認

# sysctl -a | grep kvm
vm.kvm_free: 253751296
vm.kvm_size: 2415915008

さっそくportsにあるbenchmarks/unixbenchを使って確認してみました。
オリジナルのExpress5800/110GeとCPU換装後の110Geと
参考にPentium4/2.2GHzで過去にとったデータです。
換装後にかけたZFS上でのdd結果もあわせて置いておきます。

見ての通りCore2ベースのCeleronならPentium4など余裕で勝てます。
マルチコアであきらかに向上してるのがわかるのが「Shell Scripts (8 concurrent)」(8プロセス並列実行)逆に下げたのが「Pipe-based Context Switching」ですね。

Q6600/ZFS raidz2(used 242GB) 書込 164.6MB/s 読込 326.6MB/s

RAID5/6の処理は重いですから、そういうのが必要ならCPU換装は有意義でしょう。
ハードウェアRAIDやソフトウェアミラーリングならCeleronでも十分使えると思う。
少なくともNetBurstのPentium4/DやCeleron300番台のマシンを置き替えるにはCPU換装前でも十分なスペックです。(消費電力的にも)
どうしてもシングルコアが気になるなら、
Pentium Dual-Core E2180 (2GHz/FSB800MHz/キャッシュ1MB/2コア)
Celeron Dual-Core E1400 (2GHz/FSB800MHz/キャッシュ512KB/2コア)
あたりを流用すれば安上がりにできると思う。
もちろんCPUを新規に買えるなら、
Pentium Dual-Core E5200(45nm/2.5GHz/FSB800MHz/キャッシュ2MB/2コア)
で決まりでしょうけど。

FreeBSD 7.1 Celeron 430 1.8GHz(FSB800MHz)

                     INDEX VALUES
TEST                                        BASELINE     RESULT      INDEX

Dhrystone 2 using register variables        116700.0  7486225.1      641.5
Double-Precision Whetstone                      55.0     1393.2      253.3
Execl Throughput                                43.0     1475.9      343.2
File Copy 1024 bufsize 2000 maxblocks         3960.0    40582.0      102.5
File Copy 256 bufsize 500 maxblocks           1655.0    10889.0       65.8
File Copy 4096 bufsize 8000 maxblocks         5800.0   135959.0      234.4
Pipe Throughput                              12440.0   553194.4      444.7
Pipe-based Context Switching                  4000.0   163170.9      407.9
Process Creation                               126.0     5515.3      437.7
Shell Scripts (8 concurrent)                     6.0      319.0      531.7
System Call Overhead                         15000.0   393876.6      262.6
                                                                 =========
     FINAL SCORE                                                     284.2

FreeBSD 7.1 C2Q Q6600 2.4GHz(FSB1066MHz)

                     INDEX VALUES
TEST                                        BASELINE     RESULT      INDEX

Dhrystone 2 using register variables        116700.0 10259315.6      879.1
Double-Precision Whetstone                      55.0     1884.9      342.7
Execl Throughput                                43.0     2296.9      534.2
File Copy 1024 bufsize 2000 maxblocks         3960.0    62334.0      157.4
File Copy 256 bufsize 500 maxblocks           1655.0    16523.0       99.8
File Copy 4096 bufsize 8000 maxblocks         5800.0   214088.0      369.1
Pipe Throughput                              12440.0   773740.0      622.0
Pipe-based Context Switching                  4000.0   129334.0      323.3
Process Creation                               126.0     5957.7      472.8
Shell Scripts (8 concurrent)                     6.0     1176.1     1960.2
System Call Overhead                         15000.0   539478.0      359.7
                                                                 =========
     FINAL SCORE                                                     414.8

FreeBSD 7.0 Pentium4 2.2GHz(FSB400MHz)

                     INDEX VALUES
TEST                                        BASELINE     RESULT      INDEX

Dhrystone 2 using register variables        116700.0  3613977.9      309.7
Double-Precision Whetstone                      55.0      808.0      146.9
Execl Throughput                                43.0      241.2       56.1
File Copy 1024 bufsize 2000 maxblocks         3960.0    20026.0       50.6
File Copy 256 bufsize 500 maxblocks           1655.0     5179.0       31.3
File Copy 4096 bufsize 8000 maxblocks         5800.0    63677.0      109.8
Pipe Throughput                              12440.0   257737.5      207.2
Pipe-based Context Switching                  4000.0    80782.8      202.0
Process Creation                               126.0     3264.5      259.1
Shell Scripts (8 concurrent)                     6.0       99.0      165.0
System Call Overhead                         15000.0   189032.5      126.0
                                                                 =========
     FINAL SCORE                                                     123.3
# dd if=/dev/zero of=image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 24.878161 secs (172640062 bytes/sec)
# dd of=/dev/null if=image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 12.542709 secs (342427409 bytes/sec)

FreeBSD 7.1 + Microsoft iSCSI Initiator / Multiple Connections per Session(MCS)

2008年11月19日 水曜日

更新>MCS/MPIO/64bitLBAパッチ 2008/12/25版

Microsoft iSCSI Initiator Users Guide によると
現バージョンでサポートしている冗長化は
Multiple Connections per Session(MCS)
Microsoft MPIO support
だそうな。

iscsi-targetは1コネクション(TCP)を1スレッド、
当該セッションパラメータをスレッドに埋め込みで管理しています。
もし複数スレッド間でパラメータを共有できればMCSが容易になります。
でもそこまで作りこむのはかなり時間がかかりそうなので、
動作確認の意味も込めて、スレッド内のSCSIコマンド処理前に
各スレッドから必要なシーケンス番号をコピーするという
なんちゃって同期機能をつけて対応(笑)
この動作の前提として複数スレッドが同時に同じシーケンス番号を
更新しないとすごく期待しています。
一般化するなら送受信スレッドとパケット処理スレッドを作って、
FIFOキューでつなぐのがいいと思ってるけどどうでしょ。

用意するもの:
LANを2ポート以上装備したマシン2台
スイッチングハブ2台
iscsi-targetのパッチファイル iscsi-target-20081118-patch.bz2
更新版をご利用ください。

# cd /usr/ports/net/iscsi-target
# make patch
# bzcat < iscsi-target-20081118-patch.bz2 | patch -p0
# make
# make install

-C 最大接続コネクション数(デフォルト4)
-P 接続可能なポータルのIPアドレス(カンマ区切り)

いわゆる仕様:
ネットマスクはまだ対応していないので0/0が必要です。
全てのIPアドレスが同じポート番号でグループ1のネットワークポータルになります。
ポート番号は従来の-pオプションで変更可能ですがグループ番号は固定です。
最初に接続したコネクションが壊れるとおかしくなります。

~参考設定~
ターゲットにはしばらくブログに書いてきたExpress5800/110Geに
Intel PRO 1000/PT Desktop Adapter を増設して利用しました。
http://www.intel.com/products/server/adapters/pro1000pt/pro1000pt-overview.htm
ホストはWindows Server 2008に同型カードを挿しました。
それぞれのカードのIPアドレスを別のネットワークにして、
スイッチングハブをそれぞれに独立して接続します。
(参考設定では192.168.2.0/24と192.168.3.0/24を利用)

ターゲット側(FreeBSD7.1):
/etc/rc.conf

ifconfig_em0="inet 192.168.3.36  netmask 255.255.255.0"
ifconfig_em0_alias0="inet 192.168.3.37  netmask 255.255.255.255"
ifconfig_em1="inet 192.168.2.36  netmask 255.255.255.0"
ifconfig_em1_alias0="inet 192.168.2.37  netmask 255.255.255.255"

iscsi_target_enable="YES"
iscsi_target_flags="-s 32 -C 4 -P 192.168.2.36,192.168.3.36,192.168.2.37,192.168.3.37"

/usr/local/etc/iscsi/targets

extent0         /tank/iscsi/iscsi-target0       0       80GB
extent1         /tank/iscsi/iscsi-target1       0       80GB
target0                 rw      extent0         192.168.2.0/24
target1                 rw      extent1         0/0

ホスト側(WindowsServer2008):
オンボードLANに192.168.2.33/24を、
Intel PRO 1000/PTに192.168.3.33/24を割り当てました。

ログインするときに[詳細設定]でローカルアダプタ、ソースIP、
ターゲットポータルを指定します。

接続できたら、[詳細]でセッションのプロパティを開き、[接続]を押します。

[追加]を押します。

ソースIP、ターゲットポータルを別のものを指定します。

負荷分散ポリシーを適当に変更する。

設定はこんな感じですが、先に述べた通り最初のコネクションが
すべてのデータを持っているのでこれが死ぬと復帰できなくなります。
とりあえず動くところを見ないとね。

MATSHITA DVD-RAM SW-9590AをWindows2000で使ってみる

2008年11月17日 月曜日

せっかく付いてきたので別のマシンで使ってみた。
このドライブにはソフトは付いていないので、
Windows2000で動くDVDプレーヤーとライティングソフトを探してみた。

Media Player Classic(の日本語リソース化)
http://not.s53.xrea.com/xite/memo/mpc.html
CDBurnerXP(日本語を含むマルチランゲージ)
http://cdburnerxp.se/

DVD鑑賞とDVDイメージを書込みをしてみたけど使える。
問題が起きないと特に書くべき事がない。
これは良い事だけどね。

NEC Express5800/110Ge + WD5000AAKS + FreeBSD 7.1 ZFS/iSCSI/NFS(iSCSI/NFSの準備)

2008年11月15日 土曜日

FreeBSDでは7.1の時点でshareiscsiプロパティがサポートされていません。
iSCSIターゲットはportsのiscsi-targetを手動で利用しなくてはいけません。

# cd /usr/ports/net/iscsi-target/
# make; make install; make clean

/etc/rc.conf

iscsi_target_enable="YES"

ZFSの領域を作成してその中にイメージを置く。
/usr/local/etc/iscsi/targets

extent0         /tank/iscsi/iscsi-target0       0       80GB
target0         rw      extent0         192.168.2.0/24

iscsi-targetはZFSの設定が終るまで起動しないようにします。

# zfs create tank/iscsi
# /usr/local/etc/rc.d/iscsi_target start

NFSを利用するマシンの間にファイアウォールを使う場合は、
ポート番号をなにかしらに固定しないとひどい事になります。
-pオプションによりポート指定ができます。
なお、rpcbindは111、nfsdは2049で最初から固定です。

NFSサーバ側:
/etc/rc.conf

nfs_server_enable="YES"
rpcbind_enable="YES"
mountd_enable="YES"
↓例としてポートを822に固定してみる
mountd_flags="-r -p 822"

libwarpを使っているrpcbindの制御を特定IPだけに許可します。
ここで許可したIPでなおかつ/etc/exportsでマッチするクライアントが
NFSサーバに接続できます。
例では192.168.2.0/24にクライアントがいると仮定しています。
(注意:インストール初期状態ではALL : ALL : allowですべてのサービスが
 すべてのIPに許可されています。この行をコメント化して後の行を有効にするか、
 最初から自分ですべて書きます。)

/etc/hosts.allow

rpcbind : 192.168.2.0/255.255.255.0 : allow
rpcbind : ALL : deny

/etc/exportsは特に設定する必要はありません。
エクスポート設定はZFS上のプロパティとして設定します。
(システムが動的に/etc/zfs/exportsを作成し再読込させます)

NFS用の各デーモンを起動しますが、依存関係があるため起動順序が重要です。
わからなくなったらマシンを再起動してしまいましょう。
(rcorder /etc/rc.d/* というコマンドで順番はわかります)

# /etc/rc.d/rpcbind start
# /etc/rc.d/nfsserver start
# /etc/rc.d/mountd start
# /etc/rc.d/nfsd start

実際にポートマップがどうなっているのかは、

# rpcinfo -p

を実行するとわかります。

NFSクライアント側:
/etc/rc.conf

nfs_client_enable="YES"

設定したら起動します。

# /etc/rc.d/nfsclient start

ついでなのでsambaも入れてみた。
ここではsambaの設定はメインではないので詳細は書きませんが、
ゲストアクセスが必要な場合は、map to guest = Bad User のような
設定をグローバルにいれて、パーミッションを設定しておく。
ゲストはnobodyによるアクセスになるのでそのユーザで書込み可能にしておく。

# cd /usr/ports/net/samba3
# make; make install; make clean

/usr/local/etc/smb.conf

[global]
   workgroup = MYGROUP
   unix charset = eucjp-ms
   dos charset = cp932                

[public]
   comment = Public Stuff
   path = /tank/samba/public
   public = yes
   writable = yes

NFSによる/usr/portsの共有例:
NFSサーバ側(hera)

↓nfs用の領域を作成
# zfs create tank/nfs
↓マウント位置をデフォルト(/tank/nfs)から/nfsに移動
# zfs set mountpoint=/nfs tank/nfs
↓ports用の領域を作成し、圧縮機能ONにする
(マウントは上位のtank/nfsから継承するので/nfs/portsになる)
# zfs cretae tank/nfs/ports
# zfs set compression=on tank/nfs/ports
↓sharenfsでNFSの共有設定を指定する(/etc/exportsと同じ書式)
# zfs set sharenfs='-maproot=root -network 192.168.2.0 -mask 255.255.255.0' tank/nfs/ports
↓自分自身でマウントして最新portsを作成する
# mount hera:/nfs/ports /usr/ports
# portsnap fetch
# portsnap extract

NFSクライアント側

↓普通にマウントするだけ
# mount hera:/nfs/ports /usr/ports

ZFSボリュームの作成例(ZILがあると低速でまともに使えない):

↓4GBのボリューム作成(4GBの領域をストレージプールから予約)
# zfs create -V 4G tank/swap
↓作成したボリュームをスワップとして使って見る
# swapon /dev/zvol/tank/swap
↓起動時に自動マウントする為にプロパティを設定
# zfs set org.freebsd:swap=on tank/swap
↓不足するならいつでも領域拡大可能(ここでは8GBに拡大)
# zfs set volsize=8G tank/swap

※現バージョンでは/dev/zvol/への連続書込みは、
ボリュームブロックサイズ?の128kB毎にログ(ZIL:ZFS Intent Log)の
コミットが常時発生する為にとてつもなく遅いです。
(デフォルト設定を安全側にするのは悪くない)
もしも予期せぬサーバダウン時に更新が消失してもいいなら、

vfs.zfs.zil_disable=1

を/boot/loader.confにいれるとZILが無効になります。
ZFS自体は上書きしないトランザクション仕様なので、旧データが残るか
新データに変わるかのどっちかになるはず。
ZILは新データになるのを保証するって認識だけどよく理解できていません。

実際にWS2008からiSCSIで接続して書込みしてみると、
4GB搭載して空きメモリ1.8GB、CPU使用率96%、
I/O速度21MB/s x6台、平均書込速度59MB/s
どうみてもCPUパワーが足りていません(汗)

(zpool iostat と systat -vmstatの結果)

               capacity     operations    bandwidth
pool         used  avail   read  write   read  write
----------  -----  -----  -----  -----  -----  -----
tank         180G  2.55T      8     41   634K  3.95M
tank         180G  2.55T     14    505  1.77M  58.6M
tank         181G  2.55T     21    632  2.61M  73.4M
tank         182G  2.55T     27    443  3.39M  50.7M
tank         183G  2.55T     40    436  4.93M  50.6M
tank         184G  2.55T     26    457  3.30M  53.6M
tank         185G  2.55T     21    655  2.62M  76.0M
tank         186G  2.55T      8    434  1.03M  50.7M
tank         186G  2.55T     49    505  6.11M  59.5M
tank         187G  2.55T     46    541  5.73M  63.9M
tank         188G  2.54T      9    546  1.17M  63.0M
tank         189G  2.54T     49    493  6.08M  57.9M                  

Mem:KB    REAL            VIRTUAL                       VN PAGER   SWAP PAGER
        Tot   Share      Tot    Share    Free           in   out     in   out
Act   21796    5956   112032     7464 1806084  count
All  990604   13348  4368244    26004          pages
Proc:                                                            Interrupts
  r   p   d   s   w   Csw  Trp  Sys  Int  Sof  Flt        cow    7789 total
  2          40       16k   20 3621 5788  126             zfod        atkbd0 1
                                                          ozfod       atapci0 16
92.0%Sys   3.2%Intr  0.7%User  0.0%Nice  4.0%Idle        %ozfod  2090 atapci1 17
|    |    |    |    |    |    |    |    |    |    |       daefr  1999 cpu0: time
==============================================++          prcfr  2294 em0 irq256
                                         5 dtbuf    57771 totfr  1406 em1 irq257
Namei     Name-cache   Dir-cache    100000 desvn          react
   Calls    hits   %    hits   %     59876 numvn          pdwak
                                     24998 frevn          pdpgs
                                                          intrn
Disks   ad4   ad6   ad8  ad10  ad12  ad14  ad16   1050624 wire
KB/t   0.00   108   106   109   109   114   113     15920 act
tps       0   208   211   205   205   193   196   1088832 inact
MB/s   0.00 21.82 21.82 21.87 21.87 21.58 21.58           cache
%busy     0    43    43    47    44    32    40   1806084 free
                                                   204096 buf

NEC Express5800/110Ge + WD5000AAKS + FreeBSD 7.1 ZFS/iSCSI/NFS(ZFSの準備)

2008年11月11日 火曜日

ここでは、Express5800/110GeのSATAに接続した6台の500GBドライブを
ZFSに用い、3-way(3重)ミラーリングもしくはダブルパリティ(RAID6相当)の領域を作ります。
3-wayミラーリングには3台、ダブルパリティには3台以上のドライブが必要です。

ZFSの利点はデバイス管理とファイルシステムが統合されている事にあります。
物理デバイスの使用領域はファイルシステムが存在する場所だけなので、
ZFSは常に把握することができ、リビルドでも必要部分のみ同期するだけで完了します。
たとえば1TBの容量があるHDDのミラーリングでも10GBしか利用していなければ、
たった10GBだけコピーすれば1TBのミラーリングのリビルドが完了します。
もちろん新規ドライブに構築する場合はデータコピーがないので瞬時に完了します。
この特徴は一般的なHW-RAIDともSW-RAIDとも違うものです。
(実際はより高度にトランザクションとかトップダウン同期とかあるらしいです)

ZFSではボリュームやファイルシステムの論理切り出しを行う為に
ストレージプールという領域を利用します。
ストレージプールにはOSが認識できるデバイスなら何でも利用できます。
デバイスの接続されたコントローラにもCPUにも依存しません。
別のマザーに交換してもハードディスクが無事ならば瞬時に移動できます。
(SATAポートが足らないと増設カードは必須でしょうが)

前置きはこれぐらいにして実際に作ってみます。

FreeBSDをインストールして初期設定をしたら、
続いてZFSを使う準備を以下のようにします。

/etc/rc.conf

zfs_enable="YES"

/boot/loader.conf

zfs_load="YES"
vfs.zfs.arc_max="256M"
vfs.zfs.vdev.cache.size="10M"
vm.kmem_size_max="512M"
vm.kmem_size="512M"

設定したらマシンを再起動します。

# shutdown -r now

以後作成したZFSがOS起動時に自動的にマウントされるようになります。

ストレージプールを作成します。
以下のコマンドは2~3秒で即座にRAID構成が完成します。

# zpool create tank mirror ad6 ad8 ad10

tank という名前のストレージプールを3-wayミラーリングで作成します。

# zpool add tank mirror ad12 ad14 ad16

容量が不足するならばいつでもストレージプールを拡張することができます。

# zpool create tank mirror ad6 ad8 ad10 mirror ad12 ad14 ad16

3-wayミラーリングのストライピング(RAID10相当)を作成します。

# zpool create tank raidz2 ad6 ad8 ad10 ad12 ad14 ad16

ストレージプールをダブルパリティで作成します。

# zpool export tank

ストレージプールをシステムの管理下から切り離します。

# zpool import tank

別の場所で作成したストレージプールを取り込みます。

# zpool destroy tank

ストレージプールを破棄します。

# zpool import -D tank

構成が破損していなければ破棄されたプールを回復します。


3-wayミラーリング+ストライピング上に4GBのファイルを作成して読込してみる。

# zpool destroy tank
# zpool create tank mirror ad6 ad8 ad10 mirror ad12 ad14 ad16
# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                    928G    112K    928G     0%  ONLINE     -
# zpool status
  pool: tank
 state: ONLINE
 scrub: none requested
config:                                  

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    ONLINE       0     0     0
            ad16    ONLINE       0     0     0                                  

errors: No known data errors
# dd if=/dev/zero of=/tank/image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 51.721632 secs (83040058 bytes/sec)
# dd of=/dev/null if=/tank/image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 11.281782 secs (380699373 bytes/sec)

容量 1TB (500GB+ミラーx2)+(500GB+ミラーx2)
書込 79.2MB/s
読込 363.0MB/s


ダブルパリティ上に4GBのファイルを作成して読込してみる。

# zpool destroy tank
# zpool create tank raidz2 ad6 ad8 ad10 ad12 ad14 ad16
# zpool list
NAME                    SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
tank                   2.73T    248K   2.73T     0%  ONLINE     -
# zpool status
  pool: tank
 state: ONLINE
 scrub: none requested
config:                                  

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          raidz2    ONLINE       0     0     0
            ad6     ONLINE       0     0     0
            ad8     ONLINE       0     0     0
            ad10    ONLINE       0     0     0
            ad12    ONLINE       0     0     0
            ad14    ONLINE       0     0     0
            ad16    ONLINE       0     0     0                                  

errors: No known data errors
# dd if=/dev/zero of=/tank/image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 46.391234 secs (92581441 bytes/sec)
# dd of=/dev/null if=/tank/image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 13.986986 secs (307068822 bytes/sec)

容量 2TB (500GBx4+パリティx2)
書込 88.3MB/s
読込 292.8MB/s


信頼性と読込パフォーマンスか容量のどちらを取るかは運用方針と相談です。
当方はダブルパリティで容量を確保する事にしました。
読込はどう見てもGbE一本でまかなえる速度じゃないです。
(300MB/s=2700Mbps=2.7Gbpsだから)

FreeBSDのZFSはSUNのコードを移植されたものなので、
SUNのSolaris ZFS 管理ガイドが参考になります。
デバイス名の指定など多少違いますが、概念やコマンド体系はそのままです。

余談:
SW-RAIDの基本的なことですがパリティ計算をCPUが担当するので、
計算中は他の処理が停止するので可能であればDualCoreやQuadCoreなどを
載せるほうがいいかもしれない。
このハード構成はCPU交換すると電源容量が足らないかもしれない。

続く。

追記:
記載したパラメータがあまりよろしくないので修正。
その後のテストで、どうも書込みが80MB/s程度になっていたのは
CPUパワーとかキャッシュ量に問題がありそうだった。
USED 343G の時点でも、書込92MB/s、読込246MB/sを出せている。
さらにカスタムカーネルを作成してキャッシュを増量したところ、
書込104MB/s、読込263MB/sになりました。
(この値が良いかどうかは不明です)

Kernel CONFIG

include PAE
options KVA_PAGES=1024
nomakeoptions   NO_MODULES
makeoptions     MODULES_OVERRIDE="opensolaris zfs"
device          iscsi_initiator

/boot/loader.conf

vm.kmem_size_max="1536M"
vm.kmem_size="1536M"
vfs.zfs.arc_max="512M"
vfs.zfs.vdev.cache.size="20M"

ddの結果はこんな感じに。

# dd if=/dev/zero of=/tank/image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 39.355941 secs (109131359 bytes/sec)
# dd of=/dev/null if=/tank/image4G.dat bs=64k count=64k
65536+0 records in
65536+0 records out
4294967296 bytes transferred in 15.525784 secs (276634487 bytes/sec)

NEC Express5800/110Ge + WD5000AAKS + FreeBSD 7.1 ZFS/iSCSI/NFS(ハード組込・動作試験編)

2008年11月9日 日曜日

用意するもの:
メモリ1GB以上(できれば2GB以上)
5インチベイ2段で3台のSATAを格納できるケース1個(及びケーブル)
SATA接続の同容量のHDD6台(ZFS用)
40ピンIDE接続の4GB以上のHDD1台(起動用)
インチネジ必要分(HDD固定用)
FDDまたはUSB接続のCD/DVDドライブ

今回はFDDなしでUSB接続のCDからブートして、
FreeBSD 7.1 Beta2をインストールしました。
HDDケースにはEG-RM410ABK(SATAケーブル付属)を使いました。
IDEドライブには余っていたSeagate ST320014A
(UATA100/5400回転/20GB/2MBキャッシュ)を使いました。
※ブートできればなんでもいいのでUSBメモリなどでもいい

USBCDドライブはTEACのCD-210PUを使いました。

付属のDVD-RAMを外し、HDDケースを取り付けます。
SATA HDD3台をそこに格納します。
3.5インチシャドウベイから付属の80GB HDDを外し、
上段からSTAT HDD3台と最下段にIDE HDDを装着します。
IDE HDDにはDVD-RAMが接続されていたケーブルを使います。

HDD装着後の状態はこんな感じ

110ge3.jpg
(クリックで拡大)

メモリを4GB(2GBx2)に増設しました。
BIOSのResetConfigurationなど設定もしておく。
(マニュアル参照)
全デバイス、拡張カードを装着後に一旦起動して、
memtest86+ 2.01を使って3パス以上正しく回る事を確認しておきます。
一晩放置で10パス通過したようです。

USBデバイスを挿して起動すると、デフォルトの順序がUSBからなので、
CDから起動しますので、FreeBSDをIDEドライブにインストールします。
終ったら、再起動してUSBデバイスを抜きます。
HDDからFreeBSDを起動するとこんな感じです。

/var/run/dmesg.boot

このときのワットチェッカーは111Wでした。
このHDDケースは4cmファンx2個なので耐久性に不安が。
でもシャドウベイの方も予想以上に発熱が大きい。
何か対策がいるかもしれない。

以下を導入

/usr/ports/sysutils/smartmontools
/usr/ports/sysutils/mbmon

SATA全ドライブアクセスなしの温度(smartctl取得)は、
Temperature_Celsius がそれぞれ以下のように。
(先に取り忘れたのでdd実行後2時間以上後の測定値です)

 ad6 = 41  5インチベイケース上段
 ad8 = 42  5インチベイケース中段
ad10 = 43  5インチベイケース下段
ad12 = 39  シャドウ1
ad14 = 38  シャドウ2
ad16 = 36  シャドウ3
 ad4 = 29  シャドウ4
Mem:KB    REAL            VIRTUAL                       VN PAGER   SWAP PAGER
        Tot   Share      Tot    Share    Free           in   out     in   out
Act   17132    4276    99448     5376 3412504  count
All   39724    6500  2249188    12672          pages
Proc:                                                            Interrupts
  r   p   d   s   w   Csw  Trp  Sys  Int  Sof  Flt        cow   13572 total
  1       5  34       41k    9  12k  11k  171             zfod        atkbd0 1
                                                          ozfod       atapci0 16
34.5%Sys  12.7%Intr  1.5%User  0.0%Nice 51.3%Idle        %ozfod 11576 atapci1 17
|    |    |    |    |    |    |    |    |    |    |       daefr  1995 cpu0: time
=================+++++++                                  prcfr     1 em0 irq256
                                        14 dtbuf          totfr
Namei     Name-cache   Dir-cache    100000 desvn          react
   Calls    hits   %    hits   %       621 numvn          pdwak
                                        53 frevn          pdpgs
                                                          intrn
Disks   ad4   ad6   ad8  ad10  ad12  ad14  ad16     28172 wire
KB/t   0.00 64.00 64.00 64.00 64.00 64.00 64.00     12608 act
tps       0  1145  1132  1058  1146  1146   855      8120 inact
MB/s   0.00 71.56 70.74 66.12 71.62 71.65 53.46           cache
%busy     0    87    90    87    87    88    91   3412504 free
                                                    11072 buf

↑全ドライブdd実行中の1h経過ぐらいのsystat -vmstatの画面
(dd if=/dev/zero of=/dev/ad6 bs=64k)
なぜかad16の出だしが遅い・・・。(もちろん単体指定では80MB/s出る)
DMI(MCH-ICH間)は2GB/sらしいから、
帯域が足りないってわけでもなかろう?
トータル書き込み速度400MB/sぐらいでCPU使用率が約50%です。
残りのCPU時間はソフトウェアRAIDとGbEの処理に使えると。

続く。

HDT725032VLAT80が壊れた

2008年11月7日 金曜日

FreeBSD6.x/7.xで利用していたドライブがエラーを出したようだ。
テストマシンでのsmartctlによる抜粋データは以下のようなもの。
160GBプラッタ2枚のHDDのはずだが、それが脆いのかなぁ。
とりあえず代替のドライブがHDP725050GLAT80になるけど取り替えておいた。
そろそろIDEマシンをどうにかするべきか考えといけないのか・・・。
また壊れたら代替ドライブの入手が困難になりそうだ。
この余波でZFS環境での作業がちっとも進んでいません(汗)

代替ドライブ:

Device Model:     Hitachi HDP725050GLAT80
Firmware Version: GM4OA42A
User Capacity:    500,107,862,016 bytes

故障ケース1:

Device Model:     Hitachi HDT725032VLAT80
Firmware Version: V54OA4NA
User Capacity:    320,072,933,376 bytes  

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0007   132   132   024    Pre-fail  Always       -       325 (Average 241)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       36
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       9
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   020    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0012   099   099   000    Old_age   Always       -       7452
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       36
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       347
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       347
194 Temperature_Celsius     0x0002   157   157   000    Old_age   Always       -       38 (Lifetime Min/Max 20/47)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       11
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       2
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0  

Error 134 occurred at disk power-on lifetime: 7158 hours (298 days + 6 hours)
  When the command that caused the error occurred, the device was active or idle.  

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 01 40 22 11 e1  Error: UNC 1 sectors at LBA = 0x01112240 = 17900096  

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  c8 00 01 40 22 11 e1 00      00:07:31.900  READ DMA
  c8 00 08 57 22 11 e1 00      00:07:31.900  READ DMA
  c8 00 01 3f 22 11 e1 00      00:07:27.100  READ DMA
  c8 00 04 7b 88 11 e1 00      00:07:27.100  READ DMA
  c8 00 04 3f 22 11 e1 00      00:07:22.300  READ DMA

故障ケース2:

Device Model:     Hitachi HDT725032VLAT80
Firmware Version: V54OA4NA
User Capacity:    320,072,933,376 bytes  

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   100   100   016    Pre-fail  Always       -       0
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       0
  3 Spin_Up_Time            0x0007   124   124   024    Pre-fail  Always       -       291 (Average 311)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       205
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       51
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   100   100   020    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0012   099   099   000    Old_age   Always       -       8134
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       205
192 Power-Off_Retract_Count 0x0032   100   100   000    Old_age   Always       -       540
193 Load_Cycle_Count        0x0012   100   100   000    Old_age   Always       -       540
194 Temperature_Celsius     0x0002   157   157   000    Old_age   Always       -       38 (Lifetime Min/Max 18/47)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       83
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0  

Error 1 occurred at disk power-on lifetime: 29 hours (1 days + 5 hours)
  When the command that caused the error occurred, the device was active or idle
.  

  After command completion occurred, registers were:
  ER ST SC SN CL CH DH
  -- -- -- -- -- -- --
  40 51 01 10 01 ea ef  

  Commands leading to the command that caused the error were:
  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_Name
  -- -- -- -- -- -- -- --  ----------------  --------------------
  fe a2 01 10 01 0a e0 02      00:03:32.700  [VENDOR SPECIFIC]
  fe a1 00 00 00 00 a0 02      00:03:32.700  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a0 00      00:03:32.500  [VENDOR SPECIFIC]
  c1 00 00 00 00 00 a0 02      00:03:32.500  [VENDOR SPECIFIC]
  fe a6 50 60 00 00 a0 00      00:03:32.400  [VENDOR SPECIFIC]

NEC Express5800/110Ge + WD5000AAKS + FreeBSD 7.1 ZFS/iSCSI/NFS(ハード概要編)

2008年11月6日 木曜日

RAIDを解体したりHDD載せ替えにより余ったWD5000AASKが7台になりました。
このAAKSを使ってストレージサーバをでっちあげるべく本体を探してみました。
その中で、汎用部品を使っているらしいExpress5800/110Geを購入しました。
紹介ページの言葉を借りれば、「優れたコストパフォーマンス」というのが
本製品の特徴たるものではないかと思う。

サーバ機にGUIなんていらないという人にはお勧めしておきます。
当方の環境にはCore 2 Quad Q6600というCPUが複数あるので、
このCPUのアップグレードをした時に載せ替えようかと目論んでいます。
オンボードLANがIntelなのは嬉しい。1ポートに削除されているのが残念。
さらにマザーが一般的な775ソケットのM-ATX仕様なのも重要なポイントです。
将来のマザー交換時もケースと電源は使い続けることができるだろう。
注意点としてはPCIeスロットがx8しか用意されていないので、
無加工ではx16のカード(グラフィクカード)は刺さりません。
もっともサーバにそんなものはいりませんが。

NEC Express5800/110Ge(C/1.80G(512)-80) NP8100-1447YP2Y
http://nttxstore.jp/_II_P812524391

お値段は送料込み12,800円でした。かなり安いですね。
備考にある通り、本体N8100-1447Yに80GB HDDを組込したものです。

添付品はこんな感じ
・EXPRESSBUILDER(管理ソフト等収録DVD)
・電源コード(アース付き3PIN)
・PS/2日本語キーボード
・PS/2マウス
・SATAケーブル3本
・スタートアップガイド
・保証書
・お客様登録申込書
・注意事項

本体構成はこんな感じ
・Intel 3200(MCH) + ICH9R Micro ATXマザー
・オンボード グラフィック
・オンボード ギガビットLAN x1
・CPU Celeron 430 (1.8GHz/FSB800MHz)
・MEM ECC付きDDR2-800 512M x1
・HDD SATA 80GB x1
・FDD なし
・CDD IDE DVD-RAM

詳しい本体の製品仕様はこちらから
http://www.express.nec.co.jp/pcserver/products/g/110ge/spec.html

PDFマニュアル(ユーザーズガイド)は構成・技術情報のページから
ダウンロードできますので購入前の検討にどうぞ。

さっそく接続して購入時のままで起動テストですが、
電源はAPC SmartUPS 1400RM(SU1400RMJ2U)から、
KVMはDell 71PXP(カスケード)から配線しました。
起動したときの騒音はサーバとしてはほぼないに等しい。
この静音も搭載CPUゆえなのかな。
添付のキーボード、マウスの使用感は未使用の為よくわかりません。
(KVMを使う上に私は英語キーボード派なので・・・)

110ge1.jpg 110ge2.jpg
(クリックで拡大)

マザーは「GIGABYTE GA-5YASV-RH」のOEM品らしい。
BIOSは「1.0.0037」で、最新BIOSみたいですね。
IDEポートは「JMicron JMB368 UDMA133」らしい。
SATA6ポート、IDE1ポートで合計8デバイスまで直接接続可能です。
(物理的に設置できるとか電源容量が持つとかは別問題)
USBは6ポートあります。(前面x2、背面x2、内部x2)
LANは82566DM-2で1個削除されてシングルポートになっています。
VGAはXGI Volari Z9sがのっています。
SoftwareRAIDはLSI Embedded MegaRAIDが搭載されているらしい。(出荷時無効)
PCIe x8スロットの後ろに部品があってx16を載せるのはきつい。
このマザー自体はM-ATXサイズですが、
ケース的にはATXサイズのマザーも搭載可能かも?

チップセットはMCH3200+ICH9Rです。
チップセット仕様書によると、
FSB800/1066/1333MHz,DDR2-667/800,PCIe x8らしい。
non-ECCもサポートするがECCと混成は無理らしい。

CPUはLGA775/65nm/TDP35W/1.8GHz/FSB800MHz/Cache512Kの
シングルコア Celeron 430
です。
ベースがCoreマイクロアーキテクチャなのでその性能は侮れない(はず)。

MEMは片面9チップのSAMSUNG 512MB 1Rx8 PC2-6400E-666-12-F3です。
ごく普通のUnbufferedなECCメモリです。
ちょっと怖いがUnbufferedで4枚挿しは安定するのだろうか・・・。

HDDは「Seagate ST380815AS」で、SATA接続です。
SATA2/7200回転/160GBプラッタ/80GB/8MBキャッシュと一般的なもの。
DateCode 09091(=2008/08?)らしい。
形状は1プラッタなので薄型です。

光学ドライブは「MATSHITA DVD-RAM SW-9590A」で、IDE接続です。
Super MULTI ドライブ SW-9590-CのOEM品らしいです。
12倍DVD-RAM/16倍DVD-R/8倍DVD-R(DL)/48倍CD-Rと基本機能は十分です。

電源仕様はMAX380W「+5V20A, +12V15+15A, -12V0.3A,
+3.3V25A, +5Vsb2.0A」で、コネクター数はSATAx4, 4Px6, FDDx1です。

内蔵HDDにFreeBSD 7.1 Beta2をインストールしてみました。
とくに問題もなく普通にインストールできます。
ネットワークはem0としてIntel系GbEドライバが使えます。
詳細はdmesgboot-110ge.txtpciconf-110ge.txtをどうぞ。
恒例のワットチェッカーはFreeBSD起動後安定時で58Wです。

それではHDDを取り付けてみましょう。
FreeBSDから

# shutdown -p now

で電源を落とします。

続く。

YAMAHA Rev8.03.70 がリリースされた

2008年2月27日 水曜日

RTX1100などのファームですが脆弱性が修正されています。

私はブラウザで作業することはないのですが、念の為更新しておきました。当該の人はお気をつけくださいな。