※補足:
現在は ports/net/istgt というiSCSIターゲットを独自に開発しているので、
そちらも合わせて参考にしてください。
2011/1/3現在の最新版はここ:
http://shell.peach.ne.jp/aoyama/archives/1321
※補足:
仮想マシン関係が一段落したので、
今度はiSCSIについて少し確認してみました。
用意するもの:
FreeBSD と iscsi-target (portsなのでFreeBSDのバージョンは重要ではない)
FreeBSD 7.0以降または Windows と Microsoft iSCSI Initiator (2008やVistaは不要)
ターゲット側:
Portsを最新にして /usr/ports/net/iscsi-target からインストールします。
ターゲット側はFreeBSD6.2などでも作成することは可能です。
VirtualPCの中のFreeBSDなどにも作成できますが速度はお察しください。
(当方の仮想マシン環境だと10MB/s程度のようです)
# portsnap fetch update
# portinstall iscsi-target
または
# cd /usr/ports/net/iscsi-target
# make; make install
以下のような設定をします。
(例では/usr/iscsiというディレクトリに10GBのファイルを作成します)
/usr/local/etc/iscsi/targets
# extents file start length
extent0 /usr/iscsi/iscsi-target0 0 10GB
# target flags storage netmask
target1 rw extent0 192.168.2.0/24
/etc/rc.conf
iscsi_target_enable="YES"
設定ができたら起動します。
# /usr/local/etc/rc.d/iscsi_target start
あとは他のソフト同様にstop restartなどできます。
イニシエータ側(FreeBSD):
FreeBSDの場合は7.0以降が必要です。
標準カーネルにはiSCSIイニシエータが組み込まれていないので、
カーネルモジュールを kldload で読み込みます。
それから iscontrol を使って探索、接続します。
# kldload iscsi_initiator
# iscontrol -dt 192.168.2.99
TargetName=iqn.1994-04.org.netbsd.iscsi-target:target1
TargetAddress=192.168.2.99:3260,1
見つけたものから必要な TargetName TargetAddress の行を
/etc/iscsi.conf に書き加え、ニックネームを作成します。
最低この2個で接続できますが、オプションがいくつかあります。
詳細はマニュアル参照(man iscsi.conf)してください。
(例では myiscsi というニックネームにしています)
/etc/iscsi.conf
myiscsi {
TargetName=iqn.1994-04.org.netbsd.iscsi-target:target1
TargetAddress=192.168.2.99:3260,1
}
できたらそのニックネームを使って接続します。
# iscontrol -n myiscsi
接続すると /dev/da0 というデバイスが作成されます。
(そのシステムにda0が存在すればda1という風に番号が増えます)
何ができたかは以下のようなコマンドで確認できるでしょう。
# tail /var/log/messages
作成できたら内蔵のハードディスクと同じですから、
スライスを作成してnewfsを実行します。
(よくわからない人は sysinstall を起動して、
Configureの中にあるFdiskとLabelを実行します)
作成したら、適当な位置にマウントします。
# mkdir /iscsi
# mount /dev/da0s1d /iscsi
切断する場合は、まず umount コマンドを実行します。
# umount /iscsi
その後に iscontrol にHUPシグナルを送ります。
kill コマンドでプロセスIDを指定するか killall コマンドを使います。
# ps axww | grep myiscsi
1064 ?? Is 0:00.00 iscontrol -n myiscsi
1109 p0 RL+ 0:00.00 grep myiscsi
# kill -HUP 1064
または
# killall -HUP iscontrol
起動と同時にiSCSIを利用したい場合は、
この手順をスクリプトに書く必要があります。
ちょっと面倒ですが・・・。
私は実験用にこんな感じのスクリプトを書きました。
実験用スクリプトファイル
/etc/rc.d/iscsi として置いて chown 0:0 および chmod 555 とする。
/etc/rc.conf に iscsi_enable=”YES” を追加する。
このスクリプトの前提としてiSCSIターゲットは一個しか使わない。
/etc/iscsi.fstab というファイルを /etc/fstab と同じ書式で作成しておく。
ちょっと仕組みがあれなのであくまで参考ということで。
イニシエータ側(Windows):
Server 2008からは標準搭載ですが、
2003やXP、2000では追加のソフトが必要です。
英語版のものがMSからダウンロードできます。
2000の場合は32ビット版の Initiator-2.07-build3640-x86fre.exe を
ダウンロードしてインストールします。
Microsoft iSCSI Initiator はこちらから。
http://www.microsoft.com/downloads/details.aspx?familyid=12cb3c1a-15d6-4585-b385-befd1319f825&displaylang=en
Microsoft iSCSI Initiator を起動して、
Discovery タブ内の TargetPortals にある Addボタン を押して、
iscsi-target を入れた FreeBSD のIPか名前を入れます。
Port番号は標準の3260のままです。
追加するとTagets タブにiSCSIターゲットが見えるようになります。
iqn.から始まる長い名前がターゲット名です。

(クリックで拡大します)
設定したiSCSIターゲットに Log On で接続します。
切断する場合は Details でセッションにチェックをいれて、Log off を押します。
接続するとハードディスクとして作成されるので、
ディスクの管理からパーティション作成とフォーマットを行います。
サーバの場合はダイナミックディスクにしてRAID構成のディスクとしても使えます。
ここでRAIDにする理由があるかはわかりませんが・・・。
HDBENCHで見るとこんな感じでした。
どっちも書き込みがあまり性能よくない。
別の2GHzのWindowsからX2の方に試すと、
Read 60MB/sでほぼ変わらず、Write 30MB/s程度は出るようです。
やはりWindows側の性能が低いとCPU使い切ってどうにもならない。
それでも850MHzという低速マシンでもギガビットのネットワークカードがあれば、
いろいろ試せそうです。

(クリックで拡大します)
利用した機材の主な仕様は以下の通り。
FreeBSD 7.1 PRERELEASE + iscsi-target (netbsd-iscsi-20080207)
P3-1GHz (133×7.5) / メモリ 768MB / VIA Apollo Pro 133A
HighPoint HPT370 UDMA100 Card
Hitachi HDP725050GLAT80 500GB 7200回転 250GB/プラッタ
最大転送速度 1138Mb/s (142.2MB/s)
Intel PRO/1000 T Server Adapter (82543)
FreeBSD 7.1 PRERELEASE + iscsi-target (netbsd-iscsi-20080207)
Athlon 64 X2 5200+(2.7GHz) / メモリ 4GB / AMD 690G
オンボードSATA (3Gbps)
Hitachi HDT725050VLA360 500GB 7200回転 167GB/プラッタ
最大転送速度 998Mb/s (124.8MB/s)
Intel PRO/1000 PT Desktop Adapter (82572)
Windows 2000 SP4 + Microsoft iSCSI Initiator 2.07
P3-850MHz (100×8.5) / メモリ 384MB / Intel 440BX
オンボードIDE (UDMA33)
Western Digital WD450AA 45GB 5400回転 15GB/プラッタ
最大転送速度 300Mb/s (37.5MB/s)
Planex GN-1200TW2 (Realtek 8169SC)
追記:
P3ではGbEの性能を生かせないので高速なマシンでテストしました。
ターゲットはX2のみ。ソフトはCrystalDiskMark2.2を利用しました。
Windows Server 2008 64bit版
Core 2 Quad Q6600 (2.4GHz) / メモリ8GB / Intel G33
オンボードSATA (3Gbps)
Hitachi HDP725050GLA360 500GB 7200回転 250GB/プラッタ
最大転送速度 1138Mb/s (142.2MB/s)
オンボードLAN (Realtek 8111B)
(クリックで拡大)
さて、上の結果を見てやっと理解できました。
ファイルベースのベンチマークは意味がない(汗)
ターゲットとして10GBのディスクを作成したけれども、
メモリが4GBあるので遅延キャッシュとして利用されている・・・。
よって少なくとも4GB以上のファイルを読み書き対象にしないと
物理ディスクアクセスがない状態だったと。
(書き込みの場合はイニシエータ側の8GB以上?)
いままでの結果はネットワークとキャッシュの往復時間だったはず。
そこで、物理読み書きするソフトがないかと探してみたら、
HD Tuneが読み込みをするようなので試してみた。

(クリックで拡大)
これを見るとFreeBSD上でキャッシュに読み込み中でも40MB/sを出すようです。
70MB/sを出している部分は言うまでもなく読み込みキャッシュに乗っている部分です。