(57)【要約】  【課題】  入出力経路を冗長化したストレージにおいて経路間の送信データ量と受信データ量の両方を平滑化する。  【解決手段】  ストレージ１００は、送信キュー内の出力要求によって発生する送信データ量のみならず、送信キュー内の入力要求によって発生する受信データ量をも予測する。ストレージ１００は、新規に発生した出力要求を予測される送信データ量が最小であるキューに格納し、新規に発生した入力要求を予測される受信データ量が最小であるキューに格納する。【選択図】  図１
2006323729.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して他のストレージ装置と接続され、前記他のストレージ装置へ送信すべき入出力要求を一時的に格納するための複数の送信キューを有するストレージ装置であって、
前記入出力要求が入力要求の場合には、前記送信キューにすでに格納されている入出力要求によってもたらされるデータ受信量が最小である送信キューを選択し、前記入出力要求が出力要求の場合には、前記送信キューにすでに格納されている入出力要求によってもたらされるデータ送信量が最小である送信キューを選択する手段と、
選択された送信キューに前記送信すべき入出力要求を格納する手段とを有することを特徴とするストレージ装置。
【請求項２】
前記送信キューは、前記ストレージ装置を前記他のストレージ装置に接続するためのポート対応に設けられることを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記ストレージ装置は、その記憶装置上に前記ポートごとに前記データ送信量と前記データ受信量を格納するテーブルを保持することを特徴とする請求項２記載のストレージ装置。
【請求項４】
ネットワークを介してホスト計算機及び他のストレージ装置と接続され、前記他のストレージ装置へ送信すべき入出力要求を一時的に格納するための複数の送信キューと、前記ホスト計算機から受信した入出力要求を一時的に格納するための前記送信キューの各々と対をなす受信キューとを有するストレージ装置であって、
前記受信キューに格納されている入力要求によってもたらされるデータ送信量と前記受信キューに格納されている出力要求によってもたらされるデータ送信量との合計が最小である送信キューを選択する手段と、
選択された送信キューに前記送信すべき入出力要求を格納する手段とを有することを特徴とするストレージ装置。
【請求項５】
前記送信キューは、前記ストレージ装置を前記他のストレージ装置に接続するためのポート対応に設けられることを特徴とする請求項４記載のストレージ装置。
【請求項６】
前記ストレージ装置は、その記憶装置上に前記ポートごとに前記データ送信量と前記データ受信量を格納するテーブルを保持することを特徴とする請求項５記載のストレージ装置。
【請求項７】
ＣＰＵと、メモリと、
ネットワークを介して外部ストレージ装置と接続され、入出力コマンドと応答を送受信する複数のポートと、
ネットワークを介してホスト計算機と接続され、入出力コマンドと応答を送受信するポートと、
前記ポート対応に設けられ、前記外部ストレージ装置へ送信すべき入出力コマンドを一時的に格納するために前記メモリ上に設けられる複数の送信キューと、
前記ポート対応に設けられ、前記ホスト計算機から受信した入出力コマンドを一時的に格納するために前記メモリ上に設けられる複数の受信キューと、
前記ポートごとに前記送信キューに保留される前記入出力コマンドによってもたらされるデータのデータ送信量とデータ受信量を保持するために前記メモリ上に設けられるデータ送受信量情報と、
前記受信キューに格納される入出力コマンドが入力コマンドの場合には、前記データ受信量が最小である送信キューを選択し、前記受信キューに格納される入出力コマンドが出力コマンドの場合には、前記データ送信量が最小である送信キューを選択し、当該入出力コマンドを前記受信キューから選択された送信キューに転送し、選択した送信キューに対応する当該データ受信量又はデータ送信量を当該入出力コマンドによって増加するデータ量だけ増加させる、前記メモリに格納され前記ＣＰＵによって実行することによって実現されるコマンド転送プログラムとを有し、
前記出力コマンドを選択された送信キューから前記ポートを介して送信する際に増加したデータ量だけ前記データ送信量を減少させ、前記入力コマンドに対応する応答を受信した際に増加したデータ量だけ前記データ受信量を減少させることを特徴とするストレージ装置。
【請求項８】
さらに前記メモリ上にペンディング中の入出力コマンドの識別子を保持するためのコマンド管理情報を設け、前記ストレージ装置は、前記入出力コマンドを前記送信キューから前記ポートを介して送信する際に前記コマンド管理情報に送信する入出力コマンドを登録し、当該入出力コマンドに対応する応答を受信した際に当該入出力コマンドの識別子を削除することを特徴とする請求項７記載のストレージ装置。
【請求項９】
ネットワークを介してストレージ装置と接続され、前記ストレージ装置へ送信すべき入出力要求を一時的に格納するための複数の送信キューを有するホスト計算機であって、
前記入出力要求が入力要求の場合には、前記送信キューにすでに格納されている入出力要求によってもたらされるデータ受信量が最小である送信キューを選択し、前記入出力要求が出力要求の場合には、前記送信キューにすでに格納されている入出力要求によってもたらされるデータ送信量が最小である送信キューを選択する手段と、
選択された送信キューに前記送信すべき入出力要求を格納する手段とを有することを特徴とするホスト計算機。
【請求項１０】
前記送信キューは、前記ホスト計算機を前記ストレージ装置に接続するためのポート対応に設けられることを特徴とする請求項９記載のホスト計算機。
【請求項１１】
前記ホスト計算機は、その記憶装置上に前記ポートごとに前記データ送信量と前記データ受信量を格納するテーブルを保持することを特徴とする請求項１０記載のホスト計算機。
【請求項１２】
ＣＰＵと、メモリと、
ネットワークを介してホスト計算機および外部ストレージ装置と接続され、入出力コマンドと応答を送受信する複数のポートと、
前記ポート対応に設けられ、前記外部ストレージ装置へ送信すべき入出力コマンドを一時的に格納するために前記メモリ上に設けられる複数の送信キューと、
前記ポート対応に設けられ、前記ホスト計算機から受信した入出力コマンドを一時的に格納するために前記メモリ上に設けられる複数の受信キューと、
前記ポートごとに前記受信キューに保留される前記入出力コマンドによってもたらされるデータのデータ送信量とデータ受信量を保持するために前記メモリ上に設けられるデータ送受信量情報と、
前記受信キューに格納される入出力コマンドが入力コマンドの場合には、前記データ送信量が最小である送信キューを選択し、前記受信キューに格納される入出力コマンドが出力コマンドの場合には、前記データ受信量が最小である送信キューを選択し、当該入出力コマンドを前記受信キューから選択された送信キューに転送し、選択した送信キューに対応する当該データ受信量又はデータ送信量を当該入出力コマンドによって増加するデータ量だけ増加させる、前記メモリに格納され前記ＣＰＵによって実行することによって実現されるコマンド転送プログラムとを有し、
前記出力コマンドを選択された送信キューから前記ポートを介して送信する際に増加したデータ量だけ前記データ送信量を減少させ、前記入力コマンドに対応する応答を受信した際に増加したデータ量だけ前記データ受信量を減少させることを特徴とするストレージ装置。
【請求項１３】
さらに前記メモリ上にペンディング中の入出力コマンドの識別子を保持するためのコマンド管理情報を設け、前記ストレージ装置は、前記入出力コマンドを前記送信キューから前記ポートを介して送信する際に前記コマンド管理情報に送信する入出力コマンドを登録し、当該入出力コマンドに対応する応答を受信した際に当該入出力コマンドの識別子を削除することを特徴とする請求項１２記載のストレージ装置。
【請求項１４】
ネットワークを介してストレージ装置と接続され、前記ストレージ装置へ入出力要求を送信するホスト計算機と、
ネットワークを介して他のストレージ装置と接続され、前記他のストレージ装置へ送信すべき入出力要求を一時的に格納するための複数の送信キューと、前記ホスト計算機から受信した入出力要求を一時的に格納するための受信キューとを有するストレージ装置であって、
前記受信キューに受信した前記入出力要求が入力要求の場合には、前記送信キューにすでに格納されている入出力要求によってもたらされるデータ受信量が最小である送信キューを選択し、前記受信キューに受信した前記入出力要求が出力要求の場合には、前記送信キューにすでに格納されている入出力要求によってもたらされるデータ送信量が最小である送信キューを選択する手段と、
選択された送信キューに前記送信すべき入出力要求を格納する手段とを有するストレージ装置と、を備えることを特徴とする計算機システム。
【請求項１５】
前記送信キューは、前記ストレージ装置を前記他のストレージ装置に接続するためのポート対応に設けられ、前記受信キューは、前記ストレージ装置を前記ホスト計算機に接続するためのポート対応に設けられることを特徴とする請求項１４記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムにおける負荷分散方法に係わり、特に、ストレージ装置に関連するポートの負荷分散方法に関するものである。
【背景技術】
【０００２】
従来、サーバ計算機とストレージ装置を専用ネットワークで接続するストレージエリアネットワーク(ＳＡＮ)において、入出力要求を発行するための経路に冗長性を持たせるマルチパス技術が使用されてきた。マルチパス技術によって、使用中の経路に障害が発生した場合でも他の経路に切り替えて入出力要求を発行したり、所定の規則に従って複数の経路に入出力要求を発行することによって入出力スループットを向上させるといったことが可能となる。
【０００３】
複数の経路を用いてストレージへ入出力要求を発行する装置が各入出力要求を発行すべき経路を選択するアルゴリズムの例として、予め経路ごとに定めた発行順に従って入出力要求を発行するラウンドロビンがある。このほかの例として、経路ごとに割り当てたキューに格納された入出力要求の数が最小の経路に発行するという最小キュー数（Least Queue Depth）アルゴリズムや、経路ごとに割り当てたキューに格納された書き込みブロック数の総和が最小の経路に発行するというもの最小ブロック数（Least Blocks）アルゴリズムがある。特にLeast Blocksアルゴリズムでは、キューに格納された書き込み要求の要求ブロック数から今後発生する送信データ量を予測し、経路間で送信データ量を平滑化できるという特徴がある。
【０００４】
【非特許文献１】SNIA “Multipath Management API”
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来技術は、いずれも経路ごとの受信データ量の予測を行っていないため、経路間で受信データ量に大きな偏りが発生したり、書き込み要求に伴う送信負荷が高い場合には、受信負荷が低いにもかかわらず読み込み要求を発行できないといった問題があった。
【課題を解決するための手段】
【０００６】
上記課題を解決するため、入出力要求を発行する装置は、送信キュー内の書き込み要求によって発生する送信データ量のみならず、送信キュー内の読み込み要求によって発生する受信データ量をも予測する。入出力要求を発行する装置は、新規に発生した書き込み要求を予測される送信データ量が最小であるキューに格納し、新規に発生した読み込み要求を予測される受信データ量が最小であるキューに格納する。
【０００７】
さらに、入出力要求を発行する装置は、受信した書き込み要求および読み込み要求によって発生する各ポートのデータ送信量およびデータ受信量を予測し、前述の自ら発行する書き込み要求および読み込み要求によって発生すると予測される各ポートのデータ送信量およびデータ受信量にそれぞれ加算する。
【発明の効果】
【０００８】
本発明によれば、経路間で送信データ量と受信データ量を同時に平滑化し、データ入出力のスループットを向上させることができる。また、経路が単一である場合も、入出力要求を発行する装置のポートのデータ受信能力を超えないように読み込み要求をストレージに対して発行することができる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の実施形態について図面を用いて説明する。
【実施例１】
【００１０】
実施例１は、ストレージがホスト計算機から受け取ったＳＣＳＩコマンドを外部ストレージに転送する計算機システムに本発明を適用する例である。
【００１１】
図１は、実施例１の計算機システムの構成図である。図示するように実施例１の計算機システムは、ストレージ１００と、外部ストレージ１１０と、複数のホスト１３０と、管理用端末１５０と、を有する。そして、ストレージ１００と、外部ストレージ１１０とは、インターネットなどのネットワーク１２０を介して接続している。また、ストレージ１００と、複数のホスト１３０とは、ネットワーク１４０を介して接続されている。また、ストレージ１００は、管理用端末１５０に接続されている。
【００１２】
ホスト１３０は、ストレージ１００に対してデータの入出力を伴うアプリケーションを実行する情報処理装置（ホスト計算機）である。
【００１３】
ストレージ１００は、ＣＰＵ１０１と、メモリ１０２と、アクセスを高速化するために一時的にデータを記憶するキャッシュ１０３と、ディスクコントローラ１０４と、１台以上のディスク１０５と、ポート１０６と、管理ポート１０８と、これらの装置を接続するバス１０９と、を有するストレージ装置である。
【００１４】
ＣＰＵ１０１は、メモリ１０２に記憶されたプログラムを実行することによって、後述する各種の処理を行う。メモリ１０２は、後述するプログラムおよびデータを記憶するための装置である。キャッシュ１０３は、書き込みデータを一時的に記憶するための装置である。ディスクコントローラ１０４は、ディスク１０５へのデータの入出力を制御する装置である。なお、ディスクコントローラ１０４は、ＲＡＩＤ(Redundant Array of Independent Disks) に相当する処理を行うものであってもよい。ディスク１０５は、ホスト１３０が読み書きするデータを記憶する装置である。記憶装置１０７は、ストレージ１００の起動時にメモリ１０２にロードされるプログラムおよびデータを記憶するための不揮発メモリである。
【００１５】
ポート１０６は、ストレージ１００にＬＡＮ(Local Area Network)ケーブルを接続するためのネットワークカード等の機構であり、ネットワーク１２０，１４０を介して外部の装置とデータの送受信処理を行う。なお、本実施形態では、ストレージ１００は３つのポート１０６を有するものとするが、本発明の実施形態としてはストレージ１００が３つ以上のポート１０６を持つものであってもよい。管理ポート１０８は、管理用端末１５０をストレージ１００に接続するための装置である。
【００１６】
ストレージ１００は、ホスト１３０が発行した入出力要求をネットワーク１２０を介して外部ストレージ１１０へ転送し、外部ストレージ１１０から受信した応答およびデータをホスト１３０へ転送する中継機能を有する。外部ストレージ１３０は、この中継機能を除いてストレージ１００と同様の構成を有する。
【００１７】
ホスト１３０は、ｉＳＣＳＩプロトコルにおけるイニシエータの機能を有する。ストレージ１００は、ターゲットとイニシエータの機能を有する。外部ストレージ１１０は、ターゲットの機能を有する。
【００１８】
図２は、ストレージ１００のメモリ１０２に記憶されるプログラムおよびデータを示したものである。メモリ１０２には、イニシエータプログラム２０１と、ターゲットプログラム２０２と、コマンド転送プログラム２０３と、送信キュー２０４と、受信キュー２０５と、データ送受信量情報２０６と、コマンド管理情報２０７と、ターゲット情報２０８と、冗長パス制御プログラム２０９と、初期化プログラム２１０とが記憶される。
【００１９】
イニシエータプログラム２０１は、ｉＳＣＳＩプロトコルに基づいてＳＣＳＩコマンドおよびデータをｉＳＣＳＩ ＰＤＵにカプセル化したり、ｉＳＣＳＩ ＰＤＵからＳＣＳＩ応答を取り出し、外部のｉＳＣＳＩターゲットとの間でｉＳＣＳＩ ＰＤＵの送受信を行うためのプログラムである。イニシエータプログラム２０１は、ポート１０６がＳＣＳＩ応答を含むｉＳＣＳＩ ＰＤＵを受信した時にｉＳＣＳＩ ＰＤＵからＳＣＳＩ応答を取り出し受信キューに格納する。ｉＳＣＳＩコマンドの送信の際の動作の詳細は後述する。
【００２０】
ターゲットプログラム２０２は、ＳＣＳＩコマンドおよびデータをｉＳＣＳＩ ＰＤＵとの間で相互に変換し、ｉＳＣＳＩ ＰＤＵの送受信を行うためのプログラムである。ターゲットプログラム２０２は、ポート１０６がｉＳＣＳＩ ＰＤＵを受信した時にｉＳＣＳＩ ＰＤＵからＳＣＳＩコマンドを取り出し受信キュー２０５に格納する。また、ターゲットプログラム２０２は、後述する送信キュー２０４の先頭に格納されているＳＣＳＩ応答にiＳＣＳＩヘッダを付与してホスト１３０に対して送信する。このときの動作の詳細は後述する。
【００２１】
コマンド転送プログラム２０３は、受信キュー２０５の先頭に格納されているＳＣＳＩコマンドを送信キュー２０４に格納したり、イニシエータプログラム２０１が受信したＳＣＳＩ応答を送信キュー２０４に格納するためのプログラムである。動作の詳細は後述する。
【００２２】
冗長パス制御プログラム２０９および初期化プログラム２１０については、後述する。
【００２３】
送信キュー２０４は、ポートごとに定義された送信すべきＳＣＳＩコマンドあるいはＳＣＳＩ応答を格納するためのメモリ１０２内の領域である。本実施形態では、ストレージ１００は３つのポート１０６を有するため、送信キューは３つある。ポート１０６a、１０６b、１０６cに対応する送信キューをそれぞれ２０４a、２０４b、２０４cとする。図３は、送信キュー２０４a、２０４b、２０４cの例を示す図である。図３に示す例では、送信キュー２０４のメモリ領域は領域３０１を先頭として領域３０２、領域３０３、領域３０４の順に順位付けられる。イニシエータプログラム２０１あるいはターゲットプログラム２０２は、送信キュー２０４の先頭に格納されているＳＣＳＩコマンドあるいはＳＣＳＩ応答を読み出し削除するとともに、２番目以降に格納されているＳＣＳＩコマンドあるいはＳＣＳＩ応答の順位を繰り上げる。図３に示す例では、２ブロックの書き込みを要求するＳＣＳＩ Ｗｒｉｔｅが送信キュー２０４aの先頭に格納されている。なお、本実施形態では、ブロックサイズを５１２バイトとする。
【００２４】
受信キュー２０５は、ポートごとに定義された受信済みのＳＣＳＩマンドあるいはＳＣＳＩ応答を格納するためのメモリ１０２内の領域である。本実施形態では、上述の送信キュー同様、受信キュー２０５は３つあり、ポート１０６a、１０６b、１０６cに対応する受信キューをそれぞれ２０５a、２０５b、２０５cとする。図４は、受信キュー２０５a、２０５b、２０５cの例を示す図である。送信キュー２０４と同様、受信キュー２０５のメモリ領域は領域４０１を先頭として領域４０２、領域４０３、領域４０４の順に順位付けられる。イニシエータプログラム２０１あるいはターゲットプログラム２０２は、受信キュー２０５の先頭に格納されているＳＣＳＩコマンドあるいはＳＣＳＩ応答を読み出し削除するとともに、２番目以降に格納されているＳＣＳＩコマンドあるいはＳＣＳＩ応答の順位を繰り上げる。
【００２５】
この例では、送信キュー２０４a、２０４ｂには、外部ストレージ１１０向けのＲｅａｄコマンドとＷｒｉｔｅコマンドが格納されており、Ｒｅａｄコマンドのデータ受信量とＷｒｉｔｅコマンドのデータ送信量がそれぞれ示されている。また受信キュー２０５a、２０５bには、外部ストレージ１１０から受信したＲｅａｄ応答とＷｒｉｔｅ応答が格納されている。Ｒｅａｄ応答は、Ｒｅａｄコマンドに対する応答データである。受信キュー２０５cには、ホスト１３０から受信したＷｒｉｔｅコマンドが格納されており、Ｗｒｉｔｅコマンドのデータ受信量が示されている。また送信キュー２０４cには、ホスト１３０へ送信するＲｅａｄ応答が格納されている。
【００２６】
なお、図３および図４に示すキューでは、キューに格納できるＳＣＳＩコマンドあるいはＳＣＳＩ応答の最大数が４である場合について示したが、キューに格納できるＳＣＳＩコマンドあるいはＳＣＳＩ応答の最大数が１以上であればよい。
【００２７】
図５は、データ送受信量情報２０６の例を示す図である。データ送受信量情報２０６は、ポート識別子５０１、送信バイト数５０２、受信バイト数５０３、イニシエータ割当情報５０４を組とする情報からなるテーブルである。ポート識別子５０１はポートを識別する名を表す。送信バイト数５０２は、キューに格納されているＳＣＳＩ Ｗｒｉｔｅによって発生する送信データのバイト数を表す。受信バイト数５０３は、キューに格納されているＳＣＳＩ Ｒｅａｄによって発生する受信データのバイト数を表す。イニシエータ割当情報５０４は、イニシエータプログラム２０１が割り当てられているかどうかを表す。セル５０５内の値「１」は、イニシエータプログラム２０１が入出力要求をポートbから発行できることを意味する。セル５０６内の値「０」は、イニシエータプログラム２０１が入出力要求をポートcから発行できないことを意味する。セル５０７は、送信キュー２０４bに格納されているＳＣＳＩ Ｒｅａｄの要求データ量の総和が２０４８バイトであることを意味する。
【００２８】
図６は、コマンド管理情報２０７の例を示す図である。コマンド管理情報２０７は、コマンドタグ６０１、イニシエータ名６０２、ターゲット名６０３を組とする情報からなるテーブルである。コマンドタグ６０１は、ＳＣＳＩコマンドを識別するための番号を表す。イニシエータ名６０２は、ＳＣＳＩコマンドの発行元のイニシエータの名を表す。ターゲット名６０３は、ＳＣＳＩコマンドの発行先のターゲットの名を表す。図６に示した例では、イニシエータＩ１がターゲットＴ１へＳＣＳＩコマンド１１およびＳＣＳＩコマンド１２を発行していることを意味する。なお、応答の完了したＳＣＳＩコマンドに対応する項目はコマンド管理情報２０７から削除される。このようにコマンド管理情報２０７で管理されるＳＣＳＩコマンドの送信を完了しており、かつそれに対応するＳＣＳＩ応答を受信していない状態にある入出力要求をアウトスタンディングＩ／Ｏと呼ぶ。同時刻におけるアウトスタンディングＩ／Ｏの数には上限値が予め設定されており、イニシエータプログラム２０１は同時刻におけるアウトスタンディングＩ／Ｏの数がその上限値を超えないよう制御する。この上限値のことを最大アウトスタンディングＩ／Ｏ数と呼ぶ。
【００２９】
図７は、ターゲット情報２０８の例を示す図である。ターゲット情報２０８は、ターゲット名７０１と、所在７０２を組とする情報からなるテーブルである。ターゲット名７０１はターゲットを識別する名を表す。所在７０２はホスト名、ＩＰアドレス、ＴＣＰポート番号等で特定されるターゲットの所在を表す。図７に示した例では、ターゲット“localtarget”がＩＰアドレス192.168.1.1、ＴＣＰポート番号3260で特定される位置すなわちストレージ１００内部で動作しており、外部ストレージ１１０に所在するターゲット“remotetarget”がＩＰアドレス192.168.2.2、ＴＣＰポート番号3260で特定される位置およびＩＰアドレス192.168.3.2、ＴＣＰポート番号3260で特定される位置で動作していることを意味する。
【００３０】
冗長パス制御プログラム２０９は、管理ポート１０８を通して管理用端末１５０が負荷分散アルゴリズム等を設定することを可能とするためのプログラムである。冗長パス制御プログラム２０９によって、本発明によるアルゴリズムのほかに、ラウンドロビン、Least Queue Depth、Least Blocks等のアルゴリズムも設定可能である。
【００３１】
初期化プログラム２１０は、図５に示すデータ送受信量情報２０６、図６に示すコマンド管理情報２０７、および図７に示すターゲット情報２０８を初期化するためのプログラムである。ＣＰＵ１０１は、ストレージ１００に電源が投入された時など、ストレージ１００の初期化処理を行う際、メモリ１０２に記憶された初期化プログラム２１０を実行することにより、データ送受信量情報２０６、コマンド管理情報２０７およびターゲット情報２０８を初期化する。
【００３２】
管理用端末１５０は、ストレージ１００に対して設定作業などの操作を行うためのパーソナルコンピュータ等の装置である。管理用端末１５０は、ＣＰＵ１５１と、メモリ１５２と、記憶装置１５３と、入力装置１５４と、出力装置１５５と、ポート１５６と、これらの装置を接続するバス１５７と、を有する。ＣＰＵ１５１は、メモリ１５２に記憶されたプログラムを実行することによって、後述する処理を行う。メモリ１５２は、後述するプログラムおよびデータを記憶するための装置である。記憶装置１５３には、管理用端末１５０の起動時にメモリ１５２にロードされるプログラムおよびデータとが記憶されている。ポート１５６は、管理用端末１５０にＬＡＮ(Local Area Network)ケーブルを接続するためのネットワークカード等の機構であり、このＬＡＮを介してストレージ１００とデータの送受信処理を行う。
【００３３】
図８は、管理用端末１５０のメモリ１５２に記憶されるプログラムを示したものである。メモリ１０２には、冗長パス設定プログラム９０１が記憶される。
【００３４】
冗長パス設定プログラム９０１は、ストレージ１００に対して負荷分散アルゴリズム等を設定するためのプログラムである。冗長パス設定プログラム９０１は、入力装置１５４を介して選択された負荷分散アルゴリズムを冗長パス制御プログラム２０９に通知する。
【００３５】
次に、本計算機システムの動作およびストレージ１００の各処理について説明する。
【００３６】
まず、ストレージ１００がホスト１３０から受信したＳＣＳＩコマンドおよびデータを外部ストレージ１１０へ転送するときの動作について、図９を用いて説明する。
【００３７】
図９は、コマンド転送プログラム２０３がＳＣＳＩコマンドを転送する処理のフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶されたコマンド転送プログラム２０３を実行することにより行われる。コマンド転送プログラム２０３は、受信キュー２０５cの先頭にＳＣＳＩコマンドが格納されていなければ（S８０１：No）、受信キュー２０５cの先頭にＳＣＳＩコマンドが格納されるまで当該コマンド転送処理を行わない。コマンド転送プログラム２０３は、受信キュー２０５cの先頭にＳＣＳＩコマンドが格納されているならば（S８０１：Yes）、ターゲット情報２０８を参照し、そのＳＣＳＩコマンドが外部ストレージ１１０宛か否かを判断する（S８０２）。そのＳＣＳＩコマンドが外部ストレージ宛でなければ（S８０２:No）、ディスクコントローラ１０４にそのＳＣＳＩコマンドを転送し（S８０３）、S８０８へ行く。
【００３８】
一方、そのＳＣＳＩコマンドが外部ストレージ宛であれば(S８０２:Yes)、そのＳＣＳＩコマンドがＳＣＳＩ Ｒｅａｄであるか否か判断する（S８０４）。そのＳＣＳＩコマンドがＳＣＳＩ Ｒｅａｄであれば(S８０４:Yes)、コマンド転送プログラム２０３は、データ送受信量情報２０６を参照し、イニシエータ割当情報５０４が「１」となっているポートのうち、受信バイト数５０３が最小であるポートに対応する送信キュー２０４にそのＳＣＳＩ Ｒｅａｄコマンドを格納する（S８０５）。一方、ＳＣＳＩコマンドがＳＣＳＩ Ｒｅａｄでなければ(S８０４:No)、ＳＣＳＩ Ｗｒｉｔｅコマンド又はその他のコマンドであるから、コマンド転送プログラム２０３は、データ送受信量情報２０６を参照し、イニシエータ割当情報５０４が「１」となっているポートのうち、送信バイト数５０２が最小であるポートに対応する送信キュー２０４にそのＳＣＳＩコマンドを格納する（S８０６）。
【００３９】
処理S８０５あるいは処理S８０６の後、コマンド転送プログラム２０３は、送信キュー２０４に格納したＳＣＳＩコマンドのデータ送受信量に応じてデータ送受信量情報２０６を更新する（S８０７）。すなわちＳＣＳＩ Ｒｅａｄコマンドの場合には、データ送受信量情報２０６の選択した送信キューに対応するポートの受信バイト数５０３に当該コマンドにより受信するデータ受信量を加える。ＳＣＳＩ Ｗｒｉｔｅコマンドの場合には、データ送受信量情報２０６の選択した送信キューに対応するポートの送信バイト数５０２に当該コマンドにより送信するデータ送信量を加える。その他のＳＣＳＩコマンドの場合には、データ送受信量は無視できるから、データ送受信量情報２０６の更新をしない。さらに、コマンド転送プログラム２０３は、送信キューに格納したＳＣＳＩコマンドが格納されている受信キュー２０５の先頭のエントリを消去し、先頭から２番目以降に格納されている各ＳＣＳＩコマンドの格納位置を先頭側に１ずつ進める（S８０８）。
【００４０】
例えば、受信キュー２０５cの先頭に１０２４バイトのＳＣＳＩ Ｒｅａｄコマンドが格納されているとすると、図５に示す送信キュー２０４aに対応する受信バイト数５０３が最小であるため、コマンド転送プログラム２０３は、S８０５で送信キュー２０４aにこのＳＣＳＩ Ｒｅａｄコマンドを格納する。
【００４１】
例えば、受信キュー２０５cの先頭に１０２４バイトのＳＣＳＩ Ｗｒｉｔｅコマンドが格納されているとすると、図５に示す送信キュー２０４bの送信バイト数５０２が最小であるため、コマンド転送プログラム２０３は、S８０６で送信キュー２０４bにこのＳＣＳＩ Ｗｒｉｔｅコマンドを格納する。
【００４２】
図１０は、イニシエータプログラム２０１がＳＣＳＩコマンドを送信する処理のフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶されたイニシエータプログラム２０１を実行することにより行われる。イニシエータプログラム２０１は、送信キュー２０４aあるいは送信キュー２０４bの先頭にＳＣＳＩコマンドが格納されているならば（S１００１：Yes）、コマンド管理情報２０７を参照し、現在のアウトスタンディングＩ／Ｏ数が最大アウトスタンディングＩ／Ｏ数未満であるかどうか判定する（S１００２）。イニシエータプログラム２０１は、送信キュー２０４の先頭にＳＣＳＩコマンドが格納されていなければ（S１００１：No）、送信キュー２０４の先頭にＳＣＳＩコマンドが格納されるまで当該コマンド送信処理を行わない。イニシエータプログラム２０１は、処理S１００２を行った後、現在のアウトスタンディングＩ／Ｏ数が最大アウトスタンディングＩ／Ｏ数未満であるならば（S１００２：Yes）、ＳＣＳＩコマンドとデータにiＳＣＳＩヘッダを付与してiＳＣＳＩ ＰＤＵを生成し（S１００３）、このiＳＣＳＩ ＰＤＵをイーサネット（登録商標）フレームに分割して送信キュー２０４に対応するポート１０６から送信し（S１００４）、コマンド管理情報２０７にそのＳＣＳＩコマンドのエントリを追加する（S１００５）。
【００４３】
一方、現在のアウトスタンディングＩ／Ｏ数が最大アウトスタンディングＩ／Ｏ数と等しい（S１００２：No）ならば、現在のアウトスタンディングＩ／Ｏ数が最大アウトスタンディングＩ／Ｏ数未満になるまで待ちの状態となる。本実施形態においては、最大アウトスタンディングＩ／Ｏ数が４である場合を取り上げて説明しているが、送信キューに格納できるコマンドの最大数を超えない限り、最大アウトスタンディングＩ／Ｏ数についての限定はない。
【００４４】
S１００５の処理の後、イニシエータプログラム２０１は、送信キュー２０４から送信したＳＣＳＩコマンドを消去し、先頭から２番目以降に格納されている各ＳＣＳＩコマンドの格納位置を先頭側に１ずつ勧める（S１００６）。次にイニシエータプログラム２０１は、データ送受信量情報２０６を更新する（S１００７）。ＳＣＳＩ Ｗｒｉｔｅコマンドの場合には、データ送受信量情報２０６の当該コマンドを送信したポートに対応する送信バイト数５０２から送信したデータ送信量を差し引く。ＳＣＳＩ Ｒｅａｄコマンドの場合には、データ送受信量情報２０６の更新をしない。
【００４５】
次に、ストレージ１００が外部ストレージ１１０から受信したＳＣＳＩ応答およびＲｅａｄデータをホスト１３０へ転送するときの動作について、図１１を用いて説明する。
【００４６】
図１１は、コマンド転送プログラム２０３がＳＣＳＩ応答およびデータを転送する処理のフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶されたコマンド転送プログラム２０３を実行することにより行われる。コマンド転送プログラム２０３は、受信キュー２０５aあるいは２０５bの先頭にＳＣＳＩ応答およびデータが格納されているならば（S１１０１：Yes）、そのＳＣＳＩ応答を、対応するＳＣＳＩコマンドを受信したポートに対応する送信キュー２０４に格納する（S１１０２）。さらに、コマンド転送プログラム２０３は、受信キュー２０５aあるいは２０５bのうちＳＣＳＩ応答を取り出した方の受信キューの先頭に格納されているＳＣＳＩ応答を消去し、先頭から２番目以降に格納されている各ＳＣＳＩコマンドの格納位置を先頭側に１ずつ進める（S１１０３）。次にコマンド転送プログラム２０３は、データ送受信量情報２０６を更新する（S１１０４）。Ｒｅａｄ応答の場合には、データ送受信量情報２０６の当該応答を受信したポートに対応する受信バイト数５０３から受信したデータ受信量を差し引く。Ｗｒｉｔｅ応答の場合には、データ送受信量情報２０６の更新をしない。
【００４７】
コマンド転送プログラム２０３は、受信キュー２０５の先頭にＳＣＳＩ応答が格納されていなければ（S１１０１：No）、送信キュー２０４の先頭にＳＣＳＩ応答が格納されるまで当該応答の転送処理を行わない。
【００４８】
図１２は、ターゲットプログラム２０２がＳＣＳＩ応答およびＲｅａｄデータを送信する処理のフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶されたターゲットプログラム２０２を実行することにより行われる。ターゲットプログラム２０２は、送信キュー２０４の先頭にＳＣＳＩ応答およびデータが格納されているならば（S１２０１：Yes）、そのＳＣＳＩ応答およびデータからiＳＣＳＩ ＰＤＵを生成し（S１２０２）、生成したiＳＣＳＩ ＰＤＵをポートから送信し（S１２０３）、コマンド管理情報２０７から当該ＳＣＳＩ応答に対応するＳＣＳＩコマンドのエントリを削除する（S１２０４）。次にターゲットプログラム２０２は、送信キュー２０４から送信したＳＣＳＩ応答を消去し、先頭から２番目以降に格納されている各ＳＣＳＩ応答の格納位置を先頭側に１ずつ進める（S１２０５）。
【００４９】
ターゲットプログラム２０２は、送信キュー２０４の先頭にＳＣＳＩ応答が格納されていなければ（S１２０１：No）、送信キュー２０４の先頭にＳＣＳＩコマンドが格納されるまで当該応答の送信処理を行わない。
【００５０】
実施例１により、ストレージ１００で動作するiＳＣＳＩイニシエータが送受信する単位時間当たりの送受信データ量をポート間で平滑化することができる。
【００５１】
実施例１では、ストレージ１００が単一のポート１０６ｃを介してホスト１３０との間でＳＣＳＩコマンドおよびＳＣＳＩ応答を送受信する例を取り上げて説明した。しかしストレージ１００が２個以上のポートを介してホスト１３０との間でＳＣＳＩコマンドおよびＳＣＳＩ応答を送受信する場合にも、同様に本発明を適用できる。これについては、実施例３で詳細説明する。
【実施例２】
【００５２】
実施例１は、ストレージ１００がポート１０６をＳＣＳＩコマンドの送信とＳＣＳＩ応答の受信にのみ使用する場合の処理について説明した。言い換えれば、ポート１０６ａ、１０６ｂはイニシエータ専用に使用され、ＳＣＳＩコマンドを受信することはなく、ポート１０６ｃはターゲット専用に使用され、ＳＣＳＩコマンドを送信することはなく、各ポートの役割が限定されていた。このため実施例１では、送信ポートの負荷のみを考慮してポート間の負荷分散をすればよかった。実施例２は、ストレージ１００がポート１０６をＳＣＳＩコマンドの送受信およびＳＣＳＩ応答の送受信に使用する場合の処理を説明するものである。
【００５３】
図１３は、実施例２の計算機システムの構成図である。ストレージ１００とホスト１３０を接続するネットワーク１２０がストレージ１００と外部ストレージ１１０を接続するネットワーク１２０と同一のものである点、およびターゲットプログラム２０２の動作に変更が生じる点以外は、本システムを構成する装置およびプログラムは、実施例１におけるものと同じである。実施例２では、各ポート１０６の役割が実施例１のように限定されていない。このため実施例２では、送信ポートと受信ポートの両方の負荷を考慮してポート間の負荷分散をする。
【００５４】
本計算機システムの動作およびストレージ１００の該当する処理について以下に説明する。
【００５５】
図１４は、ターゲットプログラム２０２がiＳＣＳＩ ＰＤＵを受信する処理のフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶されたターゲットプログラム２０２を実行することにより行われる。ポート１０６がiＳＣＳＩ ＰＤＵを受信すると（S１４０１:Yes）、ターゲットプログラム２０２は、そのiＳＣＳＩ ＰＤＵからＳＣＳＩコマンドとデータを取り出す（S１４０２）。さらにターゲットプログラム２０２は、コマンド管理情報２０７にＳＣＳＩコマンドのエントリを追加し（S１４０３）、受信キュー２０５の末尾にＳＣＳＩコマンドを追加する（S１４０４）。さらに、ターゲットプログラム２０２は、データ送受信量情報２０６を更新する（S１４０５）。受信したＳＣＳＩコマンドがＳＣＳＩ Ｒｅａｄの場合には、データ送受信量情報２０６の当該コマンドを受信したポートに対応する送信バイト数５０２に当該コマンドにより送信するデータ送信量を加える。受信したＳＣＳＩコマンドがＳＣＳＩ Ｗｒｉｔｅの場合には、データ送受信量情報２０６の当該コマンドを受信したポートに対応する受信バイト数５０３に当該コマンドにより受信するデータ送信量を加える。
【００５６】
例えば、ポート１０６aが１０２４バイトのデータを要求するＳＣＳＩ Ｒｅａｄコマンドを受信した場合、「２０４８」となっている受信バイト数５０２の値を「３０７２」に書き換える。
【００５７】
なおターゲットプログラム２０２は、iＳＣＳＩ ＰＤＵを受信するまでＰＤＵを送信する当該処理を行わない。
【００５８】
図１５は、ターゲットプログラム２０２がＳＣＳＩ応答およびＲｅａｄデータを送信する処理のフローチャートである。この処理は、ＣＰＵ１０１がメモリ１０２に記憶されたターゲットプログラム２０２を実行することにより行われる。ターゲットプログラム２０２は、送信キュー２０４の先頭にＳＣＳＩ 応答が格納されているならば（S１５０１：Yes）、そのＳＣＳＩ応答とデータからiＳＣＳＩ ＰＤＵを生成し（S１５０２）、生成したiＳＣＳＩ ＰＤＵを該当するポートから送信し（S１５０３）、コマンド管理情報２０７からこのＳＣＳＩ応答に対応するＳＣＳＩコマンドのエントリを削除する（S１５０４）。さらに、ターゲットプログラム２０２CPU１０１は送信キュー２０４の先頭に格納されているＳＣＳＩ応答を消去し、先頭から２番目以降に格納されているＳＣＳＩ応答の格納位置を先頭側に１進める（S１５０５）。さらに、ターゲットプログラム２０２は、送信キュー２０４に格納したＳＣＳＩコマンドの内容に応じてデータ送受信量情報２０６を更新する（S１５０６）。すなわちＲｅａｄ応答の場合には、データ送受信量情報２０６の当該ポートに対応する送信バイト数５０２から当該応答により送信するデータ送信量を差し引く。Ｗｒｉｔｅ応答の場合には、データ送受信量情報２０６の当該ポートに対応する受信バイト数５０３から当該Ｗｒｉｔｅコマンドにより受信したデータ受信量を差し引く。
【００５９】
なお、ターゲットプログラム２０２は、送信キュー２０４の先頭にＳＣＳＩ応答が格納されていなければ（S１５０１：No）、送信キュー２０４の先頭にＳＣＳＩ応答が格納されるまで当該応答の送信処理を行わない。
【００６０】
実施例２により、ストレージ１００で動作するiＳＣＳＩイニシエータおよびiＳＣＳＩターゲットが送受信する単位時間当たりの送受信データ量をポート間で平滑化することができる。
【実施例３】
【００６１】
実施例３は、ストレージ１００が２個以上のポートを介してホスト１３０との間でＳＣＳＩコマンドおよびＳＣＳＩ応答を送受信する場合のホスト１３０側のポート負荷分散制御を特徴とするものである。ホスト１３０に、コマンド転送プログラム２０３の代わりにコマンド発行プログラム２１１を設ける。イニシエータプログラム２０１は、S１００２およびS１００５を除いて図１０に示す処理を行う。ターゲットプログラム２０２はない。実施例１と同様に送信キュー２０４、受信キュー２０５およびデータ送受信量情報２０６が存在する。
【００６２】
実施例３についてのストレージ１００側の構成は、実施例２を構成するプログラムおよび制御情報がそのまま使用できる。
【００６３】
図１６は、コマンド発行プログラム２１１がＳＣＳＩコマンドを発行する処理のフローチャートである。この処理は、ホスト１３０のＣＰＵがメモリに記憶されたコマンド発行プログラム２１１を実行することにより行われる。コマンド発行プログラム２１１は、ＳＣＳＩバッファの先頭にＳＣＳＩコマンドが格納されていなければ（S１６０１：No）、ＳＣＳＩバッファの先頭にＳＣＳＩコマンドが格納されるまで当該コマンド送信処理を行わない。コマンド発行プログラム２１１は、ＳＣＳＩバッファの先頭にＳＣＳＩコマンドが格納されているならば（S１６０１：Yes）、そのＳＣＳＩコマンドがＳＣＳＩＲｅａｄであるか否か判定する（S１６０２）。そのＳＣＳＩコマンドがＳＣＳＩＲｅａｄであれば（S１６０２：Yes）、コマンド発行プログラム２１１は、データ送受信量情報２０６を参照し、イニシエータ割当情報５０４が「１」となっているポートのうち、受信バイト数５０３が最小であるポートに対応する送信キュー２０４にそのＳＣＳＩＲｅａｄコマンドを格納する（S１６０３）。一方、ＳＣＳＩコマンドがＳＣＳＩＲｅａｄでなければ（S１６０２：No）、コマンド発行プログラム２１１は、データ送受信量情報２０６を参照し、イニシエータ割当情報５０４が「１」となっているポートのうち、送信バイト数５０２が最小であるポートに対応する送信キュー２０４にそのＳＣＳＩコマンドを格納する（S１６０４）。処理S１６０３あるいは処理S１６０４の後、コマンド発行プログラム２１１は、送信キュー２０４に格納したＳＣＳＩコマンドの内容に応じてデータ送受信量情報２０６を更新する（S１６０５）。S１６０５の処理は、S８０７の処理と同様である。さらに、コマンド発行プログラム２１１は、転送したＳＣＳＩコマンドが格納されているＳＣＳＩバッファの先頭のエントリを消去し、先頭から２番目以降に格納されている各ＳＣＳＩコマンドの格納位置を先頭側に１ずつ進める（S１６０６）。
【００６４】
受信キュー２０５の先頭にＳＣＳＩ応答が存在するとき、コマンド発行プログラム２１１は、S１１０３およびS１１０４の処理を行う。
【００６５】
以上の実施例では、ＩＰネットワークでＳＡＮを構築し、iＳＣＳＩプロトコルによってＳＣＳＩコマンドとデータの送受信を行う場合を取り上げて説明したが、本発明はこれに限定するものではなく、ストレージに対するデータの入出力を行うプロトコルであれば、ファイバチャネル等、他のプロトコルを使用する場合でも本発明が同様に適用できる。
【図面の簡単な説明】
【００６６】
【図１】実施例１の計算機システムの構成図である。
【図２】実施例のストレージ装置のメモリの構成を示す図である。
【図３】送信キューの例を示す図である。
【図４】受信キューの例を示す図である。
【図５】データ送受信量情報の例を示す図である。
【図６】コマンド管理情報の例を示す図である。
【図７】ターゲット情報の例を示す図である。
【図８】実施例の管理用端末のメモリの構成を示す図である。
【図９】実施例１のコマンド転送プログラムのコマンド転送処理を示すフロー図である。
【図１０】実施例のイニシエータプログラムの処理を示す図である。
【図１１】実施例のコマンド転送プログラムのコマンド転送処理を示すフロー図である。
【図１２】実施例１のターゲットプログラムの処理を示す図である。
【図１３】実施例２の計算機システムの構成図である。
【図１４】実施例２のターゲットプログラムのコマンド受信処理を示す図である。
【図１５】実施例２のターゲットプログラムの応答送信処理を示す図である。
【図１６】実施例３のコマンド発行プログラムのコマンド送信処理を示す図である。
【符号の説明】
【００６７】
１００：ストレージ、１０６：ポート、１１０：外部ストレージ、１３０：ホスト、２０１：イニシエータプログラム、２０２：ターゲットプログラム、２０３：コマンド転送プログラム、２０４：送信キュー、２０５：受信キュー、２０６：データ送受信量情報。
【図１】
2006323729.tif 000003
【図２】
2006323729.tif 000004
【図３】
2006323729.tif 000005
【図４】
2006323729.tif 000006
【図５】
2006323729.tif 000007
【図６】
2006323729.tif 000008
【図７】
2006323729.tif 000009
【図８】
2006323729.tif 000010
【図９】
2006323729.tif 000011
【図１０】
2006323729.tif 000012
【図１１】
2006323729.tif 000013
【図１２】
2006323729.tif 000014
【図１３】
2006323729.tif 000015
【図１４】
2006323729.tif 000016
【図１５】
2006323729.tif 000017
【図１６】
2006323729.tif 000018