iSCSIの高速化フロントエンドでもできないかと検討したけど、
Windows7ベータ版を見てやっぱり1から書き直そうと思い立って、
コードを書き直して自前であれこれやって、
ついにWindowsServer2008とDiscoveryセッションが確立できる事を確認しました。
iSCSIにはDiscoveryとNormalという二つのセッションタイプがあり、
前者はターゲットのアドレス、ポート、グループタグを調べる為に使います。
IPアドレスを調べるだけといってもログイン、ログアウトとパラメータネゴシエーション
というiSCSIの要的コマンドを処理するのでこれができるかどうかはかなり進歩です。
これらに加えデータI/Oコマンドを処理できるようになれば論理装置へのアクセスが可能になります。
現在のところ論理装置が未完成のためNormalセッションは未確認です。
開発コンセプトは出来るだけ楽しよう(笑)
FreeBSD7.1より前のOSでの運用は考えない。
論理ボリュームはZFSの冗長ボリューム上に確保されると仮定して余計な事はしない。
各ポータルを物理I/Fに確実に振り分けたり設定ファイルを矛盾なく設定するのはサーバ管理者が責任をもつ。
当面はpthreadを使ってマルチスレッドで各コネクションを独立で管理し排他ロックする。
pthreadはメモリとかコンテキストスイッチとかmutexの負担が大きいかも。
mutex処理は元々かなり重いのでできれば避けたいところ。
マルチスレッドはいろいろ大変ですよ(汗)
ある変数を読み書きするスレッドが複数いた場合、アトミックにその値を取ってこないとまずいのは言うまでもない。
FreeBSD7.xに搭載されているgcc4にはbuiltin atomic命令があるのでそれも活用するとよさげ。
もしくはmachine/atomic.hを使うのかな?
読みだけが自明なら共有ロックしてもいいけど今後の検討事項です。
余談になるけど以前書いた設定部分に誤字があった
> AuthMethod CHAP, Mutaul
これはMutualでした。
進捗はこんな感じ。
ほぼ完了:
設定ファイルの読み込み及び解析
ポータル及びイニシエータグループの作成
iSCSIパケット送受信(ダイジェスト機能含む)
iSCSIパラメータネゴシエーション
Discoveryセッションのパケットシーケンス
論理装置の設定読み込み及び解析
未完成:
CHAP認証パケット処理
データI/Oパケット処理
論理装置の動作
リリースを早く行う為に初期版で一時保留する機能:
メディアライブラリ機能
実行中の設定/状態のファイルへの書き出し