2009年12月26日 のアーカイブ

今年最後のsend-prを完了しました(istgt-20091225)

2009年12月26日 土曜日

ESXiから利用時の高負荷状態での問題が修正されています。

初期リリースしたのが2009/02/22、今年最後のリリースが2009/12/25ですね。
リリース直前のパススルーテストに手間取り実際の作業は26日に
日付がかわっちゃたけど^^;
当初は想定外だったESXiもサポートに入り、各種報告を元にその他の
イニシエータとの互換性問題もだいぶ改修してきました。
特にFreeNAS0.7にバンドルしてもらえた事で利用形態がだいぶ広がって、
それ関連のバグ報告も多くなりました。
OSXもいくつかあがってきてるけど実機がないため検証が難航中だったり。

現在はESXi二台からの同時接続試験まで行っています。
実はこの段階でESXiサーバのNICが故障してるぽいことが判明して、
どうしようか迷い中です。
内部iSCSIと外部iSCSIトラフィックを完全分離してマルチパスすると
サーバに最低5ポート(管理+マルチパス用x2)は欲しいのです。

ここでちょっと横道に、FreeBSDイニシエータの作者様がマルチパスと
iSCSIブートの対応を検討しているみたい。
ターゲットの書き込みが遅いのをなんとかしないと遅いよ!って言われそうだ。

FreeNAS 0.7用 iSCSIターゲット(istgt)アップデータ 20091225版

2009年12月26日 土曜日

更新>アップデータ2010/01/05版

このアップデータはRC1(4735)以降のFreeNAS 0.7用です。
FreeNASの本体を更新することなくiSCSIターゲットのみを更新します。

設定ファイルはすべて保たれますが、バックアップを取ることを推奨します。
システム|バックアップ/リストアから設定のダウンロードをクリックしてください。

istgt-20091225版アップデータ: istgt-update-20091225.tar.gz

ネットに接続できるマシンからは以下のように/tmpなどにダウンロードして、
展開した中にはいっている istgt-install.php を実行します。
これにより現在のファイルが上書きされます。
また、embeddedやlivecdの場合は、設定保存ディレクトリに保存して、
FreeNASの再起動時にコピーして再現できるように、コピー処理コマンドを、
システム|高度な設定|スクリプトに事前実行型のコマンドとして
登録されます。(設定保存領域を約150KBほど消費します。)
すでに登録されている場合はしませんので、何度でもインストール可能です。

以下はFreeNASのコンソール(shell)での作業例になります。

# cd /tmp
# fetch http://www.peach.ne.jp/archives/freenas/istgt-update-20091225.tar.gz
# tar zxf istgt-update-20091225.tar.gz
# cd istgt-update
# ./istgt-install.php
 

このアップデータはi386とamd64のどちらにも適用できます。
それぞれ、full、embedded、livecdのいずれでも適用できます。
これにはistgt本体の他に起動用スクリプトと制御プログラムも含まれます。
FreeNAS0.7リリース版(4919)でiSCSIターゲットが正常に起動しないという問題も
このインストールにより修正されます。

ネットに接続されてない場合は、NFSでもWindowsの共有でもいいので、
fetchのかわりにファイルを手動でコピーして利用してください。

完了したら、WebGUIからサービス|iSCSI ターゲットで再起動します。
診断|ログでこのようなログが現れます。

istgt[1795]: istgt version 0.2 (20091225)

※ESXでQueueDepthを指定する場合32以上を推奨します。
※現在アンインストール機能はありません。fullインストールでなければ、
登録されたスクリプトを削除して再起動すれば戻ります。

MD5 (istgt-update-20091225.tar.gz) = e78e22ffa24d9d91cd484ce29d4a78e6
SHA256 (istgt-update-20091225.tar.gz) = 900070ee5ddd3b726a4677460d5b6f94de62a0ca0fb8f00a4d00a15fa32776cf

istgt (iSCSI target) 20091225版 for FreeBSD 7.x

2009年12月26日 土曜日

更新>istgt 2010/01/05版

規格外の文字があるとMSイニシエータから見えないようなので、
起動時に警告を出すようにしてみました。動作自体には変更ありません。
パススルーでモードセンスコマンドがない場合に起動できない問題がありました。

istgt (tarball): istgt-20091225.tar.gz

作成方法:

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

デーモンの再起動方法:

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

MD5 (istgt-20091225.tar.gz) = baa35331503f15ac9807f480bf08ec78
SHA256 (istgt-20091225.tar.gz) = 7bbe4ec587788404ae6c15f3886124ea043b70585536f7577dbdf884339354b0

主な修正点:
パススルーでMODESENSEに失敗する場合を考慮するようにしました。
iSCSIターゲット名に規格外の文字があるか調べるようになりました。

スピンロックで変わるかなと思ってやってみた

2009年12月26日 土曜日

その結果、2割ぐらい転送効率が落ちてしまった・・・。
これじゃ意味ないじゃない。
関数呼び出しを減らす方向で検討してみよう。

書き込み処理のデータ受信ルーチン(istgt_iscsi_transfer_out)のgprofデータの
一部だけどistgt_iscsi_read_pdu()がほとんどなのでどうにも。。。
ソケットの読み出ししたいけど相手が遅いよ!って状態なのだろうか。

R2Tリクエストをイニシエータになげて必要な書き込みデータを受信する。
その後、正しい部分データなら連続したI/Oバッファに格納する、
それ以外はキューにコピーを保存して書き込み後に再処理する。
転送要求サイズに一致するまで繰り返す。


                0.02       19.94   23036/23036       worker [1]
[15]    18.4    0.02       19.94   23036         istgt_iscsi_transfer_out [15]
                0.02       16.09  110778/324387      istgt_iscsi_read_pdu [3]
                0.00        3.45   33823/404133      istgt_iscsi_write_pdu [4]
                0.31        0.00  127922/823078      memcpy [28]
                0.01        0.03  105061/2833592     free [40]
                0.01        0.00    5995/1723731     memset [29]
                0.00        0.01   33200/4674885     __pthread_mutex_lock [47]
                0.00        0.00    6014/478204      istgt_queue_enqueue [71]
                0.00        0.00    6016/2153019     xmalloc [34]
                0.00        0.00   33653/10313149     pthread_mutex_unlock [54]
                0.00        0.00  210104/2622567     xfree [92]
                0.00        0.00    6005/12005       istgt_iscsi_copy_pdu [113]
                0.00        0.00    6006/998597      istgt_queue_count [88]

一方、読み込み処理を含むデータ/レスポンス送信部分はこんな感じ。
連続したI/Oバッファに入ったデータをオフセットをずらしつつCRC計算して送信するだけ。


                0.04       28.09  102574/102574      istgt_iscsi_task_response [6]
[9]     25.9    0.04       28.09  102574         istgt_iscsi_transfer_in [9]
                0.03       27.99  274040/404133      istgt_iscsi_write_pdu [4]
                0.01        0.04  272135/4674885     __pthread_mutex_lock [47]
                0.01        0.00  272976/10313149     pthread_mutex_unlock [54]