iSCSIはネットワーク?ストレージ?(2)

(1)の続きです。
iSCSISCSIプロトコルを完全にTCP/IPの上に載せていますので、実装は色々なパターンがあります。

最もハードウェア的な実装は、FCと同レベルのHBAを用いた実装です。FC SANではFCプロトコルを用いた実装部分は完全にハードウェアで実装されたため、OSからはFCデバイスSCSIバイスとして認識されます。マルチパスドライバをOSに導入することもありますが、そうしたドライバは複数パスから認識されるSCSIバイスを仮想デバイスとしてOSに対して認識させることで、SCSIバイスとしての経路障害をOSからは隔離します。
反対に、最もソフトウェア的な実装は、普通のNICを用いてL2レベルまではハードウェアを用いますがそこから上の、ストレージとしての実装においてすべてソフトウェアを用いる実装です。TCP/IPのネットワークスタックはほとんどのOSが持っていましたが、そのレイヤーとSCSIレイヤーを結びつけるためのiSCSIレイヤーを処理するためのソフトウェアスタック"iSCSI Software Initiator"をさらに実装することで、ソフトウェア的なiSCSIを実現しています。
最近はさらにその境目は複雑になってきています。NICがより上位のレイヤーについてもハードウェア的に処理できる機能を次第に広げつつあるからです。TCPセグメンテーションのオフロード、そしてさらにはiSCSIレイヤーそのものをオフロードするiSCSI Offload Engine (iOE)。これらはHBAとは異なりOS側の対応と構成が必要ですが、CPUに負荷をかけることなくiSCSI処理を実装しています。HBAのような高価な専用アダプタを用いることなくネットワークストレージへのブロックレベルでのアクセスを実現したことが、iSCSIの普及に拍車をかけているといえるでしょう。
VMware vSphere4もESX4.1からBroadcom NICに実装されたiOEをサポートしました。iOEが有効となっているBroadcom 5709 1GbEアダプタや57711 10GbEアダプタを、VMkernelはvmhbaデバイス、つまりハードウェアアダプタとして認識します。
ここまでで、iSCSIのネットワークレベルの部分と、ストレージレベルの部分について書いてきました。最後となる次回はそれを結びつける、iSCSIレベルそのものについて書いてみたいと思います。