‘IPv6’ カテゴリーのアーカイブ

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.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コマンドを新設しました。

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

2009年4月14日 火曜日

更新>istgt 2009/4/16版

SCSIコマンドのREAD(6)及びWRITE(6)においてLBAの取得時に上位5ビットを
欠落させる問題がありました。
この問題は初期版から現在に至るまですべてのバージョンに存在します。
21ビットLBAで表現できるのは容量1GBまでなのでそれ以上の領域のみに
アクセスする場合は発現しません。
Windows系は1GB未満の領域及びドライブに対しても常に10バイトCDBを
発行するため影響を受けません。

原因:
 6バイトCDBでは21ビット幅あるLBAのうち下位16ビットしか読み取らない為

影響を受ける環境:
 o READ(6)及びWRITE(6)を発行するSCSIアプリケーション(OS、ドライバ等)
 現在の所、当該コマンドを発行するのはFreeBSDのみ把握しています

影響を受けない環境:
 o 1GB未満の領域にREAD(10)及びWRITE(10)を発行する場合(Windows系)
 o 1GB以上の領域のみにアクセスする場合

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

作成方法:

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

デーモンの再起動方法:

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

MD5 (istgt-20090414.tar.gz) = 431843b9271e15a1b7cb24dde51b7601
SHA256 (istgt-20090414.tar.gz) = 1ef44aeb189fab0119f262e6942e66343a6222355d5e6b814e73c4575df02fe3

主な修正点:
READ(6)/WRITE(6)のLBA上位5ビットが欠落する問題を修正

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

2009年4月12日 日曜日

更新>istgt 2009/4/14版

FreeNASでの利用とバグ報告を元にいくつか修正しました。

新しい設定:
syslogのファシリティをコンパイル時固定のLOCAL7から設定ファイルで変更できるようになりました。
指定できるファシリティは daemon, auth, authpriv, local1~local7 です。

[Global]
  # syslog facility
  LogFacility "local7"

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

作成方法:

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

デーモンの再起動方法:

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

MD5 (istgt-20090412.tar.gz) = 8cbfb89920f64418c94ad7b1a5ea5840
SHA256 (istgt-20090412.tar.gz) = 25119e8b87500a6c76858383bdce02348e63bbe31ac16fab09cbff96d56cd79d

既知の問題:
FreeBSD(iscsi2.1.1)から接続するとumount時に正しく処理されない事があります。(現在調査中)

主な修正点:
デフォルトのiqnをiqn.2007-09.jp.ne.peach.istgtに変更しました。
データ設定取得マクロを関数呼び出しからマクロ展開に変更しました。
ショートサイズの判定に誤ったマクロを利用していたのを修正しました。
Discoveryセッションは最大接続数を1に制限するようになりました。
NOPIN間隔が0の場合は送信しないようになりました。
syslogファシリティを設定ファイルで指定できるようになりました。

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

2009年4月11日 土曜日

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

※テスト用の空いてるUSBメモリがもうないので余っていたmicroSDカードに
FreeNAS 0.7.4531 (i386)をインストールしました。

1.FreeNASの初期設定

起動したらコンソールからネットワークカードとIPを設定します。
設定できたらブラウザで設定したIPを開きます。

System>Generalを開きます。
LanguageをJapaneseに変更します。
Time zoneをAsia/Tokyoに変更します。
「Save」をクリックします。
パスワードタブで新しいパスワードを設定してWebGUIを開き直します。

追加のアダプタがある場合はネットワークから設定します。
このテストマシンにはオンボード1個、PCIe拡張スロットに
シングルポートのアダプタを2個装備してありますので、
LAN,OPT1,OPT2の合計三個にIPを設定しました。
(再起動を要求されるので一旦再起動)

2.ディスクの用意

ディスク>マネージメントを開きます。
FreeNASで利用するドライブを追加します。
テストマシンは500GBのSATAドライブが1台なのでそれを指定しました。

ディスク>フォーマットを開きます。
UFS (GPT with Soft Updates)などでフォーマットを実行します。

ディスク>マウントポイントを開きます。
dataなどにマウントします。

3.iSCSIターゲットの設定

サービス>iSCSIターゲットを開きます。
iSCSIターゲットを構成する前に、利用する領域をエクステントに、
サービスの待ち受けに利用するIPアドレスやポート番号をPortal Groupに、
アクセスを許可するイニシエータ名やIPアドレスをInitiator Groupに、
それぞれ設定します。
CHAPによる認証機能を使う場合はAuth Groupに設定します。
グループ設定は一個のみ設定して共通で使っても、
複数設定して使い分けてもどちらでも構いません。

最低1個のPortal GroupとInitiator Groupを予め設定しないと
iSCSIターゲットを構成できません。

3.1.ポータルグループの作成
サービス>iSCSIターゲット>Portalsを開きます。
追加のボタンをクリックすると、最初のグループ(Tag1)として、FreeNASに
設定したIPとiSCSI標準ポートの3260を使ったデフォルト設定が作成されます。
複数で分ける必要がない場合は修正せずに、そのまま追加をクリックします。

3.2.イニシエータグループの作成
サービス>iSCSIターゲット>Initiatorsを開きます。
追加のボタンをクリックすると、最初のグループ(Tag1)として、FreeNASに
設定したIPとネットマスクからデフォルト設定が作成されます。

接続を許可するIPをさらに厳しく制限したり、
イニシエータ名を制限する場合はここで変更しておきます。
(または後ほど新規グループを作成して適用する事も可能です)
※クラスタ対応のファイルシステムを使わない限り、
1ターゲット=1イニシエータの関係は必須事項です。

必要な変更が終わったら、追加をクリックします。

3.3.認証グループの作成(オプション)
サービス>iSCSIターゲット>Authsを開きます。
追加のボタンをクリックすると、ユーザ名とシークレットを入力する画面
になります。初期入力では一度に4ユーザまでしか追加できません。
5個以上必要な場合は一度4個追加した後に編集でさらに追加します。

一般的にユーザ名はイニシエータの名前がデフォルトになっています。
詳しくは利用するイニシエータの説明書を参照してください。
マイクロソフトのイニシエータを使う場合はシークレットに
12文字以上16文字以下の文字列を設定します。

相互認証を使う場合は、接続先のユーザ名とシークレットを入力します。

3.4.エクステントの作成
サービス>iSCSIターゲット>Targetsを開きます。

エクステント名は設定を変更したりするときに利用するだけなので、
デフォルト値のまま利用します。

タイプは現時点のWebGUIではファイルのみサポートしています。

追記:r4928から生デバイスを、r4960からZFSボリュームを選択できるようになりました。

パスはマウント済みの領域のいずれかを選択し、ファイル名を書きます。
ここではテスト用に/mnt/data/test-disk0としました。

ファイルサイズはMiB/GiB/TiBのいずれかの単位を選択して指定します。
(MiB=2^20, GiB=2^30, TiB=2^40)
ここではテスト用に20GiBで作成しました。

3.5.ターゲットの作成
サービス>iSCSIターゲット>Targetsを開きます。
上記項目で作成してき待ち受けIPアドレスやポート番号、
許可するイニシエータ名やIPアドレス、認証データ、
ディスク領域をイニシエータから見える形にするのがこの項目です。

ターゲット名はiqn.を含まない省略形でデフォルトとして入力されています。
もし必要ならばiqn.YYYY-MM.reverse-domain:optionalの完全形式も入力可能です。

タイプは現時点のWebGUIではディスクのみサポートしています。

追記:r4912でDVDとTape(DLT8000型)とパススルーが追加されました。

フラグはrw(読み書き用)かro(読み込み専用)のどちらかを選択します。

Portal GroupとInitiator Groupは上記で作成した物を指定します。

LUN0のストレージに作成したエクステント(ディスク領域)を割り当てます。
SCSI仕様上は少なくともLUN255までは利用できるはずですが、
現時点のWebGUIはLUN0のマップのみ作成可能です。

CHAP認証を行うには、高度な設定から
Auth MethodでCHAPを選択し、
Auth Groupに上記で作成したグループを指定します。

コマンドキューイングを有効にするには、高度な設定で
Queue Depthを1~255の数値にします。
現時点のテスト済み推奨値は16です。
キューが深くなるとメモリ消費量が増えますので注意が必要です。

追記:FreeNAS0.7.4919以降はQueue Depth 32 を推奨値とします。

3.6.iSCSIサービスの起動
サービス>iSCSIターゲット>設定を開きます。
右側にある有効のチェックボックスに印を入れて、
「保存して再起動」をクリックします。

以上でターゲットが作成されました。
後はイニシエータ側で接続して自由に利用できます。

現時点で少なくとも以下のイニシエータに接続できる事を確認してあります。

Windows Server 2008
Windows Server 2003 + MS iSCSI initiator 2.08
Windows XP + MS iSCSI initiator 2.08
VirtualBOX 2.1.2
ESXi 3.5 U3
Xen Server 5.0.0 U3
PRO1000/PT Server Adpater (iSCSI Remote Boot 2.1.22)

性能の方はと言うと別にFreeNASにしたから高速化するなんて事はなくて、
いつもどおり書き込みは遅いですね!な状態です。

↓コマンドキューイングあり(深さ16)で1000MBをGbE1本で実行した結果

(クリックで拡大)

↓コマンドキューイングあり(深さ16)で1000MBをGbE2本で実行した結果

(クリックで拡大)

現時点の制限:
iSCSI初期パラメータがターゲット毎に設定できない。

FreeNAS r4529においてistgtと設定画面が登場!

2009年4月9日 木曜日

登場したのは良いけど、スクリプトをインストールされるように
修正してもらえなかった(汗)
速攻メールして修正依頼を出しておきました。
直してもらえるみたいだからそれまでお待ちください。

と思ったけど、他にも作業した方がよさげだから、暫定的に置いておきます。

http://www.peach.ne.jp/archives/freenas/iscsi_target
FreeNASにSSHで入って以下のコマンドを実行します。

# cd /etc/rc.d
# fetch http://www.peach.ne.jp/archives/freenas/iscsi_target
# chmod 755 iscsi_target 

追記:r4531で修正されました

現時点の仕様:
ExtentをLUN0にのみ割り当てる事ができる。
認証データは4個づつしか入力できない。(最大数の上限なし)
ガイド文章が少なすぎる。

既知の不具合:
Settings(Advanced settings)がすべて必須項目にも関わらず
ボールド体になっていない。
QueueDepthが空欄の場合に問題が起こる。
istgtのログ出力先が指定できない。
/etc/rc.d/iscsi_targetが存在しない。

istgtへの報告:
GEOM raid に関する問題
FreeBSD initiatorによる接続の問題

FreeNAS用の作業がほぼ完了しました

2009年4月8日 水曜日

r4521ベースの版を統合用に提供しました。
あとはプロジェクトマネージャーがなんとかしてくれるはず。
そのうちnightly buildに入ると思うので改めてよろしく!

今のところ、表示の改善を求めるのと、iSCSIブートに関する件しか
報告が来ていないけどちゃんと動いているのだよね?