一般的な SAN は、スイッチのネットワークを通じてストレージ システムの集合体に接続されたコンピュータの集合体で構成されています。複数のコンピュータが同じストレージにアクセスすることは頻繁にあります。

次の図は、複数のコンピュータ システムがイーサネット スイッチ経由でストレージ システムに接続している状況を示しています。この構成では、各システムはそれぞれ 1 つのイーサネット リンクを経由してスイッチに接続されています。このスイッチから 1 つのイーサネット リンクを経由してストレージ システムに接続されています。

図 1. ストレージへの単一のイーサネット リンク
この図は、1 台のイーサネット スイッチを通じてストレージ システムと接続しているシステムを示しています。

システムがストレージからデータを読み取るとき、ストレージからのレスポンスでは、ストレージ システムとイーサネット スイッチとの間のリンクを最大限に使ってデータが送信されます。1 台のシステムまたは仮想マシンがネットワーク スピードを占有してしまう可能性はほとんどありません。しかし、複数のシステムが 1 つのストレージ デバイスを共用する場合、次の状況が想定されます。

ストレージにデータを書き込むとき、複数のシステムまたは仮想マシンがリンクを利用しようとします。これが原因で、システムとストレージ システムとの間にあるスイッチが、ネットワーク パケットをドロップする場合があります。通常、データのドロップが発生するのは、ストレージ システムに送信されるトラフィックが 1 つのリンクで転送できる容量を超えているためです。スイッチが送信できるデータ量は、そのスイッチとストレージ システムとの間のリンク速度に制限されます。

図 2. ドロップされたパケット
この図は、サーバとストレージ システム間でデータをドロップしているスイッチを示しています。

ドロップされたネットワーク パケットのリカバリによって、パフォーマンスは著しく低下します。データがドロップされたと判別する時間に加え、再送信するときに、次の処理に使うはずのネットワークのバンド幅を消費します。

iSCSI のトラフィックは、ネットワーク上を TCP (Transmission Control Protocol) で送信されます。TCP は信頼性の高い転送プロトコルで、ドロップされたパケットを再送信し、確実に最終目的地まで届けます。TCP はドロップされたパケットを回復し、すばやくシームレスに再送信するよう設計されています。ただし、スイッチがパケットを頻繁に廃棄してしまう場合、ネットワークのスループットは低下します。ネットワークの輻輳は、データ再送信リクエストや再送パケットなどによって発生します。輻輳のないネットワークと比べて、転送されるデータは少なくなります。

ほとんどのイーサネット スイッチはデータをバッファに格納(つまり一時保存)することができます。データの送信を試みるすべてのデバイスには、この手法により、宛先に到達する機会が均等に与えられます。この転送データを一部バッファできる点と、多くのシステムで未処理のコマンド数を制限しているため、トラフィックのバーストは小さくなります。複数のシステムで発生したバーストは、順番にストレージ システムに送信されます。

処理が膨大で、かつ複数のサーバが 1 つのスイッチ ポートからデータを送信しようとすると、バッファの容量を超えてしまう場合があります。この場合、スイッチは送信できないデータをドロップし、ストレージ システムはドロップされたパケットの再送信を要求しなければなりません。たとえば、イーサネット スイッチが 32 KB までバッファ可能な場合、サーバが 256 KB のデータ量をストレージ デバイスに送信すると、一部データがドロップされます。

正しく管理されているスイッチであれば、ドロップしたパケットについて次のような情報を表示します。

*: interface is up
IHQ: pkts in input hold queue     IQD: pkts dropped from input queue
OHQ: pkts in output hold queue    OQD: pkts dropped from output queue
RXBS: rx rate (bits/sec)          RXPS: rx rate (pkts/sec)
TXBS: tx rate (bits/sec)          TXPS: tx rate (pkts/sec)
TRTL: throttle count
表 1. サンプルのスイッチ情報
インターフェイス IHQ IQD OHQ OQD RXBS RXPS TXBS TXPS TRTL
* GigabitEthernet0/1 3 9922 0 0 476303000 62273 477840000 63677 0

この Cisco のスイッチの例では、使用しているバンド幅が 476,303,000 ビット/秒で、ケーブル速度の半分未満です。ポートは受信パケットをバッファしますが、一部のパケットをドロップしています。このインターフェイスの最終行にある概要情報を見ると、IQD 列で、このポートではすでに約 10,000 の受信パケットがドロップされているとわかります。

この問題を回避するには、複数の入力イーサネット リンクが 1 つの出力リンクに集中しないように設定し、結果的にリンクのオーバーサブスクリプションを防止する方法があります。最大容量に近い転送を行うリンクの数を減らすと、オーバーサブスクリプションが発生する可能性があります。

一般に、大量のデータをストレージに書き込むアプリケーションやシステムでは、ストレージ デバイスのイーサネット リンクを共用しないでください。このようなタイプのアプリケーションでは、ストレージ デバイスへの接続を複数にしておくと最高のパフォーマンスを発揮します。

「スイッチからストレージへの複数の接続」では、スイッチからストレージへの複数接続を示しています。

図 3. スイッチからストレージへの複数の接続
この図は、スイッチからストレージに複数の接続が行われている例を示しています。

共有構成でのリンクのオーバーサブスクリプションの問題は、VLAN または VPN を使用しても解決されません。VLAN などのネットワークの仮想パーティショニングを利用すると、ネットワークを論理的に設計できます。ただし、スイッチ間のリンクやトランクの物理的な機能は変更されません。ストレージ トラフィックやその他のネットワーク トラフィックが物理接続を共用する場合、オーバーサブスクリプションやパケット消失が起こる可能性があります。スイッチ間のトランクを共用する VLAN にも同じことが言えます。SAN のパフォーマンス設計をする場合、ネットワークの論理的な割り当てではなく、ネットワークの物理的な制限を考慮する必要があります。