2009年4月 のアーカイブ

istgt (iSCSI target) 20090428版 for FreeBSD 7.x with ZFS

2009年4月28日 火曜日

更新>istgt 2009/11/12版

キューに入るようになったらバグが発現するようになってしまった。
いまさらだけどシリアル番号演算(RFC1982)を適用しました。

現在、書き込み速度がありえない程遅いという報告をもらっています。
テスト環境ではまったく同様な状態にはならないので推測ですが、
Delayed ACKによって速度低下が発生している可能性があります。
コマンドキューイングを無効にして試して、もしだめであれば、
istgtを起動しているマシンで、

# sysctl net.inet.tcp.delayed_ack=0

を試してみてください。もちろんこの設定によりネットワーク負荷が
上がるのでご注意ください。このあたりの意見あったらよろしく。
また、MaxRecvDataSegmentLengthを60KB程度(61440)に下げて
設定するのもいいかもしれない。

追記:
# sysctl net.inet.tcp.delacktime=10
も有効なようです。

FreeBSDイニシエータ側のキューイング数の調整はcamcontrolで、

# camcontrol tags da0 -N 64

のような感じで指定すると変更できます。
(現時点ではクラッシュする問題がある為に-N 1を推奨)
現在の設定は-vで見ることができます。
初期値は/etc/iscsi.confでTags=32のように指定しておきます。

WindowsServer2008は何故か3個以上のREADコマンドを同時に発行してくれません。
(これはターゲット側の問題かもしれない)

istgt (tarball): istgt-20090428.tar.gz
修正版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090428.tar.gz
# cd istgt-20090428
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090428.tar.gz) = a5ae3d6ea56b9727dd99b7cbb7e0cf34
SHA256 (istgt-20090428.tar.gz) = 1e30960136f5b168c9c5b0de09b35bd48837205e7d683e66220b4eb46a6a49f0

FreeBSD iSCSI initiator 2.1.3 はこちらからどうぞ。
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/iscsi-2.1.3.tar.gz

主な修正点:
接続情報が正しく取得できない問題を修正しました。
コマンド番号の比較にシリアル番号演算を適用するようになりました。
キューイング数の計算間違いを修正しました。

追記:
リンクを追加しました。

istgt (iSCSI target) 20090427版 for FreeBSD 7.x with ZFS

2009年4月28日 火曜日

更新>istgt 2009/4/28版

キューの処理が早いと送信前のセンスデータを破壊する可能性があったので
コマンド毎に確保するように修正しました。
現時点でコマンドキューイング利用時の問題がまだ解決されていないので、
FreeBSDのイニシエータからはキューイングを利用しない事を推奨しておきます。

追記:
どっちにも取れる表現だったので修正しました。

istgt (tarball): istgt-20090427.tar.gz
修正版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090427.tar.gz
# cd istgt-20090427
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090427.tar.gz) = 93968aa99261e2a4c61a42756f3d70bf
SHA256 (istgt-20090427.tar.gz) = ea9c9a42519845d2968ca65db4fe1b583aa43d8e5b6d661c2c71d6070e88e775

FreeBSD iSCSI initiator 2.1.3 はこちらからどうぞ。
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/iscsi-2.1.3.tar.gz

主な修正点:
センスデータが破壊されないようにコマンド毎に確保するようになりました。

よくわからないけど挙動がおかしくなった

2009年4月26日 日曜日

と言うより元々おかしかったのが目に見えるようになっただけかな。
コマンドキューイングを有効にすると以下のような問題が発生しています。
あきらかに今回修正をいれた事が原因で発覚しています。
コマンドキューイングを使わない従来の方法では今のところ発生していません。
ぱっとソースを眺めて見たけど思い当たる節が速攻出てきた(汗)

詳細については調査中です。

↓Hyper-V上にFreeBSD 7.1-RELEASE-p3 + iscsi-2.1.3で構築してあります。
接続試験用のiSCSIターゲットは物理サーバに7.1-RELEASE-p3とp4の2台で
構築してあります。

 

istgt (iSCSI target) 20090425版 for FreeBSD 7.x with ZFS

2009年4月26日 日曜日

更新>istgt 2009/4/27版

コマンドキューイングを有効な状態で書き込みすると処理が停止する可能性が
ありました。シングル接続だとあまり表面化しないけれど、マルチ接続な環境では
発現しやすかった模様です。
ついでに書き込み処理をデータ転送とLUN(物理メディア)書き込みの二段階に
分割してキューイングが有効に効くように変更しました。
現状では受信と送信を交互に同一スレッドで行っている為、どちらかが大きな
データサイズを処理しているともう片方は待たされる事になります。
今後のリリースで受信と送信のスレッドを個別に作成してみる予定です。

istgt (tarball): istgt-20090425.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090425.tar.gz
# cd istgt-20090425
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090425.tar.gz) = 04bcc6e78593ce3b42e5eeea6be2f5e7
SHA256 (istgt-20090425.tar.gz) = 9cb460eb0f7572cfa305b5530b31c6a02ffecbc0c3a816df16b6197c8dbf15d2

FreeBSD iSCSI initiator 2.1.3 はこちらからどうぞ。
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/iscsi-2.1.3.tar.gz

主な修正点:
ソケットI/Oを旧版と同じルーチンに戻しました。
キューイング書き込み時の問題を修正しました。
キューイング書き込みをデータ転送とLUN書き込みの二段階に分けました。
MCS逆順の処理をusleepからpthread_cond_timedwaitに変更しました。
実行中のタスク完了を待って終了するようになりました。

istgt (iSCSI target) 20090422版 for FreeBSD 7.x with ZFS

2009年4月23日 木曜日

更新>istgt 2009/4/25版

ソケットI/Oの部分を変更したら、FreeBSDでパフォーマンスが低いとか、
WindowsでNTFSフォーマットできないなど問題が出てきたみたい。
以前の方法だと問題ないみたいだから、とりあえず修正しました(汗)
接続情報が正しく取得できなくなるバグを修正しました。
キューイング中に物理ディスクへの書き込み待ちで予期しないタイムアウトが
大量に発生する可能性があるので従来よりも長くしました。

istgt (tarball): istgt-20090422.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090422.tar.gz
# cd istgt-20090422
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090422.tar.gz) = 4c8cfa7c85b92cdcb65aa5657a62e439
SHA256 (istgt-20090422.tar.gz) = d1b1268486d198636b74c1ff18fdc3f492827f3e6209b18d47893c40842ced7c

FreeBSD iSCSI initiator 2.1.3 はこちらからどうぞ。
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/iscsi-2.1.3.tar.gz

既知の問題:
コマンドキューイングを有効にして、MCS/MPIO接続を行うと処理が停止する。
(調査中、キューイングを追加した初期20090323から発生)

主な修正点:
ソケットI/Oをループ仕様に戻しました。
TSIHを期待通りに解放していない問題を修正しました。
条件待ちの時間を長くしました。

istgt (iSCSI target) 20090420版 for FreeBSD 7.x with ZFS

2009年4月20日 月曜日

更新>istgt 2009/4/22版

CPU負荷低減の為にカーネルモードとユーザーモードを無駄に遷移しないように
常にブロッキングして全データをreadするように変更しました。
writeは元々ブロッキングI/Oなのであまり意味ないけど、
pollを毎回発行しなくなったので気休めに軽くなったはず?
ちなみにターゲットでのread操作はイニシエータからみるとディスクへの
コマンド送信とデータ書き込みに当たります。
また、サンプル定義のキューの深さを32に変更しました。

主にFreeNAS向けの修正です:-)
今後の予定は、大きな問題がなければ書き込み処理速度改善の為に大規模な
改修を行う予定です。(FreeNASとFreeBSDイニシエータの改良の進捗次第で
多少の修正が入るかも?)

関連事項として、FreeBSD initiator のキュータグ問題修正及びヘッダダイジェスト
機能が有効になった新バージョンが公開されました。20090416版以降および
2.1.3で既知の問題は修正されていますのであわせてアップグレードをお勧めします。

FreeBSD initiator 2.1.3 はこちらからどうぞ。
ftp://ftp.cs.huji.ac.il/users/danny/freebsd/iscsi-2.1.3.tar.gz

istgt (tarball): istgt-20090420.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090420.tar.gz
# cd istgt-20090420
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090420.tar.gz) = 56b0928047be97196a5d811598084fdc
SHA256 (istgt-20090420.tar.gz) = 3450e80623a869b15404623a3c016facee60ab975bc42a98778dcd55ef5b79d8

主な修正点:
ブロッキング専用のルーチンを利用するように変更しました。
Extended INQUIRYにコマンドキューの情報を載せました。
FFPの移行がDiscoveryセッションであるか調べるようにしました。
ソケットエラーのerrnoをログに記録するようになりました。

FreeNAS 0.69.1のリリースアナウンスがされました

2009年4月20日 月曜日

リリースアナウンス:
https://sourceforge.net/forum/forum.php?forum_id=943284

ダウンロード:
https://sourceforge.net/project/showfiles.php?group_id=151951&package_id=168081&release_id=676839

変更点:
https://sourceforge.net/project/shownotes.php?release_id=676839&group_id=151951

リリース名の意味:
http://en.wikipedia.org/wiki/Omnius

ほぼマイナーチェンジですが、iSCSIやZFSなんていらないって人には
必要かもしれない。
私は旧バージョンは使っていないのでよくわからないですが。
FreeNAS 0.69系はstableなのでistgt関係をバックポートする予定もないです。
新しいiSCSIターゲットを利用したい場合は素直に0.7系に移行してください。

ああああ、やってしまった

2009年4月19日 日曜日

FreeNASをembeddedインストールしてあるのに修正したものをNFSサーバに
移動する前にリブートしちゃった!!
テスト環境にバックアップなんてあるわけはなく…
その結果、作業してた物が全部消えちゃった(汗)
英語でコメント追加と少々のコード修正だったので致命的ではないけど、
精神的ダメージが大きいです。
そんな私にこの言葉を送ろう。「覆水盆に返らず」「後悔先に立たず」

さてさて、FreeNAS 0.7.4541以降は使ってみましたか?
修正が入ったのでそれなりに使えると思っているのですけどどうでしょう。
特にZFSがi386版でもloader.confの修正ですぐに試せるようになったのは
かなり大きいかと。
現在amd64版をnightly buildに用意してもらっているけどちゃんと期待通りに
動くかは不明です。うちのテスト環境では一応動いているように見えるけど。

テスト用のFreeNASのダウンロードはこちらから。
http://sourceforge.net/project/showfiles.php?group_id=151951&package_id=229704

※投稿時点の最新は0.7.4549です。ぜひ試してみてください。

↓4GB搭載のマシンでamd64版をCDから起動直後の状態

(クリックで拡大)

FreeNAS 0.7 で ZFS と iSCSI Target を構成する

2009年4月18日 土曜日

テスト用のFreeNASのダウンロードはこちらから。
http://sourceforge.net/project/showfiles.php?group_id=151951&package_id=229704

以下の情報はnightly build 0.7.4541に基づいています。
ZFSでメモリが明らかに足りないのでKVA_PAGESを増加してもらいました。
r4537においてコミットされたので、それ以降であれば2GBがカーネル空間に
割り当てられます。
また、r4539において新バージョンのistgtに変更してもらいました。
この版はFreeBSD initiatorで発現するバグを修正したバージョンです。

1.カーネルメモリの増加(i386版の必須事項)

まず事前準備として、設定を変更します。
この変更はi386版ではメモリ搭載量にかかわらずZFSを利用する場合は必要になります。

高度な設定>ファイルエディタから
embeddedの場合は /cf/boot/loader.confをロードします。

追記:fullインストールの場合は /boot/loader.conf をロードします。

vm.kmem_size_max=”1400M”
vm.kmem_size=”1400M”
vfs.zfs.arc_max=”350M”

メモリ2GBの場合は最低上記のような設定を追加して保存して再起動します。
再起動後に再度ロードして正しい値か確認しておきます。

※メモリ1GB以下ではおそらく制限された速度しかでませんが、
まったく利用できないわけではないです。

1GBの場合:
vm.kmem_size_max=”700M”
vm.kmem_size=”700M”
vfs.zfs.arc_max=”175M”

追記:
ZFSv6版(7.2RELEASE)の場合、vfs.zfs.arc_maxはkmem_sizeの1/4程度を指定したほうが良いみたい。

amd64版を使う場合は遠慮なく限界まで確保します。
4GB(amd64)の場合:
vm.kmem_size=”3072M”
vfs.zfs.arc_min=”768M”
vfs.zfs.arc_max=”768M”

ZFSv13版(7.2STABLE)の場合、vfs.zfs.arc_maxはkmem_sizeの1/2程度を指定します。

物理メモリ512MB+FreeBSD7.0での運用参考値:
vfs.zfs.arc_max=”40M”
vfs.zfs.vdev.cache.size=”5M”
vm.kmem_size_max=”384M”
vm.kmem_size=”384M”

2.ZFSプール及びファイルシステムを構成する

ディスク>マネージメントから
利用するHDDを事前フォーマットを「ZFS storage pool device」で追加します。

テストマシンはZFSに利用できるHDDが1個しかない為Stripeで単体指定です。

ディスク>ZFS>Pools/Virtual deviceから
プールに追加するHDDのタイプを選び追加します。

ディスク>ZFS>Pools/マネージメントから
作成したHDDの組を使ってプールを作成します。

※この名前がプール名になります。
ここではtankとしました。

ディスク>ZFS>Datasets/Datasetから
プール内にファイルシステムを作成します。

ここでは/mnt/tank/iscsiとして作成しました。

3.iSCSIターゲットを構成する

この手順は以前書きましたのでそちらを見てください。

FreeNAS 0.7 を使って iSCSI Target を構成する

ここでは/mnt/tank/iscsi/test-disk0として作成しました。

テスト用ハード構成:
ASUS M2A-VM (AMD 690G chipset) + Athlon X2 5200+ (2.7GHz/DualCore)
Hitachi HDP725050GLAT80 (U133 500GB) x 1
Seagate ST380815AS (SATAII 80GB) x 1
UMAX DDR2-800 2GB x 1
Intel PRO1000/PT Server Adapter x 2

テスト用iSCSIターゲット:
ZFS上のファイル形式
QueueDepth 32
(その他デフォルト値)

このFreeNASを使ってWindowsServer2008からiSCSIドライブで
CrystalDiskMark2.2を100MBで走らせた時のNIC(em1)とCPU負荷はこんな感じ。

 
(クリックで拡大)

書き込みが遅いのはistgtの仕様(キャッシュ無/シングルI/O/排他ロック)
なので効率アップはもう少しお待ちを。

追記:
上記では単体ドライブのZFS領域ですが、後日ドライブを増設した場合に、

# zpool attach tank /dev/ad1 /dev/ad3
(ad1が既存ドライブ、ad3が増設ドライブと仮定)

のようにすると、簡単にZFSミラーを作成することができます。
また、ミラー化が完了すればデータを保持したまま旧ドライブを
いつでも交換する事が可能になります。(容量の大きい物へも可能)

# zpool replace tank /dev/ad1

やっぱり気が変わってミラーを止めたいと思った場合は、

# zpool detach tank /dev/ad3

とすると、ミラーが解除されて元の単体ドライブのZFS領域に戻ります。
このように単体でもZFSにしておくと後々の管理が楽になるのです。

※attach/detachは現時点のWebGUIからは操作できないようです。
※RAIDZではattach/detachはできませんが当然replaceは可能です。

istgt (iSCSI target) 20090416版 for FreeBSD 7.x with ZFS

2009年4月16日 木曜日

更新>istgt 2009/4/20版

20090412で追加した機能に弾かれるR2Tを作成していたので修正しました。
istgtcontrol info コマンドでターゲット接続情報が取れるようになりました。

明光舎情報システム(株)の新保様と瀧井様より頂いたFreeBSD initiatorとの
接続報告により大きなバグを解消できました。残念ながらtarballには日本語版
READMEが存在しないのでここに日本語でも記しておきます。
ありがとうございました。

istgt (tarball): istgt-20090416.tar.gz
更新版をご利用ください。

作成方法:

# cd /path/to/work
# tar zxf /path/to/istgt-20090416.tar.gz
# cd istgt-20090416
# ./configure
# make
# make install
# make install-doc

デーモンの再起動方法:

# /usr/local/etc/rc.d/istgt restart

MD5 (istgt-20090416.tar.gz) = 9fd9e20d40b9db3a1dbc16971281d5ec
SHA256 (istgt-20090416.tar.gz) = 21afef740dc688a5ca37a4ec373eef2a5028ec5ff0ea2f87ee766d6bdc7ad25a

主な修正点:
R2TでLUNを設定していないのを修正しました。
RAWデバイスに対してもAutoサイズで設定できるようになりました。
ターゲットの接続情報を取得するINFOコマンドを新設しました。