Archive for 7月 10th, 2009



Debian で iSCSI Target を作って Windows XP で利用する

金曜日, 7月 10th, 2009

以前 Opensolaris で同様のことをしたときは書き込みが遅く、NIC が落ちるということで実用にはちょっと遠いものでした。
書き込みが遅いのは設定不足の可能性が高いですが、調べるのが大変なので OS を変えて試してみることにします。

マシンは前と同じ USUGUMO 君です。OS は Debian amd64 の Lenny です。
そろそろ Squeeze に移行したいところですが、7/6 版前の版の Squeeze インストーラは LVM 上のボリュームのフォーマットができなかったり、
7/6 版(最新)のインストーラでも ext4 は選択肢にあるのにフォーマットできずに使えないなどまだインストーラーはイマイチ感があります。
また、Lenny インストール後に Squeeze にする方法が一般的ですが、新規ディレクトリが作成しようとすると「空き容量が足りません」(新しくファイルは作成できます)という奇妙な状況になるので Lenny で辛抱します。

Kernel は Vserver patch を適用した Debian 標準 Linux Vserver kernel (2.6.26-2) です。
2.6.30.1 の手動コンパイルだと iscsitarget モジュールのコンパイルがなんだかうまくいかなかったのであきらめた。

iscsitarget モジュールとツールを入れる

これは簡単です。さすが Debian というところでしょう。

# aptitude install iscsitarget iscsitarget-modules-2.6-vserver-amd64
iscsitarget を作る

これも簡単です。さすが iSCSI というところでしょう。
Opensolaris の時は気づいてなった CHAP 認証をしたほうがよさそうなのでそうします。

ちょっと見づらいですが、こちらの記事を参考にしました。

パーティションのほうは md ドライバの RAID5 の 240GB(/dev/md0 => /dev/vgraid/lvraid) と、残りの空き容量をつめこんだ 830GB(/dev/largepool/pool1) の単純な LVM があるのでそれを使います。

できあがった /etc/ietd.conf は以下です。

iSNSServer 192.168.5.10
#iSNSAccessControl No

#IncomingUser joe secret
IncomingUser daredemoii 123456789012
OutgoingUser daredemoii 123456789012

#Target iqn.2001-04.com.example:storage.disk2.sys1.xyz
Target iqn.2009-07.usugumo.quilva.jp:storage.disk1
Lun 0 Path=/dev/largepool/pool1,Type=fileio

Target iqn.2009-07.usugumo.quilva.jp:vgraid.lvraid
Lun 1 Path=/dev/vgraid/lvraid,Type=fileio

IncomingUser と OutgoingUser のパスワードは 12 文字必要なようです。

Target は適当です。iqn.西暦-月.ホスト名:わかりやすいように物理的なパーティション名 というかんじにしました。
そして、Target の次の行に書く Lun で実際のパーティションと結びつけるようです。

Lun [0-9] Path=パーティション,Type=fileio
Windows XP でマウント

前の記事と同じなので割愛します。
ただし、今回は CHAP 認証するので Discovery の Add の Advanced で以下のように IncomingUser と OutgoingUser で設定したものを指定します。

WindowsXP iSCSI-Initiator CHAP

WindowsXP iSCSI-Initiator CHAP

ベンチマーク

前の記事のベンチマークと比較します。

まずは、RAID5 でない普通のパーティションの HdTune を。

ISCSI 普通のパーティション

ISCSI 普通のパーティション

普通ですね。これなら実用十分です。Opensolaris のときはシークが異常に早く、LAN の RTT とほぼ同等になっていたのが、今回 HDD のシーク時間とほぼ同じになってます。
よくわかりませんが、ZFS はすごいってことかもですねぇ。

次にシーケンシャルライト速度目的の CrystalDiscMark を。

largepool CrystalDiscMark

largepool CrystalDiscMark

速いですねぇ。実際の HDD より速いので、やはりメモリに載ってしまってるので読み込みは単なる netperf 状態です。
ただし、書き込みはZFS のときは書き込み速度が遅すぎであまり起こらなかった pdflush しまくるので、実際の速度に近いです。それでもメモリにだいぶ載ってるので実際に使ったときより数値良いです。

実際に使ってる状況では pdflush がぜんぜん間に合わないので、LA が 7 近く行きます。
この状態で書き込み速度は 30MByte/s くらいです。(=追記7/11 3:43= MDraid5 のほうのパーティションは 38MB/s と速い。内外周の影響かな?)

メモリに載り切らないと LA 跳ね上がる

メモリに載り切らないと LA 跳ね上がる

もちろん io だけの話なので、LA の数値ほどマシンが重くはありません。むしろ CPU はあまりまくってるので io 使わない場合は普通の状態といっしょです。

おまけとして、md ドライバで作った RAID5 パーティションのベンチものせます。

md-driver RAID5 iscsi Hdtune

md-driver RAID5 iscsi Hdtune

Hdtune は読み込みのみなので、さきほどの普通のシングルパーティションとかわりありません。
シークが早くなってるのは、シークがベンチ上では遅い P7K500 の影響が減ってるからでしょう。

CrystalDiskMark は以下です。やはり、md5 のパリティ演算とその pdflush に相当足をひっぱられてます。

mdraid5

mdraid5

結論として、チューニングなし状態であれば Opensolaris の iscsitarget よりは Debian の iscsitarget のほうがよさそうです。
特に書き込みが起こったときはさっさと pdflush してしまうっぽいので安心感あります。

また、2.6.26.2 の RTL8111C@R8169driver は20 分ほどダラダラ 200Mbps ほどで通信させてますが特に不具合ないです。まぁ多分そのうち落ちる気がする。