(57)【要約】【課題】帯域が約束されている広域ネットワーク網でiSCSIプロトコルを利用してストレージデータの送受信を行う際に、イニシエータもしくはターゲットが送出するストレージデータのトラヒック量が、契約帯域違反と判定されて廃棄されることを防止する。【解決手段】iSCSIコマンドのRD要求に含まれるExpected Data Transfer LengthおよびR2Tコマンドに含まれるDesired Data Transfer Lengthから、前記コマンドをターゲットおよびイニシエータへ転送した場合に発生するトラヒック量を予測し、前記コマンドの送出タイミングをコントロールすることで帯域制御を行う。【選択図】図5
2005204092.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して、第一及び第二の装置に接続されたパケット転送装置であって、
上記第一の装置から送信されたパケットを受信し、上記第二の装置へパケットを送信するパケット入出力部と、
上記受信したパケット内の情報から、上記第二の装置が上記パケットを受信した場合に、上記第二の装置から上記第一の装置へ送信されるデータの量を解析するパケット解析部と、
上記パケットを保持する記憶装置と、
上記パケットを記憶装置に書き込むパケット処理部と、
上記解析されたデータの量に応じて、上記保持されたパケットの上記第二の装置への送信を制御する転送制御部とを備えたパケット転送装置。
【請求項２】
上記転送制御部は、上記第二の装置から上記第一の装置へ送信されるデータによるトラフィック量が予め定められた帯域以上にならないように制御することを特徴とする請求項１記載のパケット転送装置。
【請求項３】
さらに、上記パケット処理部は入力されたパケットが上記第二の装置にデータの送信を要求するパケットかどうかを判定し、
上記パケット解析部では、該パケット処理部で上記第二の装置にデータの転送を要求するパケットと判定されたパケットに対してのみ上記解析を行うことを特徴とする請求項１記載のパケット転送装置。
【請求項４】
上記転送制御部は、上記パケットを上記第二の装置へ出力する時刻を制御することを特徴とする請求項１記載のパケット転送装置。
【請求項５】
上記入出力部は、上記第一の装置を含めた複数の装置からそれぞれ送信された複数のパケットを入力し、
上記転送制御部は、上記複数のパケットから一のパケットを選択し、上記選択された一のパケットを優先して送信することを特徴とする請求項１記載のパケット転送装置。
【請求項６】
上記パケット処理部は、上記保持されたパケットを複数個に分割して送信するパケット分割部を有することを特徴とする請求項１記載のパケット転送装置。
【請求項７】
上記分割された複数個のパケットはそれぞれ、該分割されたパケットを受信した上記第二の装置から上記第一の装置に送信されるデータの量が、上記分割される前のパケットを受信した場合に上記第二の装置から上記第一の装置に送信されるデータの量よりも少なくなるように分割されていることを特徴とする請求項６記載のパケット転送装置。
【請求項８】
上記分割された複数個のパケットはそれぞれ、該分割されたパケットを受信した上記第二の装置から上記第一の装置に送信されるデータの量が、予め設定された上限値を超えないように分割されていることを特徴とする請求項７記載のパケット転送装置。
【請求項９】
第一及び第二のネットワークに接続され、該第一のネットワーク上の送信元の装置から送信されたパケットを、該第二のネットワーク上の送信先の装置へ転送可能なパケット転送装置であって、
第一インタフェースと、
第二乃至第四のインタフェースのうち少なくともいずれか一のインタフェースと、
上記インタフェースのそれぞれと接続されたスイッチ部とを備え、
上記第一のインタフェースは、
上記第一のネットワークに接続されたインタフェースであって、
上記送信元の装置から上記送信先の装置へ送信された第一のプロトコルのパケットを送受信する入出力部と、
上記第一のプロトコルのパケットの転送処理を行う転送処理部と、
上記受信したパケット内の情報から、上記送信先の装置が上記パケットを受信した場合に、上記送信先の装置から該パケットの送信元の装置へ送信されるデータ量を解析するパケット解析部と、
上記受信した第一のプロトコルのパケットを保持する記憶部と、
上記解析されたデータの量に応じて、上記保持されたパケットの上記送信先への送信を制御する転送制御部を有し、
上記第二のインタフェースは、
上記第一のネットワークに接続されたインタフェースであって、
上記送信元の装置から上記送信先の装置へ送信された第二のプロトコルのパケットを送受信する入出力部と、
上記第二のプロトコルのパケットの転送処理を行う転送処理部とを有し、
上記第三のインタフェースは、
上記第二のネットワークに接続されたインタフェースであって、
上記送信元の装置から上記送信先の装置へ送信された第一又は第二のプロトコルのパケットを送受信する入出力部と、
上記第一又は第二のプロトコルのパケットを第三のプロトコルのパケットに変換する変換部と、
上記第三のプロトコルに変換されたパケットの転送処理を行う転送処理部とを有し、
上記第四のインタフェースは、
上記第二のネットワークに接続されたインタフェースであって、
上記送信元の装置から上記送信先の装置へ送信された第一又は第二のプロトコルのパケットを送受信する入出力部と、
上記第一又は第二のプロトコルのパケットの転送処理を行う転送処理部とを有し、
上記スイッチ部は、
上記インタフェース間で転送されるパケットの入出力先を制御することを特徴とするパケット転送装置。
【請求項１０】
上記第一のプロトコルはiSCSIであり、上記第二のプロトコルはTCP／IPであり、上記第三のプロトコルはファイバチャネルであることを特徴とする請求項９のパケット転送装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージデータの転送帯域を成形する帯域制御機能を有するストレージスイッチに関する。
【背景技術】
【０００２】
iSCSIは、パーソナルコンピュータとストレージ装置などの周辺機器を接続する規格であるSCSI（Small Computer System Interface）コマンドをTCP/IP（Transmission Control Protocol/Internet Protocol）でカプセリングする規格である。iSCSIを用いることでユーザはIPネットワーク上のiSCSIに対応するストレージ装置などの周辺機器（以下：ストレージ装置とするが、iSCSIに対応する装置なら何でも良い）へSCSIコマンドを利用してアクセス（データの読み出しRD（Read）、書き込みWR（Write）処理など）を行うことが出来る。ここではコマンドを発行する装置をイニシエータ、コマンドを受けてそのコマンドが要求する処理を行う装置をターゲットと呼ぶ。また、ここではiSCSIコマンドを含むIPパケットをiSCSIパケットと呼ぶことにする。
【０００３】
例えば、図1は、遠隔地にいるユーザ100−i（i＝1〜n）がユーザごとに帯域が保証されているIPネットワークもしくは広域イーサネット（登録商標）などで構築された広域ネットワーク網102を利用してデータセンタ103へiSCSIを利用してアクセスするアプリケーションを表している。データセンタ103内部はストレージスイッチ104とストレージ装置105−i（i＝1〜n）によりIP−SANまたはFC−SAN（以下IP−SAN、FC−SANの総称としてSANを使用）106が構築されている。管理コンソール107はストレージスイッチ104の設定を行う。ユーザ100とデータセンタ103を結ぶ広域ネットワーク網102は帯域保証サービスにより保証されており、トラヒック量が契約帯域内の場合は途中でデータの廃棄は発生しない。
【０００４】
広域ネットワーク網102でのQoS（Quality of Service）制御には、網の入り口部のパケット転送装置101にてユーザが契約帯域内でデータの送受信を行っているか否かを監視するUPC（User Parameter Control）機能を利用することが一般的である。QoS制御とは、ベストエフォートが主流なIPネットワークにおいて、ユーザ毎に設定した通信帯域を保証する技術である。UPCは契約帯域を越えるトラヒックを検知した場合は、その場で違反パケットを廃棄するか、広域ネットワーク網内で輻輳が発生した時に廃棄の対象とするために転送優先度を低く設定する、等の転送優先制御を行う。
【０００５】
図2は図1のアプリケーション例においてユーザ100からデータセンタ103内のストレージ装置105−iへ対してデータのRDを行った場合の概念図を示す。ユーザとストレージ装置は簡単化のため1体ずつとし、他は省略している。図2を用いてストレージ装置105−iからのデータ読み出し方法を説明する。まずユーザ100はストレージ装置105−iへデータを要求するため、iSCSIコマンドのデータRD要求（正確にはiSCSI PDU（Protocol Data Unit）のBHS（Basic Header Segment）のオペコードが0x01で、Rbitに1が設定されているiSCSIパケットのこと（以下RD（Read）要求パケット）） を送信する。RD要求パケット200にはユーザが要求するデータのデータ容量（正確にはオペコードが0x01で、Rbitに1が設定されているBHSのExpected Data Transfer Lengthの値（以下要求RD長））が含まれている。RD要求パケット200を受信したストレージ装置105−iはユーザ100へ向けて要求RD長分のデータをiSCSI パケットのデータインコマンド（正確にはiSCSI PDUのBHSのオペコードが0x25のSCSI Data−in（以下RDデータパケット））201を利用してユーザへ送信する。RDデータがネットワークの経路MTU（Maximum Transfer Unit）を超える場合は複数のRDデータパケットに分割され転送される。以上がデータの読み出しの一連の流れとなる。
【０００６】
1つのRD要求パケット200のデータ容量は100バイト程度と小さい。一方RDデータパケット201のデータサイズはユーザが要求するデータ量により異なるが、数十キロバイト〜数百キロバイト以上となることが多い。このため、ユーザ100がストレージ装置105−iへ送信するRD要求パケット200のトラヒック量は契約帯域内であっても、ストレージ装置105−iがユーザ100へ送信するRDデータパケット201のトラヒック量がユーザ契約帯域違反となる可能性がある。契約帯域違反となったRDデータパケット201は、広域ネットワーク網内の輻輳スポットで帯域違反による廃棄202や、パケット転送装置101でのQoS制御による廃棄203などによりユーザ100へ到達できなくなる。
【０００７】
図3は図1のアプリケーション例においてユーザ100からデータセンタ103内のストレージ装置105−iへ対してデータのWR（Write）を行った場合の概念図を示す。ユーザとストレージ装置は簡単化のため1体ずつとし、他は省略している。iSCSIを用いたストレージ装置105−iへのデータ書き込み方法を説明する。まず、ユーザ100はストレージ装置105−iへデータの書き込みを要求するため、iSCSI コマンドのデータWR要求（正確にはiSCSI PDUのBHSのオペコードが0x01で、Wbitに1が設定されているiSCSIパケットのこと（以下WR（Write）要求パケット））を送信する。WR要求パケット300を受信したストレージ装置105−iはユーザ100へ向けてiSCSI パケットのR2Tコマンド（正確にはiSCSI PDUのBHSのオペコードが0x31のReady to Transfer（以下R2Tパケット））301を送信する。R2Tパケット 301はストレージ装置105−iがユーザ100から送信されるデータの書き込み準備が完了したことをユーザ100に示す役割を持つ。R2Tパケット301には一度に受け入れられるデータ量が何バイトであるかの情報（正確にはR2TのDesired Data Transfer Lengthの値（以下要求WR長））が入っている。R2Tパケット 301を受信したユーザ100はストレージ装置105−iへ向けてR2Tパケット 301の要求WR長分のデータをiSCSIパケットのデータアウトコマンド（正確にはiSCSI PDUのBHSのオペコードが0x05のSCSI Data−out（以下WRデータパケット））302を利用して送信する。WRデータがネットワークの経路MTUを超える場合は複数のWRデータパケットに分割され転送される。以上がデータWRの一連の流れとなる。
【０００８】
RDの場合と同様、WRデータパケット302のデータサイズとWR要求パケット300、R2Tパケット 301のデータサイズには大きな差がある。このためユーザ100がストレージ装置105−iへ送信するWR要求パケット300及びストレージ装置105−iがユーザ100へ送信するR2Tパケット 301のトラヒック量はユーザ契約帯域に収まるが、ユーザ100がストレージ装置105−iへ送信するWRデータパケット302のトラヒック量はユーザ契約帯域違反となる可能性がある。契約帯域違反となったWRデータパケット302は、広域ネットワーク網内の輻輳スポットで帯域違反による廃棄303や、パケット転送装置101でのQoS制御による廃棄304などによりストレージ装置105−iへ到達できなくなる。
【０００９】
iSCSIは上位プロトコルにTCP/IPを用いる。そのため、途中経路でデータの廃棄が発生した場合は、再送制御が行われる。しかし、廃棄量が多くなると、広域ネットワーク網102での無駄なトラヒックの発生、ストレージスイッチ104およびストレージ装置105−iの無駄なリソース消費に繋がり装置全体の性能を劣化させる原因となる。
広域ネットワーク網102での送信データ帯域がユーザ契約帯域を越えないようにするために、従来からのIPネットワークでは、広域ネットワーク網の入り口にトラヒックシェーパという帯域制御機能を設置する必要があった。トラヒックシェーパはユーザが広域ネットワークへ送出するデータ量が契約帯域を超えないようにトラヒックを制御（シェーピング）し、広域ネットワーク網102内での送信データの廃棄を回避する。広域ネットワーク網102へ契約帯域以上のデータが転送されないように保証する帯域制御装置の特許として、例えば特許文献１がある。特許文献１で開示されている帯域制御装置は、ユーザから送出されるパケットを一旦帯域制御装置内部のバッファへ格納する。次に、バッファからのパケット読み出し量を常に計測して契約帯域を越えるパケット量をバッファから読み出した場合、バッファからのパケット読み出しを一時的に中断することでユーザから広域ネットワークへ送信するデータ量が契約帯域を超えないようにコントロールする。
【００１０】
【特許文献１】特開２０００―３４９７６３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
特許文献1の帯域制御装置を図1で示すネットワークへ適用すると、3つ問題点がある。第一の問題点は、RDデータパケットおよびWRデータパケットが一時に大量に発生し（このような状況を以下、バーストという）、帯域制御装置に入力した場合はバッファがオーバーフローし、データを廃棄する点である。ストレージデータは、従来からIPネットワークで送受信されているデータにくらべ、大容量でかつバースト性を持つ特徴がある。このため、RDデータパケット201、WRデータパケット302を廃棄させること無く帯域制御を行うためには、トラヒックシェーパは数メガバイトから数10メガバイト程度の大容量なバッファをユーザ毎に確保する必要がある。このように大容量なバッファ領域をユーザごとに確保することは物理的に非常に厳しく、実現出来たとしても拡張性は非常に乏しい。
【００１２】
第二の問題点は、ストレージ装置105−iおよびユーザのコンピュータ端末へ必要以上の負荷が掛かる点である。特許文献1の帯域制御装置では、広域ネットワークへ送出するデータ量が契約帯域内であるか否かだけを確認してパケットを送出する。RD要求パケット200、R2Tパケット 301には送信要求データ長情報が含まれている。これらiSCSIパケットを受けたユーザのコンピュータ端末、ストレージ装置105−iはデータの送出量が契約帯域内であるか否かに関わらずバースト的にデータの転送を行う。広域ネットワーク網の契約帯域以上のデータをバーストで読み出しても帯域制御装置で遅延させられるか、もしくは廃棄される。そのため、広域ネットワーク網の契約帯域以上のデータ読み出しはストレージ装置105−iおよびユーザのコンピュータ端末のリソースの無駄な消費に繋がる。
【００１３】
第三の問題点は、RDデータパケット201はストレージ装置105−i側、WRデータパケット302はユーザ100側で帯域制御を行う必要があった。そのため、ストレージ装置105−i側、ユーザ100側両方に帯域制御装置が必要となる点である。
以上述べたように従来のIPネットワークの帯域制御装置では、ストレージデータの帯域を効率よく制御し、ストレージ装置およびユーザのコンピュータ端末の無駄なリソース消費を防止することが出来なかった。
本発明の目的は、大容量なバッファを必要とせず、拡張性に優れ、契約帯域以上の無駄なデータ送出をユーザ端末およびストレージ装置にもたらさない帯域制御を、ストレージ装置側ネットワークに用意するだけで可能とすることを提供することである。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、本発明の帯域制御機能を有するストレージスイッチはRD要求パケット内にある要求RD長から該RD要求パケットをターゲットへ転送した場合ターゲットがネットワークへと送信するRDデータ量を予測して帯域制御を行う。また同様に、R2Tパケット内にある要求WR長から該R2Tパケットをイニシエータへ転送した場合イニシエータがネットワークへ送信するWRデータ量を予測して帯域制御を行う。
上記以外の本願が解決しようとする課題、その解決手段は、本願の「発明を実施するための最良の形態」の欄および図面で明らかにされる。
【発明の効果】
【００１５】
本発明によれば、RDデータパケットやWRデータパケットをバッファリングして帯域制御を行う従来の帯域制御装置のように大容量なバッファを必要としない。また、大容量バッファを必要としないため拡張性に優れる。また、ストレージ装置及びユーザのコンピュータ端末へ、広域ネットワーク網の契約帯域を超過するトラヒックが発生するRD要求パケット、R2Tパケットを転送しないので、ストレージ装置及びユーザのコンピュータ端末へ必要以上の高負荷を掛けることがない。また、RDデータとWRデータの帯域制御を1台で行うことが可能となる。
【発明を実施するための最良の形態】
【００１６】
以下に示す実施例は、ユーザがネットワーク上の装置へアクセスを行った場合に発生する、RD（Read）データ、WR（Write）データのトラヒック量を制御する帯域制御機能を所持した装置の例である。
【実施例１】
【００１７】
以下では、本発明の実施形態について詳細に説明する。図１８は本発明を適用する装置の構成を表すブロック図である。
本発明の帯域制御機能を有するストレージスイッチは、スイッチインタフェース1801−nとスイッチ部1802からなる。
入力インタフェース部1801−n、は装置1800−1及び装置1800−2を接続するパケット入出力部1803と、パケット処理部1804と、パケットを保持する記憶装置1805と、保持したパケットの解析を行うパケット解析部1806と、記憶装置1805で保持したパケットへ転送許可を与える転送制御部1807からなる。
装置1800−1及び装置1800−2は図18では、ストレージスイッチと直接接続する形態をとっているが、装置1800とストレージスイッチ間に他のスイッチが入っていても良い。また、装置1800の数は3つ以上であっても良い。
【００１８】
装置1800−1が送信したパケットはストレージスイッチ部に入力すると、パケット入出力部1803を経由してパケット処理部1804へと転送される。パケット処理部1804は入力パケットが装置1800−2へのデータの送信を要求するパケットかどうかを判定する。装置1800−2へのデータの送信を要求するパケットの場合、パケット処理部1804は記憶装置1805へパケットを書き込む。そうでない場合はスイッチ部へとパケットを転送する。
記憶装置1805は書き込まれたパケットを送出信号が来るまで保管する。また、パケット解析部1806へパケットのヘッダ部を転送する。
パケットのヘッダ部を記憶装置1805から受け取ったパケット解析部1806はパケットのヘッダ部から、装置1800−2がパケットを受信した場合、装置1800−2が装置1800−1へ送信するデータ量を読み出し、転送制御部1807へとユーザの識別情報と共に装置1800−2が装置1800−1へ送信するデータ量の情報を転送する。
【００１９】
その情報を受けた転送制御部1807は、装置1800−1が装置1800−2へ送信したパケットを装置1800−2が受信した時に装置1800−2から装置1800−1へ送信されるデータ量が装置1800−1に与えられたネットワーク帯域をオーバしないように、パケットを送出する間隔を制御する。
パケットを装置1800−2へ転送しても、装置1800−2から転送されるデータが装置1800−1に与えられたネットワーク帯域をオーバしないと判定した場合、転送制御部1807は記憶装置1804へパケット送出信号を出す。
記憶装置1804はパケット送出信号を転送制御部1807から受けた時、信号の示すパケットをスイッチ部1802へと転送する。
スイッチ部1802は、パケットが出力されるスイッチインタフェース1801−nへパケットを転送する。
【００２０】
装置1800−2から装置1800−1へ対してデータの送信を要求するパケットに対しても本ストレージスイッチは同様のパケット処理を実行する。
なお、スイッチ1802、パケット入出力部1803、パケット解析部1806、パケット処理部1805、転送制御部1807は、それぞれ演算装置と記憶装置を含む機能モジュールで実現される。ただし、図１８の装置構成と同等の機能で本発明の目的が達成されれば、これ以外の装置構成であってもよい。
本発明の帯域制御機能を有するストレージスイッチを使用することにより、装置1800から送出されるデータ量を、各装置1800に与えられたネットワーク帯域内に抑えることが可能となる。
【実施例２】
【００２１】
以下では、本発明の一実施例として、本発明の帯域制御機能を有するストレージスイッチを、iSCSIプロトコルを利用するネットワークへ適用した例をもって説明する。実施例ではiSCSIプロトコルを使用した場合を例としてあげているが、データを要求するコマンドを解析すれば、要求するデータ量が取得できるプロトコルならば全てに適用することが可能である。
まず、本発明の帯域制御機能を所持するストレージスイッチを図1と図4を用いて説明する。ストレージスイッチ104はデータセンタ103内などに設置され、RAID装置やJBOD（Just Bunch Of Disks）などのストレージ装置105−iと、IPネットワークで接続しSAN106を形成する。ストレージスイッチ104とストレージ装置105−iは複数のスイッチ（図示せず）を経由して接続する形態を取ることもある。
【００２２】
ストレージスイッチ104はストレージ装置105−iのLU（Logical Unit）などのストレージボリューム構成情報を統合管理する。ユーザ100はストレージ装置105−iへ対してRD/WR要求を行う場合、ストレージ装置105−iの情報を統合管理するストレージスイッチ104をターゲットとしてiSCSIパケットを送信する。ストレージスイッチ104はユーザ100からのiSCSIパケットを終端し、ストレージスイッチがイニシエータとなりストレージ装置105−iへユーザからのiSCSIパケットを転送する。
【００２３】
図4は本発明を適用したストレージスイッチ104を示す。ストレージスイッチ104はパケットが入力するn個の入力回線412−i（i＝1〜n）と、パケットが出力されるn個の出力回線413−i（i＝1〜n）と、n個のスイッチインタフェース400−i（i＝1〜n）と、スイッチ部401と、管理情報蓄積部405より構成される。
なお、図示していないが、スイッチインタフェースには、帯域制御機能およびiSCSIパケットの処理機能を含むスイッチインタフェース400−iと帯域制御機能およびiSCSIパケットの処理機能を含まず単純にIPパケットのルーティングをするスイッチインタフェースの2種類が存在する。パケット転送装置101−2と接続するスイッチインタフェースは帯域制御機能を含むスイッチインタフェースを用い、ストレージ装置105−iと接続するスイッチインタフェースは帯域制御機能を含まないスイッチインタフェースを用いる。
【００２４】
管理情報蓄積部405は、各ユーザ100の広域ネットワーク網102の契約帯域情報や、各ユーザ100がRD/WRすることが出来るストレージ装置105−iおよびストレージ装置内のLUNの情報などの初期設定情報を各インタフェースへ送信する。初期設定情報は管理コンソール107から設定される。
スイッチインタフェース400−iは、パケットの受信処理を行うパケット受信回路402と、ユーザ100の認証処理やiSCSIパケットなどの終端処理およびストレージ装置105−iのストレージボリューム構成情報解決などを行うiSCSI処理部403と、入側帯域制御部404と、出側帯域制御部408と、パケットの送信処理を行うパケット送信回路410と、ストレージ装置105−iのストレージボリューム情報とユーザ100がアクセス可能なストレージ装置105−iのボリューム情報を管理するユーザ管理テーブル406と、IPパケットのルーティング情報を管理するルーティング管理テーブル407からなる。また、スイッチインタフェース400−iにはIPアドレスが割り振られている。図4では、スイッチインタフェース毎の入出力回線数は1個であるが、複数個用意されていても問題ない。
【００２５】
なお、スイッチ部401、パケット受信回路402、iSCSI処理部403、入側帯域制御部404、管理情報蓄積部405、出側帯域制御部408、パケット送信回路410は、それぞれ演算装置と記憶装置を持つ機能モジュールで実現され、ユーザ管理テーブル、ルーティング管理テーブルはそれぞれ記憶装置内の情報で実現される。ただし、図４の装置構成と同等の機能を持って、発明の目的を達成可能であれば、これ以外の構成であってもよい。
【００２６】
図6は広域ネットワーク網102におけるiSCSIパケットフォーマット600の一例を示す。広域ネットワーク網102におけるiSCSIパケットフォーマット600はIPヘッダ部601、TCPヘッダ部602とiSCSIヘッダ部607とユーザデータ部608から構成される。IPヘッダ部601は送信元IPアドレス603（パケットを送信する端末のアドレス）と、宛先IPアドレス（パケットを受信する端末のアドレス）から構成される。TCPヘッダ部602は送信元のプロトコル（＝上位アプリケーション）を表す送信元ポート605と、宛先のプロトコルを表す宛先ポート606から構成される。iSCSIヘッダ部607はイニシエータやターゲットが送出するコマンドの種類（主なコマンド種別に、iSCSIコマンド（0x01）やR2T（0x31）やデータアウト（0x05）やデータイン（0x25）などがある）に応じて内容が変化する。
【００２７】
図7、図8、図9は広域ネットワーク網102におけるiSCSIパケットフォーマットのiSCSIヘッダ607の一例である。
図7はイニシエータがターゲットへRead要求/Write要求を出した場合のiSCSIヘッダ部607のヘッダフォーマットの一例を示す。RD要求/WR要求を意味するiSCSIヘッダ部607はFinal（F）ビット701と、Read（R）ビット702と、Write（W）ビット703と、LUN704と、イニシエータタスクタグ705と、要求データ長706と、オプション要求RD長707から構成される。Fビット701はコマンドが複数のパケットから構成される場合に、後続パケットが存在するときには0が設定され、後続パケットが存在しない場合は１が設定される。コマンドが１つのパケットで構成される場合にも後続パケットがないため１が設定される。Rビット702はRDデータを要求する場合に１が立てられる。Wビット703はWRデータを要求する場合に１が立てられる。LUN704はストレージ装置iのロジカルユニット番号を表している。イニシエータタスクタグ705はコマンドを発行したイニシエータ装置が設定するタグであり、タスク管理に用いられる。要求データ長706は片方向RD要求の場合は要求RD長が、片方向WR要求の場合は要求WR長が格納されている。オプション要求RD長707は、Rビット702およびWビット703の双方に１が立つRDデータ/WRデータ双方向要求の場合に使用する。RDデータ/WRデータ双方向要求の場合は、要求データ長706にはWRデータのデータ長が格納される。そのため、RDデータ/WRデータ双方向要求の場合は、RDデータのデータ長はオプション要求RD長707に格納される。RDデータ/WRデータ双方向要求の場合以外は、iSCSIオプションヘッダにオプション要求RD長707は付いていない。
【００２８】
図8はWrite要求コマンドを受信したターゲットがイニシエータへ転送するR2TコマンドのiSCSIヘッダ部607の一例を示す。R2TはLUN704とイニシエータタスクタグ705とターゲットタスクタグ801とR2Tシーケンスナンバー（SN）802とWR要求データ長803から構成される。イニシエータタスクタグ705はWR要求パケットのイニシエータタスクタグの値がそのまま格納されている。ターゲットタスクタグ801はWR要求パケットを受信したターゲット装置が設定するタグであり、タスク管理に用いられる。R2TSN 802はWR要求パケットに対する応答R2Tパケットのシーケンスナンバーを表し、イニシエータはイニシエータタスクタグ705とR2TSN 802でジョブの識別を行う。WR要求長はイニシエータから転送可能なWRデータ容量、つまりターゲットが受信可能なWRデータ容量を表す。
【００２９】
図9はReadデータ/Writeデータの転送に使用されるiSCSIヘッダ部607のヘッダフォーマットの一例を示す。RDデータ/WRデータ転送フォーマットはFビット701、イニシエータタスクタグ705、ターゲットタスクタグ801、Dataシーケンスナンバー（SN）901から構成される。DataSN901はRD要求パケットもしくはR2Tパケットに対する応答RDデータパケットもしくはWRデータパケットの一連のデータ群のシーケンスナンバーを表し、イニシエータもしくはターゲットはイニシエータタスクタグ705とターゲットタスクタグ801でジョブの識別を行う。RDデータパケットもしくはWRデータパケットの最後のパケットにはFビットに１が立てられ、RDデータパケットもしくはWRデータパケットの最終を表す。
【００３０】
図10は本発明を適用したストレージスイッチ104内部におけるパケットのフォーマットを示す。ストレージスイッチ104内部におけるパケットのフォーマットは広域ネットワーク網104におけるパケットのフォーマットに内部ヘッダ部1000が備わる。この内部ヘッダ部1000はパケットが入力した回線の識別子である入力回線番号1001と、パケットが出力される回線の識別子である出力回線番号1002と、パケットを送出したユーザの識別子であるユーザ識別番号1005と、RD要求パケットを表すRDビット1003と、R2Tパケットを表すR2Tビット1004と、RD要求パケットの場合は要求RD長をR2Tパケットの場合は要求WR長を格納する要求データ長1006から構成される。
【００３１】
本発明を適用したストレージスイッチ104の入力回線412−iよりパケットが入力するとパケット受信回路402は内部ヘッダ部1000を付加する。次に、前記パケットが入力した入力回線412−iの回線番号を入力回線番号1001に書き込みiSCSI処理部403へ転送する。なお、この時点では、出力回線番号1002、ユーザ識別番号1005、RDビット1003、R2Tビット1004、要求データ長1006は無意味な値が書き込まれている。
iSCSI処理部403はパケット受信回路からパケットを受信すると宛先IPアドレス604を確認し、自スイッチインタフェース400−i宛でかつWRデータパケット以外のパケットの場合には以下の処理を行った後に入側帯域制御部404へパケットを転送する。送信元IPアドレス603からパケットを送信したユーザを判別し、ユーザ識別番号1005にユーザ識別番号を書き込む。送信元IPアドレスからユーザ識別番号を解決する対応表はユーザ管理テーブル406で管理されている。
【００３２】
次にiSCSIヘッダ部607のLUN704からユーザがアクセスしようとしているストレージ装置105−iのIPアドレスとそのストレージ装置の実際のLUNを解決する。ユーザが送信したiSCSIパケットのiSCSIヘッダ部607のLUN704からストレージ装置105−iのIPアドレスとストレージ装置105−iに実際に割り振られているLUNを解決する対応表はユーザ管理テーブル406で管理されている。次に、解決したストレージ装置のIPアドレスからルーティングテーブルを検索し、出力回線番号を解決する。解決したストレージ装置のIPアドレスは宛先IPアドレス604に上書きされ、ストレージ装置に実際に割り振られているLUNはiSCSIヘッダ部607内のLUN704に上書きされ 、出力回線番号は、内部ヘッダ部1000の出力回線番号1002に書き込まれる。次にiSCSIヘッダ部607から受信したパケットの判別を行う。RD要求パケットの場合はRDビット1003に１を書き込み、R2Tビットに0を書き込み、要求データ長1006へ要求RD長（RDデータ要求コマンドの場合は要求データ長706の値、RDデータ/WRデータ双方向要求コマンドの場合はオプション要求RD長707の値）を書き込む。その他のコマンドの場合はRDビット1003およびR2Tビット1004および要求データ長1006に0を書き込む。
【００３３】
さらに、送信元IPアドレスに自スイッチインタフェース400−iに割り振られているIPアドレスを書き込む。自スイッチインタフェース400−iのIPアドレスはIPアドレスレジスタ（図示せず）で保持されており管理コンソール107から設定可能である。iSCSIヘッダ607のRビット702およびWビット703の双方に１が立つRDデータ/WRデータ双方向要求コマンドの場合は、ヘッダ情報からRD要求パケットとWR要求パケットをiSCSI処理部403で生成して内部ヘッダを付与した後に、上記iSCSI処理部での処理が行われる。生成したコマンドの情報はユーザ管理テーブルで管理される。また、自インタフェース400−i宛てでかつWRデータパケット以外のパケットは、ユーザ管理テーブルに、イニシエータタスクタグ705、ユーザ識別番号1005、ユーザが指定してきたLUN、ストレージ装置105−iに実際に割り振られているLUN、iSCSIパケットのコマンド種別などの情報（以下ユーザ管理情報）を格納する。
【００３４】
iSCSI処理部が受信したパケットがWRデータパケットの場合はすでにユーザ管理テーブルにユーザ管理情報がエントリされているため、以下の処理を行う。送信元ＩＰアドレス603とイニシエータタスクタグ705などの情報からユーザ管理テーブルを検索してWRデータパケットを転送するストレージ装置105−iのIPアドレスを宛先IPアドレスに変更し、送信元IPアドレスを自インタフェースIPアドレスに変更し、ルーティング管理テーブルから出力回線番号を解決し出力回線番号1002に書き込み、iSCSIヘッダ内のLUN704値をストレージ装置105−iのLUNに変更する。次にWRデータパケットを入側帯域制御部404へ送信する。受信したWRデータパケットのiSCSIヘッダ部607のFビット701に1が立っている場合は管理テーブル406のエントリを削除する。
iSCSI処理部が受信したパケットの宛先IPアドレスが自スイッチインタフェース宛で無い場合は、以下の処理を行った後に入側帯域制御部404へパケットを転送する。まず、ルーティング管理テーブル407を検索し、宛先IPアドレスから出力回線番号を解決し、出力回線番号を出力回線番号1002へ書き込む。RDビット1003およびR2Tビット1004およびユーザ識別番号1005および要求データ長1006は0を書き込む。
【００３５】
入側帯域制御部404はユーザ毎のキューを備え、内部ヘッダ部1000のRDビット1003の値を確認し、値が1の場合は指定するキューに該パケットを蓄積する。ユーザ毎の契約帯域情報に基づいてパケットを送出するキューを判定し、該キューよりパケットを読みだし、スイッチ部401へパケットを転送する。また、内部ヘッダ部1000のRDビット1003の値が0の場合はすぐにスイッチ部401へとパケットを転送する。
スイッチ部401は出力回線番号1002に従いパケットをスイッチングし、iSCSI処理部403へとパケットを転送する。
【００３６】
スイッチ部からパケットを受信したiSCSI処理部403は宛先IPアドレス604を確認し、自スイッチインタフェース400−i宛の場合には以下の処理を行った後に出側コマンドバッファ408へパケットを転送する。まず、送信元ＩＰアドレス603とイニシエータタスクタグ705などの情報から登録しているユーザ情報を呼び出す。ユーザ管理情報からユーザ識別番号、ユーザが指定してきたLUN、ユーザの宛先IPアドレスを解決する。解決したユーザ識別番号を内部ヘッダ1000のユーザ識別番号1005に書き込み、IPアドレスを宛先IPアドレス603に上書きし、ユーザが指定してきたLUNをiSCSIヘッダ部607のLUN704へ書き込む。ユーザ管理情報はイニシエータからiSCSIパケットを受信した際にユーザ管理テーブル406に格納したものである。次にiSCSIヘッダ607から受信したパケットの判定を行う。R2Tパケットの場合はRDビット1003に0を書き込み、R2Tビット1004に1を書き込み、要求データ長1006へWR要求長706を書き込む。その他のコマンドの場合はRDビット1003およびR2Tビット1004および要求データ長1006に0を書き込む。さらに、送信元IPアドレスに自スイッチインタフェース400−iに割り振られているIPアドレスを書き込む。R2Tパケットを除く、その他のiSCSIパケットの場合はユーザ管理テーブルに格納していたユーザ管理情報をユーザ管理テーブルから消去する。
【００３７】
iSCSI処理部がスイッチ部401から受信したパケットの宛先IPアドレスが自スイッチインタフェース宛で無い場合は何も処理を行わずに出側帯域制御部408へ転送する。
出側帯域制御部408はユーザ毎のキューを備え、内部ヘッダ部1000のR2Tビット1004の値を確認し、値が1の場合は指定するキューに該パケットを蓄積する。ユーザ毎の契約帯域情報に基づいてパケットを送出するキューを判定し、該キューよりパケットを読みだし、パケット送信回路へパケットを転送する。帯域制御を行う。また、内部ヘッダ部1000のR2Tビット1004の値が0の場合はすぐにパケット送信回路410へとパケットを転送する。
パケット送信回路410はパケットを受信すると、内部ヘッダ部1000を削除し、出力回線413−iにパケットを送信する。
【００３８】
次に、本発明の入側帯域制御部404の詳細動作について説明する。図5に本発明の入側帯域制御部404のブロック図を示す。また、図12、図13に帯域制御部501のパケット受信時、送信時のフローチャートを示す。入側帯域制御部404はパケット処理部500と帯域制御部501から構成される。
パケット処理部500はiSCSI処理部403から送られてきたパケット種別の判定を行うパケット判定回路502と、RD要求パケット200以外のパケットを一時的に保管する一時保管バッファ503と、ユーザ毎のキューにRD要求パケット200を格納するパケットバッファ部505と、一時保管バッファ503とパケットバッファ部505のどちらからパケットを送信するかを決定する送信判定回路508から構成される。
【００３９】
帯域制御部501は各ユーザの契約帯域に従った送信予定時刻を計算するパケット送出時刻算出部510と、各ユーザのパケットの中で最も送出予定時刻の早いフローを選び出す（すなわち、送信予定時刻でソーティングする）二分木ソート回路511と、二分木ソート回路511の結果を用いてパケット送信を行うユーザを決定してパケット処理部500に伝える送信制御部512と、二分木ソート回路511がソーティングを行うために必要な情報を記憶するユーザソーティング情報メモリ513から構成される。各ユーザの契約帯域は管理コンソール107から設定する。管理コンソールから設定された各ユーザの契約帯域は管理情報蓄積部405で格納され各インタフェースのパケット送出時刻算出部512のローカルメモリ（図示せず）へユーザ帯域情報518として送られる。
【００４０】
ユーザソーティング情報メモリ513はユーザ毎に、ユーザ識別番号、送信予定時刻、VLD（各ユーザの送信待ちRD要求パケット有無を示すフラグ（以下、この三つをまとめてユーザソーティング情報と呼ぶ）を記憶する。このユーザソーティング情報メモリ513のメモリフォーマットを図11に示す。図11はユーザ数が8の場合を示している。アドレス1000から1111に対応するエントリ内にはユーザ（0）からユーザ（7）のソーティング情報がユーザ番号順に格納される。アドレス0000か0111に対応するエントリ内には送信予定時刻が最も早いユーザを選択するための情報が格納されている（詳細は後述）。アドレス1000から1111のエリアをユーザ情報エリアと、アドレス0000から0111のエリアをソーティング情報エリアと呼ぶ。
【００４１】
入側帯域制御部404は、パケット受信時には次に示す処理1〜3を、パケット送信時には処理4〜6を実行する。
（処理1）受信パケット判定処理
（処理2）送信予定時刻計算（パケット受信時）
（処理3）ソーティング処理（パケット受信時）
（処理4）パケット送信ユーザ選択処理
（処理5）送信予定時刻計算（パケット送信時）
（処理6）ソーティング処理（パケット送信時）
以下それぞれの処理を、図5、図12、図13を用いて詳細に説明する。また、複数のユーザを識別するために、ユーザ番号ｐを付して、ユーザ（ｐ）と表記する。
【００４２】
（処理1）受信パケット判定処理
入側帯域制御部404に到着したパケットは、パケット処理部500のパケット判定回路502で内部ヘッダ部1000のＲＤビット1003に１が設定されているか判定される。ＲＤビット1003に1が設定されている場合はＲＤ要求パケットと判定されパケットバッファ部505のユーザ毎のキューに一時的に蓄積される（図12の1201と1202）。ＲＤビット1003に1が設定されていない場合は入側帯域制御部404での帯域制御が不要なため一時保管バッファ部503に一時的に蓄積される。パケットバッファ部505は、ＲＤ要求パケットを受信すると、パケット受信情報514としてユーザ識別番号をパケット送出予定時刻計算回路510及び二分木ソート回路511に向けて通知する。
【００４３】
（処理2）送信予定時刻計算（パケット受信時）
パケット受信情報514を受けたパケット送出予定時刻計算回路510は、ユーザソーティング情報メモリ513から、二分木ソート回路511経由でユーザ（ｐ）のユーザソーティング情報の送信予定時刻とVLD情報を読み出す。また、VLDが‘０’であるか‘１’であるかを調べる（図12の1203）。VLDが‘１’であるときは、すでに該ユーザに送信待ちRD要求パケットが存在していることを示している。この場合、送信予定時刻を更新すると設定帯域を守ることが出来なくなるので、送信予定時刻を変更すべきでない。そこで、先ほどユーザソーティング情報メモリ513から読み出した送信予定時刻とRD要求パケット蓄積有無情報“有り”（VLD＝１）の情報を、二分木ソート回路511に向けて、送信する（図12の1204）。
【００４４】
一方、VLDが‘０’であるときは、既に計算してある送信予定時刻が現在時刻を基準としたときに末来である（図12の1205）にもかかわらず送信予定時刻を更新すると、設定帯域を守ることが出来なくなるので、送信予定時刻を更新すべきではない。そこで、ユーザソーティング情報メモリ513から読み出した送信予定時刻とRD要求パケット蓄積有無情報“有り”（VLD＝１）の情報を、二分木ソート回路511に向けて、送信する（図12の1204）。VLDが‘０’で、既に計算してある送信予定時刻が現在時刻を基準として過去または現在時刻と同時刻である場合（図12の1205）には、RD要求パケットはいつでも送信してよい状態となっているので送信予定時刻を適当な時刻に更新しても良い。この場合には、受信RD要求パケットの属するフローのパケットを最も早く送信させるために、
新規送信予定時刻＝現在時刻＋１
と、RD要求パケット蓄積情報を‘有り’と判定し、二分木ソート回路511に向けて、判定したこれらの情報を送信する（図12の1206）。
【００４５】
（処理３）ソーティング処理（パケット受信時）
パケットを受信し、ユーザの送信予定時刻が更新されると、ユーザの中で最も早くパケットを送信すべきユーザ（以下、暫定送信ユーザ）が変化している可能性がある。二分木ソート回路511において暫定送信ユーザを再判定するためのソーティングを行う（図12の1207）。
【００４６】
以下に８ユーザ（ユーザ（ｐ）：ｐは０から７の整数）存在し、これらの中から暫定送信ユーザとして一ユーザを選ぶ場合を、図14、図15を用いて説明する。図14はソーティング処理を行うための二分木構造を示している。二分木の頂点（以下、“根”と呼ぶ）、分岐点、先端（以下、“葉”と呼ぶ）にはエントリがある。二分木の根に位置するエントリを根エントリ、葉に位置するエントリを葉エントリ、任意のエントリからみて根側にあるエントリを親エントリ、葉側にある二つのエントリを子エントリと呼ぶ。
ユーザ情報エリアの葉エントリ1430〜1437（ユーザ番号順に並べておく）にはユーザ識別番号、各ユーザの送信予定時刻とVLD（括弧内の数値（０または１）がVLDを示す）が記憶してある。葉エントリを除く他のエントリにも同様の情報が記憶される。親エントリには配下の子エントリの一方が選択され格納される。この選択は以下の[1]〜[3]の規則に従う。
【００４７】
[1] 子エントリのVLDが共に‘１’のときは、送信予定時刻がより過去である子エントリを親エントリとして選択する。例えばエントリ1420には、エントリ1431の情報がそのまま記憶される。送信予定時刻が同じ場合はどちらでも良い。
[2] 一方の子エントリのVLDが‘１’、他方が‘０’のときは、VLDが‘１’である子エントリを親エントリとして選択する。例えばエントリ1422には、VLDが‘１’のエントリ1435の情報が記憶される。
[3] 子エントリのVLDが共に‘０’のときは、送信予定時刻がより過去である子エントリを親エントリとして選択する。例えば、エントリ1421には、エントリ1432の情報がそのまま記憶される。送信予定時刻が同じ場合はどちらでも良い。
【００４８】
次に、ユーザソーティング情報メモリ513のユーザソーティング情報の管理方法について説明する。ここではユーザ数をM（＝2のm乗）とする。例として、8フロー（m ＝ 3）を収容するユーザソーティング情報メモリ513のメモリマップを図11に示す。前述の様に、ユーザソーティング情報メモリ513には、ユーザ毎にユーザ識別番号1100、送信予定時刻1101、およびVLD1102が記憶されている。各エントリと、ユーザソーティング情報メモリ513のアドレスの関係は、以下に示す通りである。以下では、アドレスは2進数（m＋1ビット）で示すこととする。
【００４９】
（1） 二分木の根に対応するアドレスは、０００…００１番地である。
（2） アドレス：ｘｙｙ…ｙｙｚ番地のエントリの親エントリのアドレスは０ｘｙ…ｙｙｙ番地であり、二つの子エントリのアドレスはｙｙｙ…ｙｚ０番地とｙｙｙ…ｙｚ１番地である。葉エントリに対応するアドレスは、１００…０００番地から１１１…１１１番地（全部で2のm乗＝M個）に記憶される。以上の規則でメモリのアドレスを管理していると、ソーティング時に行うメモリアクセスのためのアドレス生成回路を簡単に構成することができる。即ち、ｘｙｙ…ｙｙｚ番地の比較相手はｘｙｙ…ｙｙ（ｚ）番地に記憶してある情報（（ｚ）はｚの’0’←→’1’反転を示す）であり、その比較結果を書き込むのは０ｘｙ…ｙｙｙ番地である。
【００５０】
以下では入側帯域制御部404の具体的なフローソーティング処理動作を説明する。
まず、二分木ソート回路511はユーザソーティング情報メモリ513のユーザ（ｐ）に対応する葉エントリのVLDをRD要求パケット蓄積有無情報に従った値 （RD要求パケット受信時にはパケット蓄積有無情報は常に”有”であるため常に’1’である） に、また、送信予定時刻をパケット送出予定時刻計算回路510が通知する送信予定時刻に更新する。例えば図14において、ユーザ（4）の送信予定時刻が更新される場合、葉エントリ1434を書き換える。次に、葉エントリ以外の更新を行うが、二分木のすべてのエントリが更新される訳ではない。例えば、前述の例の場合に更新されるのは、葉エントリ1434から根エントリ1400に向かう経路にあるエントリ1422、1411、1400のみである。二分木ソート回路511はこれらのエントリを読みだして前述の[1]〜[3]の規則に従ってユーザ識別番号、送信予定時刻、VLDを更新する。（図12の1208と1209）更新結果を図15に示す。更新の結果ユーザ（４）が根エントリに選択された（図15の1500〜1534）。本処理が終了するとパケット受信時の処理は終了する。
以下、パケット送信時の処理4〜6を説明する。
【００５１】
（処理４）送信ユーザ選択処理
二分木ソート回路511によって選ばれた暫定送信ユーザをユーザ（i）とする。また、以下では、現在時刻と送信予定時刻を比較した結果、現在時刻を基準として送信予定時刻が過去または同時刻であるとき、該ユーザは送信可能状態であると呼ぶことにする。送信制御部512は、パケットバッファ部505から送信起動信号517を受信するとユーザソーティング情報メモリ513の根エントリ内のVLDと送信予定時刻を読み出し、ユーザ（i）が送信可能状態か否かを監視する。ユーザが送信可能状態となっていない場合には、パケット受信による送信予定時刻の変更または、時間経過によりユーザが送信可能状態となるまで待機する（図13の1300〜1302）。送信可能状態となっている場合には、送信許可信号516をパケットバッファ部505へ出す。
【００５２】
送信許可信号516を受信したパケットバッファ部505は、送信要求のあったユーザのキューからRD要求パケットを読み出す準備をし、送信判定回路508へ判定要求信号を出す。送信判定回路は一時保管バッファ部503とパケットバッファ部505のどちらからパケットを読み出すかを決定し、送信決定信号を一時保管バッファ部503とパケットバッファ部505のどちらかへ出す。送信判定回路から送信決定信号を受信したパケットバッファ部505はRD要求パケットを送信する（図13の1303）。さらに、RD要求パケットを送信したユーザのユーザ識別番号、送信したRD要求パケットの要求データ長1006、該ユーザの（パケット送信後の）パケット蓄積有無から構成されるRD要求パケット送信情報515をパケット送出予定時刻計算回路510と二分木ソート回路511へ送信する。また、パケットバッファ部505は次回送出するRD要求パケットを問い合わせるために、送信許可信号516を送信制御部512へ送信する。
【００５３】
（処理５）送信予定時刻計算（パケット送信時）
パケット送信情報515を受信したパケット送出予定時刻算出回路510は、設定するユーザの契約帯域に従ったユーザの送信予定時刻を計算する（図13の1304）。新規の送信予定時刻の計算は、例えば、1Byteのデータを送信する際の時間間隔を記憶しておき、以下の計算を行えばよい。
新規送信予定時刻＝今回の送信予定時刻＋時間間隔×要求データ長のバイト数
あるいは各ユーザの帯域が、The ATM Forum Specification version 4.0の4.4.2章に記載されているContinuous−State Leaky Bucket Algorithmの遵守・違反判定において、遵守と判定されるように新規送信予定時刻を計算しても良い。
リーキーバケットアルゴリズムはある容量を持った穴の空いた漏れバケツのモデルで表され、バケツに水が入っている間は監視帯域に比例した量の水が漏れ、RD要求パケット到着時にはバケツに要求データ長分の水が注ぎ込まれる。ストレージ装置およびユーザ100から創出されるRDデータのバーストを許容するためにバケツに容量を持ち、バケツが溢れないうちは契約帯域を遵守と、溢れると違反と判定する。リーキーバケットアルゴリズムのフローチャートを図19に示す。
【００５４】
RD要求パケットが時間taに到着すると（ステップ1901）、前回遵守と判定されたRD要求パケットの到着時刻：LCTとの差分（バケツから漏れる水量に対応）が計算される。この値をカウンタ値：X（バケツの蓄積量に対応）から減算したX’が計算され （ステップ1902）、X’が負の場合にはX’が”0”に修正される（ステップ1903 ステップ1904）。X’とリミット：L（バケツの容量に対応）との比較が行われ （ステップ1905）、X’≧Lの場合にストレージ装置105から送出されるRDデータは違反と判定される（ステップ1906）。X’＜Lの場合に遵守と判定され、X’に監視帯域より決まる固定値：I（要求データ長分の水量に対応）を加えた値がXとして保存される（ステップ1907）。なお、最初のRD要求パケットが到着した時に、X＝0、LCTは該RD要求パケットの到着時刻に初期化される。
以上に説明した計算方法により計算された送信予定時刻と、パケット送信情報515内のパケット蓄積有無を、そのまま二分木ソート回路511に送信する。
【００５５】
（処理6）
RD要求パケットを送信して送信予定時刻を修正した場合には、RD要求パケットを受信した場合と同一の処理を行う（図13の1305と1306）。処理6は処理3に対応する。
次に、本発明の出側帯域制御部408の動作について説明する。出側帯域制御部408は入側帯域制御部404と同じ構成を取る。
異なる点は、入側帯域制御部404ではRD要求パケットに対し送信制御を行い、RDデータパケットによるトラヒック量がユーザの広域ネットワーク網の契約帯域を違反しないように制御するのに対し、出側帯域制御部408では、R2Tパケットに対し送信制御を行い、WRデータパケットによるトラヒック量がユーザの広域ネットワーク網の契約帯域を違反しないように制御する点である。
具体的にはパケット判定回路502で、内部パケット1000のR2Tビット1004に１が設定されているかどうかでR2Tパケットを識別し、R2Tパケットはパケットバッファ部505へ格納する。
【００５６】
また、入側帯域制御部404では、パケットバッファ部505からRD要求パケットが送出された後に、送出したRD要求パケットの要求データ長1006とユーザ識別番号と該ユーザの（パケット送信後の）パケット蓄積有無から構成されるRD要求パケット送信情報515をパケット送出予定時刻計算回路510と二分木ソート回路511へ送信している。出側帯域制御部408では、パケットバッファ部505からR2Tパケットが送出された後に、送出したR2Tパケットの要求データ長1006とユーザ識別番号と該ユーザの（パケット送信後の）パケット蓄積有無から構成されるR2Tパケット送信情報をパケット送出予定時刻計算回路と二分木ソート回路へ送信する。それを除く他の動作に関しては入側帯域制御部404と出側帯域制御部408は同じ動作をする。
【００５７】
上述する二分木ソート回路を使用することにより、次回パケットを送出することの出来るパケットバッファ部505のキューを高速に選択することが可能となる。
なお、パケット判定回路502、送信判定回路508、パケット送出予定時刻計算回路510、二分木ソート回路511、送信制御部512は、それぞれ演算装置と記憶装置を含む機能モジュールで実現され、一時管理バッファ503、パケットバッファ部505、ユーザソーティング情報メモリ513はそれぞれ記憶装置で実現される。ただし、図５の装置構成と同等の機能で本発明の目的が達成されれば、これ以外の装置構成であってもよい。
【００５８】
本発明のiSCSIに適した帯域制御機能を有するストレージスイッチを使用することにより、RDデータパケット、WRデータパケットをパケットバッファ部に蓄積することなく帯域制御を行うことができるため、帯域制御部でのバッファ量を大幅に削減可能となる。また、広域ネットワーク網102でのユーザの契約帯域を違反することのないタイミングでRD要求パケット、R2Tパケットを転送するため、ストレージ装置およびユーザのコンピュータ端末装置が過剰にデータを送出することがなくなるため、リソースの有効利用に繋がる。さらに、従来の帯域制御装置ではRDデータパケットとWRデータパケットの帯域制御を行うためには、ユーザ側から広域ネットワークへの入り口とストレージ側から広域ネットワークの入り口への二つの装置が必要であったが、本発明の装置では一つの装置でRDデータパケットとWRデータパケットの両方の帯域制御を行うことが可能となる。
また、本発明の帯域制御機能を有するストレージスイッチ104とストレージ装置108とを１個の装置とすることで、ディスクアレイ制御装置と見立てることが可能である。
【実施例３】
【００５９】
本発明のiSCSIに適した帯域制御機能を有するストレージスイッチであり、RD要求パケットもしくはR2Tパケット（以下、RD要求パケットとR2Tパケットを総称してデータ要求パケットと呼ぶ）で要求する要求データ長が大きい場合に複数のデータ要求パケットに分割する機能を有する実施例を、図16を用いて説明する。本実施例を用いることで、一つのデータ要求パケットでイニシエータ、またはターゲットから送出されるデータ量の上限を設けることができる。
図16は本発明のストレージスイッチ104を表している。ストレージスイッチ104はパケットが入力するn個の入力回線1612−i（i＝1〜n）と、パケットが出力されるn個の出力回線1613−i（i＝1〜n）と、n個のスイッチインタフェース1600−i（i＝1〜n）と、スイッチ部1601より構成される。
【００６０】
スイッチインタフェース1600−iは、パケットの受信処理を行うパケット受信回路1602と、ユーザ100の認証処理やiSCSIパケットなどの終端処理とストレージ装置105−iのストレージボリューム構成情報解決と要求データ長が大きい場合にデータ要求パケットを分割するパケット分割部1611を備えるiSCSI処理部1603と、一つのデータ要求パケットで要求可能なRDデータ量およびWRデータ量の上限をユーザ毎に管理する閾値レジスタ1605と、入側帯域制御部1604と、出側帯域制御部1608と、パケットの送信処理を行うパケット送信回路1610と、ストレージ装置105−iのストレージボリューム情報とユーザ100がアクセス可能なストレージ装置105−iのボリューム情報を管理するユーザ管理テーブル1606と、IPパケットのルーティング情報を管理するルーティング管理テーブル1607と、iSCSI処理部1603で分割したデータ要求パケットの分割前と分割後の構成情報を管理する分割管理テーブル1609から構成される。また、スイッチインタフェース1600−iにはIPアドレスが割り振られている。図16では、スイッチインタフェース毎の入出力回線数は1個であるが、複数個用意されていても問題ない。
【００６１】
実施例２で示したストレージスイッチと本実施例のストレージスイッチはiSCSI処理部1603にパケット分割部1611を備えること、一つのデータ要求パケットで要求可能なデータ量の上限をユーザ単位で管理する閾値レジスタを備えること、iSCSI処理部1603で分割したデータ要求パケットの情報を管理する分割管理テーブル1609を備えること、ユーザ管理テーブル1604に分割管理ビットを備えることを除き同じである。
iSCSI処理部1603はパケット受信回路1602からデータ要求パケットを受信すると実施例２で説明したiSCSI処理部1603での処理を実行した後に閾値レジスタ1605で管理しているユーザ毎の最大要求データ長（つまり要求可能なデータ量の上限）を読み出し、要求データ長706と大きさの比較を行う。閾値レジスタ1605の値は管理コンソール107から設定が可能である。比較の結果要求データ長706が最大要求データ長よりも大きい場合はユーザ管理テーブル1606に分割管理ビットを立ててパケット分割が行われたことを示す。次にパケット分割部1611で分割処理が行われる。
【００６２】
パケット分割部1611は要求データ長が最大要求データ長を超えているデータ要求パケットを分割する。R2TパケットとRD要求パケットで処理が異なる。
要求パケットがR2Tパケットの場合の処理は以下の通りである。
自インタフェース宛てR2Tパケットを受信したiSCSI処理部1603は対応するユーザの最大要求データ長を閾値レジスタ1605から読み出し、要求データ長と比較を行う。要求データ長が最大要求データ長を超える場合、iSCSI処理部は従来技術1で説明したパケット情報と併せてパケット分割フラグを設定して、これらをユーザ管理テーブル1606で管理する。次にiSCSI処理部はパケット分割部へR2Tパケットとともに分割依頼を出す。パケット分割部は、オリジナルのR2Tパケットのコピーをn個作成（例えば、要求WR長が96キロバイトで、最大要求データ長が24キロバイトの場合はn＝4となる。）する。次に要求WR長803を最大要求データ長に書き換え、一つ目のR2Tパケットの場合はR2TSN 802に0をセットする。分割したR2Tパケットのイニシエータタスクタグ、ターゲットタスクタグ、元のR2TパケットのR2TSN、分割個数、分割後のR2Tパケットへ割り振ったR2TSNなどの情報を分割管理テーブルへ書き込み、R2TパケットをiSCSI処理部へ渡す。
【００６３】
自インタフェース宛てWRデータパケットを受信した場合、iSCSI処理部1603はユーザ管理テーブル1606でユーザ識別番号の解決などを行った後に、分割管理ビットを確認する。分割管理ビットが設定されている場合はパケット分割部へ渡す。パケット分割部1611はイニシエータタスクタグ、ターゲットタスクタグ、ユーザ識別番号から分割管理テーブル1609を検索し、受信したWRデータパケットに対応する情報を分割管理テーブル1609から取得する。イニシエータはR2Tパケットに対する最後のWRデータパケットにはFビットを1に設定する。しかし、R2Tパケットを分割している場合はFビットに1が設定されているWRデータパケットであっても、分割前のR2Tパケットでは途中の可能性がある。そのため、受信したWRデータパケットが分割R2Tパケットに対応するならば、現在何バイトのWRデータパケットを受信したかを分割管理テーブルで管理しておく。
【００６４】
分割前のR2Tでは途中パケットに当てはまる場合はFビットに１が設定されていても、Fビットを０に変更する。また、WRデータパケットのDataSN 901はR2Tパケット単位で、リセットされるのだが、分割されたR2Tパケットに対するWRデータパケットの場合は連続した値に変更する。その後入側帯域制御部1604へパケットは転送される。これらの処理をするための情報は分割管理テーブルで管理されている。元のR2Tパケットに対応するWRデータパケットを全て送信し終わった場合、分割管理テーブルからエントリを削除する。また同時に、分割管理テーブルはエントリ削除信号1614で先程分割管理テーブルから削除したエントリをユーザ管理テーブルから削除するように指示を出す。エントリ削除信号1614を受信したユーザ管理テーブル1606は該当するエントリを削除する。
上記方式を用いてR2Tパケットを分割することで、最大要求データ長を超えるR2Tパケットをユーザ100に転送することで、ユーザ100から大量のデータがバースト的にネットワークに発生することを防止できる。
【００６５】
また、上記方式を用いてR2Tパケット管理することで、ユーザ100及びストレージ装置105は、スイッチがR2Tパケットを分割して転送していることを意識しなくて良い。
要求パケットがRD要求パケットの場合の処理は以下の通りである。
RD要求パケットはSCSIのCDB（Command Descriptor Block）をヘッダ部に保有している。RD要求パケットのSCSI CDBはRDデータのストレージ上のブロックアドレスと転送するデータのブロック数情報を保持している。そのため、パケット分割を行う場合はSCSI CDBのブロックアドレスの値と転送ブロック数を変更する必要がある。ブロックアドレス数と転送ブロック数を変更するためにはストレージスイッチはストレージ装置105−iで使用している1ブロックのサイズ（以下ブロックサイズ）を知っておく必要がある。そのため、分割管理テーブル1609はストレージ装置105−iの１ブロックサイズを管理している。１ブロックサイズはiSCSIのログイン時の情報と一緒に取得できる。また、管理コンソール107より設定することも可能である。
【００６６】
自インタフェース宛てRD要求パケットをイニシエータから受信したiSCSI処理部1603は対応するユーザの最大要求データ長を閾値レジスタ1605から読み出し、要求データ長と比較を行う。要求データ長が最大要求データ長を超える場合、iSCSI処理部は従来技術1で説明したパケット情報と併せてパケット分割フラグを設定して、これらをユーザ管理テーブルで管理する。次にiSCSI処理部はパケット分割部へRD要求パケットとともに分割依頼を出す。パケット分割部は、オリジナルのRD要求パケットのコピーをn個作成（例えば、要求データ長が96キロバイトで、最大要求データ長が24キロバイトの場合はn＝4となる。）する。次に要求データ長を最大要求データ長に書き換え、SCSI CDBの転送ブロック数およびブロックアドレスを書き直す。転送ブロック数は最大要求データ長と同じとなるブロック数を1ブロックサイズと最大要求データ長から割り出し書き込む。また、ブロックアドレスは分割後の第一番目のRD要求パケットのSCSI CDBにはオリジナルのRD要求パケットのSCSI CDBのブロックアドレスの値を書き込む。第二番目以降には前回送出データに続くブロックアドレスを設定する。分割したRD要求パケットのイニシエータタスクタグ、ターゲットタスクタグ、元のRD要求パケットの分割個数、などの情報を分割管理テーブルへ書き込む。
【００６７】
自インタフェース宛てRDデータパケットをターゲットから受信した場合、iSCSI処理部1603はユーザ管理テーブル1606でユーザ識別番号の解決などを行った後に、分割管理ビットを確認する。分割管理ビットが設定されている場合はパケット分割部1611へ渡す。パケット分割部1611はイニシエータタスクタグ、ターゲットタスクタグ、ユーザ識別番号から受信したRDデータパケットが分割したRD要求パケットのどれに対応するかを分割管理テーブル1609で確認する。ターゲットはRD要求パケットに対する最後のRDデータパケットではFビットを1に設定する。しかし、RD要求パケットを分割している場合はFビットに1が設定されているRDデータパケットであっても、元のRD要求パケットでは途中のパケットの可能性がある。そのため、受信したRDデータパケットが分割RD要求パケットに対応するならば、現在何バイトのRDデータパケットを転送したかを分割管理テーブルで管理しておき、Fビットに１が設定されていた場合でも元のRD要求パケッでは途中に当る場合はFビットを０に変更する。
【００６８】
また、RDデータパケットのDataSN 901はRD要求パケット単位で、リセットされるのだが、分割されたRD要求パケットに対するRDデータパケットの場合は連続した値に変更する。その後出側帯域制御部1608へパケットは転送される。これらの処理をするための情報は分割管理テーブルで管理されている。元のRD要求パケットに対応するRDデータパケットを全て送信し終わった場合、分割管理テーブルからエントリを削除する。また同時に、分割管理テーブルはエントリ削除信号1614で先程分割管理テーブルから削除したエントリをユーザ管理テーブルから削除するように指示を出す。エントリ削除信号1614を受信したユーザ管理テーブル1606は該当するエントリを削除する。
上記方式を用いてRD要求パケットを分割することで、最大要求データ長を超えるRD要求パケットをストレージ装置105に転送することで、ストレージ装置105から大量のデータがバースト的にネットワークに発生することを防止できる。
【００６９】
また、上記方式を用いてRD要求パケット管理することで、ユーザ100及びストレージ装置105は、スイッチがRD要求パケットを分割して転送していることを意識しなくて良い。
なお、スイッチ部1601、パケット受信回路1602、iSCSI処理部1603、入側帯域制御部1604、出側帯域制御部1608、パケット送信回路1610は、それぞれ演算装置と記憶装置を含む機能モジュールで実現され、閾値レジスタ1605は記憶装置で実現され、ユーザ管理テーブル1606、ルーティング管理テーブル1607、分割管理テーブル1609はそれぞれ記憶装置で実現される。ただし、図１６の装置構成と同等の機能で本発明の目的が達成されれば、これ以外の装置構成であってもよい。
【００７０】
iSCSIに適した帯域制御機能を有するストレージスイッチに実施例３で示すデータ要求コマンドを分割する機能を追加することで実施例２よりの小さい単位で帯域制御を行うことが可能となる、そのため、実施例２よりもさらにデータのバースト性を小さく抑えることの出来る帯域制御を提供可能とする。
【実施例４】
【００７１】
実施例２および実施例３では、データセンタ103内にあるストレージスイッチ104と、データセンタ103と広域ネットワーク網102とを接続するパケット転送装置とが分離している実施例を示した。
実施例４ではパケット転送装置101−2とストレージスイッチ104とが融合し、かつIP、iSCSI、FCプロトコルを1筐体でサポートする実施形態について説明する。
マルチプロトコル対応ストレージスイッチ1700は図17に示す、データセンタと広域ネットワークの間に位置し、パケット転送装置101−2とストレージスイッチ104の両役割を持つ。
【００７２】
マルチプロトコル対応ストレージスイッチ1700はデータセンタ103内などに設置され、RAID装置やJBOD（Just Bunch Of Disks）などのストレージ装置105−iと、IPネットワークもしくはFCネットワークで接続しSAN106を形成する。マルチプロトコル対応ストレージスイッチ1700とストレージ装置105−iは複数のスイッチを経由して接続する形態を取ることもある。
マルチプロトコル対応ストレージスイッチ1700の詳細を図２０に示す。マルチプロトコル対応ストレージスイッチ1700はiSCSIインタフェース2000と、ネットワークIPインタフェース2001と、IP/FC変換インタフェース2001と、ストレージネットワークIPインタフェース2003とスイッチ部403からなる。上記４種類のインタフェースはマルチプロトコル対応ストレージ1700に接続するネットワークに応じて最適なインタフェースが選択される。
【００７３】
iSCSIインタフェース2000は、ストレージ装置にアクセスするユーザが接続するネットワークを接続するために用いる。iSCSIインタフェース2000の主な構成要素は、iSCSI処理部403、入り側帯域制御部404、出側帯域制御部408、帯域監視部2004からなる。iSCSI処理部403、入り側帯域制御部404、出側帯域制御部408は、ストレージスイッチ104のものと同じである。帯域監視部2004は、マルチプロトコル対応ストレージスイッチ1700から広域ネットワークへ転送するデータ量がユーザ契約帯域を越えるかどうかを監視する。ネットワークへ転送するデータ量がユーザ契約帯域を越えた場合、帯域監視部2004は、ユーザ帯域を越えたデータの廃棄処理や、優先順位を低く設定してネットワークへ転送するなどを行う。
【００７４】
ネットワークIPインタフェース2001は、ストレージ装置にアクセスしないユーザが接続するネットワークを接続するために用いる。ネットワークIPインタフェース2001の主な構成要素は、帯域監視部2004とIPルーティング部2005である。IPルーティング部2005はIPパケットの宛先アドレス検索などのルーティング処理をする。
IP/FC変換インタフェース2002はFCプロトコル対応のストレージ装置もしくはFCプロトコル対応のコンピュータを接続するインタフェースである。IP/FC変換インタフェース2002の主な構成要素は、IP/FC変換回路2006とFC送受信回路2007である。IP/FC変換回路2006は入力したFCプロトコルとIPとを変換する機能を有することを特徴とする。FC送受信回路2007はFCデータの送受信の処理を行う。
ストレージネットワークIPインタフェース2003は、帯域契約や帯域制御を行わないネットワークおよびiSCSI対応ストレージ装置を接続する。ストレージネットワークIPインタフェース2003の主な構成要素は、IPルーティング部2005である。
【００７５】
なお、iSCSI処理部403、入側帯域制御部404、出側帯域制御部408、帯域監視部2004、IPルーティング部2005、IP／FC変換回路2006、FC送受信回路2007は、それぞれ演算装置と記憶装置によって実現される。ただし、図２０の装置構成と同等の機能で本発明の目的を達成可能ならば、これ以外の装置構成であってもよい。
本実施例を用いることで、パケット転送装置101−2とストレージスイッチ104を一つの筐体で実現することが出来る。
【図面の簡単な説明】
【００７６】
【図１】本発明のストレージスイッチが適用されるネットワークの１例を示す図。
【図２】ユーザからストレージ装置へデータ読み出しをするときの概念図。
【図３】ユーザからストレージ装置へデータ書き込みをするときの概念図。
【図４】本発明の帯域制御機能を有するストレージスイッチの構成図。
【図５】図４のスイッチインタフェース内部の入側帯域制御部の構成図。
【図６】iSCSIパケットのパケットフォーマットの１例を示す図。
【図７】iSCSIヘッダ部のヘッダフォーマットの１例を示す図。
【図８】iSCSIヘッダ部のヘッダフォーマットの１例を示す図。
【図９】iSCSIヘッダ部のヘッダフォーマットの１例を示す図。
【図１０】図４のストレージスイッチ内部におけるパケットフォーマットの１例を示す図。
【図１１】ユーザソーティング情報メモリのフォーマット、および本メモリのアドレスと二分木の関係を示す図。
【図１２】帯域制御部のパケット受信時のフローチャート。
【図１３】帯域制御部のパケット送信時のフローチャート。
【図１４】二分木の構造を示す図。
【図１５】二分木の構造を示す図。
【図１６】データ要求パケットを分割して帯域制御を行うストレージスイッチの構成を表す図。
【図１７】本発明のストレージスイッチにパケット転送装置の機能が融合したマルチプロトコルストレージスイッチが適用されるネットワークの１例を示す図。
【図１８】本発明の帯域制御機能を有するストレージスイッチの構成図。
【図１９】リーキーバケットアルゴリズムのフローチャート。
【図２０】マルチプロトコル対応ストレージスイッチの構成図。
【符号の説明】
【００７７】
100−i（i＝1〜n）：ユーザ、101−1，2：パケット転送装置、102：広域ネットワーク網、103：データセンタ、104：ストレージスイッチ、105−i（i＝1〜n）：ストレージ装置、106：SAN、107：管理コンソール。
【図１】
2005204092.tif 000003
【図２】
2005204092.tif 000004
【図３】
2005204092.tif 000005
【図４】
2005204092.tif 000006
【図５】
2005204092.tif 000007
【図６】
2005204092.tif 000008
【図７】
2005204092.tif 000009
【図８】
2005204092.tif 000010
【図９】
2005204092.tif 000011
【図１０】
2005204092.tif 000012
【図１１】
2005204092.tif 000013
【図１２】
2005204092.tif 000014
【図１３】
2005204092.tif 000015
【図１４】
2005204092.tif 000016
【図１５】
2005204092.tif 000017
【図１６】
2005204092.tif 000018
【図１７】
2005204092.tif 000019
【図１８】
2005204092.tif 000020
【図１９】
2005204092.tif 000021
【図２０】
2005204092.tif 000022