(57)【特許請求の範囲】
【請求項１】
ＳＡＳ（Serial Attached SCSI）ネットワークにおけるマルチパスを使用するシステムであって、
ＳＡＳイニシエータと、
第１のポート及び第２のポートを有するＳＡＳターゲットと、
前記ＳＡＳイニシエータに接続され、前記第１のポートと接続することにより第１のパスを形成し、前記第２のポートと接続することにより第２のパスを形成するＳＡＳエクスパンダと
を含み、
前記ＳＡＳエクスパンダは、
前記第１のパス及び前記第２のパスの各パスに対して、当該各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、
前記ＳＡＳイニシエータからＳＳＰ（Serial SCSI Protocol）コマンドフレームを受信し、前記ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、
前記受信部により前記ＳＳＰコマンドフレームを受信した場合に、前記記憶部に記憶された前記送受信データ量に基づいて、前記第１のパス及び前記第２のパスのうちの特定のパスを、当該ＳＳＰコマンドフレームを前記ＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、
前記記憶部に記憶された前記特定のパスに対する前記送受信データ量に、前記受信部により受信した前記ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、
前記ＳＡＳイニシエータからの全てのＳＳＰコマンドフレームをアボートするタスクマネジメントファンクションを送るためのＳＳＰタスクフレームに対応する前記ＳＳＰレスポンスフレームを前記受信部により受信した場合に、前記記憶部に記憶された当該全てのＳＳＰコマンドフレームについてそれぞれ決定された少なくとも１つのパスに対する前記送受信データ量から、当該全てのＳＳＰコマンドフレームがそれぞれ送受信を要求したデータの量を減算する減算部と、
前記受信部により受信した前記ＳＳＰコマンドフレームを前記特定のパスを用いて前記ＳＡＳターゲットへ送信し、前記受信部により受信した前記ＳＳＰレスポンスフレームを前記ＳＡＳイニシエータへ送信する送信部と
を含む、システム。
【請求項２】
前記ＳＡＳエクスパンダは、
前記受信部により前記ＳＳＰコマンドフレームを受信した旨の情報を保持する保持部を更に含み、
前記保持部は、前記ＳＳＰコマンドフレームを受信した旨の情報を保持してから予め定めた時間が経過しても当該情報を保持している場合に、当該情報を削除し、
前記減算部は、前記ＳＳＰコマンドフレームを受信した旨の情報を保持してから予め定めた時間が経過しても当該情報を保持している場合に、前記記憶部に記憶された前記特定のパスに対する前記送受信データ量から前記要求データ量を減算する、請求項１のシステム。
【請求項３】
ＳＡＳ（Serial Attached SCSI）ネットワークにおけるマルチパスを使用するシステムであって、
ＳＡＳイニシエータと、
第１のポート及び第２のポートを有するＳＡＳターゲットと、
前記ＳＡＳイニシエータに接続され、前記第１のポートと接続することにより、自身から前記ＳＡＳターゲットへの第１のパスを形成する第１のＳＡＳエクスパンダと、
前記ＳＡＳイニシエータに接続され、前記第２のポートと接続することにより、自身から前記ＳＡＳターゲットへの第１のパスを形成する第２のＳＡＳエクスパンダと
を含み、
前記第１のＳＡＳエクスパンダは、前記第２のＳＡＳエクスパンダを介して前記第２のポートと接続することにより、自身から前記ＳＡＳターゲットへの第２のパスを形成し、
前記第２のＳＡＳエクスパンダは、前記第１のＳＡＳエクスパンダを介して前記第１のポートと接続することにより、自身から前記ＳＡＳターゲットへの第２のパスを形成し、
前記第１のＳＡＳエクスパンダ及び前記第２のＳＡＳエクスパンダのそれぞれは、
自身から前記ＳＡＳターゲットへの前記第１のパス及び前記第２のパスの各パスに対して、当該各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、
前記ＳＡＳイニシエータからＳＳＰ（Serial SCSI Protocol）コマンドフレームを受信し、前記ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、
前記受信部により前記ＳＳＰコマンドフレームを受信した場合に、前記記憶部に記憶された前記送受信データ量に基づいて、自身から前記ＳＡＳターゲットへの前記第１のパス及び前記第２のパスのうちの特定のパスを、当該ＳＳＰコマンドフレームを前記ＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、
前記記憶部に記憶された前記特定のパスに対する前記送受信データ量に、前記受信部により受信した前記ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、
前記ＳＡＳイニシエータからの全てのＳＳＰコマンドフレームをアボートするタスクマネジメントファンクションを送るためのＳＳＰタスクフレームに対応する前記ＳＳＰレスポンスフレームを前記受信部により受信した場合に、前記記憶部に記憶された当該全てのＳＳＰコマンドフレームについてそれぞれ決定された少なくとも１つのパスに対する前記送受信データ量から、当該全てのＳＳＰコマンドフレームがそれぞれ送受信を要求したデータの量を減算する減算部と、
前記受信部により受信した前記ＳＳＰコマンドフレームを前記特定のパスを用いて前記ＳＡＳターゲットへ送信し、前記受信部により受信した前記ＳＳＰレスポンスフレームを前記ＳＡＳイニシエータへ送信する送信部と
を含む、システム。
【請求項４】
前記第１のＳＡＳエクスパンダは、自身のＳＡＳアドレスに代えて、自身及び前記第２のＳＡＳエクスパンダが共通に有する一の仮想的なＳＡＳアドレスである仮想エクスパンダアドレスを前記ＳＡＳイニシエータに通知し、前記第１のポート及び前記第２のポートのＳＡＳアドレスに代えて、前記ＳＡＳターゲットの一の仮想的なポートのＳＡＳアドレスである仮想ターゲットポートアドレスを前記ＳＡＳイニシエータに通知し、
前記第２のＳＡＳエクスパンダは、自身のＳＡＳアドレスに代えて、前記仮想エクスパンダアドレスを前記ＳＡＳイニシエータに通知し、前記第１のポート及び前記第２のポートのＳＡＳアドレスに代えて、前記仮想ターゲットポートアドレスを前記ＳＡＳイニシエータに通知し、
前記ＳＡＳイニシエータは、前記第１のＳＡＳエクスパンダ及び前記第２のＳＡＳエクスパンダにより前記仮想エクスパンダアドレスが通知されると、一のＳＡＳエクスパンダが自身の一のワイドポートに接続されていると認識し、前記第１のＳＡＳエクスパンダ及び前記第２のＳＡＳエクスパンダにより前記仮想ターゲットポートアドレスが通知されると、前記ＳＡＳターゲットが一のポートを介して当該一のＳＡＳエクスパンダに接続されていると認識する、請求項３のシステム。
【請求項５】
ＳＡＳ（Serial Attached SCSI）イニシエータとＳＡＳターゲットとを接続するＳＡＳエクスパンダとして機能する装置であって、
前記ＳＡＳターゲットへの複数のパスの各パスに対して、当該各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、
前記ＳＡＳイニシエータからＳＳＰ（Serial SCSI Protocol）コマンドフレームを受信し、前記ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、
前記受信部により前記ＳＳＰコマンドフレームを受信した場合に、前記記憶部に記憶された前記送受信データ量に基づいて、前記複数のパスのうちの特定のパスを、当該ＳＳＰコマンドフレームを前記ＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、
前記記憶部に記憶された前記特定のパスに対する前記送受信データ量に、前記受信部により受信した前記ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、
前記ＳＡＳイニシエータからの全てのＳＳＰコマンドフレームをアボートするタスクマネジメントファンクションを送るためのＳＳＰタスクフレームに対応する前記ＳＳＰレスポンスフレームを前記受信部により受信した場合に、前記記憶部に記憶された当該全てのＳＳＰコマンドフレームについてそれぞれ決定された少なくとも１つのパスに対する前記送受信データ量から、当該全てのＳＳＰコマンドフレームがそれぞれ送受信を要求したデータの量を減算する減算部と、
前記受信部により受信した前記ＳＳＰコマンドフレームを前記特定のパスを用いて前記ＳＡＳターゲットへ送信し、前記受信部により受信した前記ＳＳＰレスポンスフレームを前記ＳＡＳイニシエータへ送信する送信部と
を含む、装置。
【請求項６】
前記受信部により前記ＳＳＰコマンドフレームを受信した旨の情報を保持する保持部を更に含み、
前記保持部は、前記ＳＳＰコマンドフレームを受信した旨の情報を保持してから予め定めた時間が経過しても当該情報を保持している場合に、当該情報を削除し、
前記減算部は、前記ＳＳＰコマンドフレームを受信した旨の情報を保持してから予め定めた時間が経過しても当該情報を保持している場合に、前記記憶部に記憶された前記特定のパスに対する前記送受信データ量から前記要求データ量を減算する、請求項５の装置。
【請求項７】
ＳＡＳ（Serial Attached SCSI）イニシエータとＳＡＳターゲットとを接続するＳＡＳエクスパンダとして機能する装置におけるマルチパスを使用する方法であって、
前記ＳＡＳターゲットへの複数のパスの各パスに対して、当該各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部があり、
前記ＳＡＳイニシエータからＳＳＰ（Serial SCSI Protocol）コマンドフレームを受信するステップと、
前記ＳＳＰコマンドフレームを受信すると、前記記憶部に記憶された前記送受信データ量に基づいて、前記複数のパスのうちの特定のパスを、当該ＳＳＰコマンドフレームを前記ＳＡＳターゲットへ送信するのに用いるパスに決定するステップと、
前記記憶部に記憶された前記特定のパスに対する前記送受信データ量に、前記ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算するステップと、
前記ＳＳＰコマンドフレームを前記特定のパスを用いて前記ＳＡＳターゲットへ送信するステップと、
前記ＳＡＳイニシエータからの全てのＳＳＰコマンドフレームをアボートするタスクマネジメントファンクションを送るためのＳＳＰタスクフレームに対応するＳＳＰレスポンスフレームを前記ＳＡＳターゲットから受信するステップと、
前記ＳＳＰレスポンスフレームを受信すると、前記記憶部に記憶された前記全てのＳＳＰコマンドフレームについてそれぞれ決定された少なくとも１つのパスに対する前記送受信データ量から、当該全てのＳＳＰコマンドフレームがそれぞれ送受信を要求したデータの量を減算するステップと、
前記ＳＳＰレスポンスフレームを前記ＳＡＳイニシエータへ送信するステップと
を含む、方法。
【請求項８】
ＳＡＳ（Serial Attached SCSI）イニシエータとＳＡＳターゲットとを接続するＳＡＳエクスパンダとしてコンピュータを機能させるプログラムであって、
前記コンピュータを、
前記ＳＡＳターゲットへの複数のパスの各パスに対して、当該各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、
前記ＳＡＳイニシエータからＳＳＰ（Serial SCSI Protocol）コマンドフレームを受信し、前記ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、
前記受信部により前記ＳＳＰコマンドフレームを受信した場合に、前記記憶部に記憶された前記送受信データ量に基づいて、前記複数のパスのうちの特定のパスを、当該ＳＳＰコマンドフレームを前記ＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、
前記記憶部に記憶された前記特定のパスに対する前記送受信データ量に、前記受信部により受信した前記ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、
前記ＳＡＳイニシエータからの全てのＳＳＰコマンドフレームをアボートするタスクマネジメントファンクションを送るためのＳＳＰタスクフレームに対応する前記ＳＳＰレスポンスフレームを前記受信部により受信した場合に、前記記憶部に記憶された当該全てのＳＳＰコマンドフレームについてそれぞれ決定された少なくとも１つのパスに対する前記送受信データ量から、当該全てのＳＳＰコマンドフレームがそれぞれ送受信を要求したデータの量を減算する減算部と、
前記受信部により受信した前記ＳＳＰコマンドフレームを前記特定のパスを用いて前記ＳＡＳターゲットへ送信し、前記受信部により受信した前記ＳＳＰレスポンスフレームを前記ＳＡＳイニシエータへ送信する送信部と
して機能させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチパスを使用するシステム及び方法に関する。特に、本発明は、ＳＡＳ（Serial Attached SCSI）ネットワークにおけるマルチパスを使用するシステム及び方法に関する。
【背景技術】
【０００２】
多くのストレージネットワークは、ホストからストレージまでのパスを二重化した冗長構成であるマルチパス構成を有している。例えば、ＳＡＳストレージネットワークにおけるマルチパス構成では、ホストが２つのＳＡＳイニシエータポートを有し、ストレージが２つのＳＡＳターゲットポートを有し、ストレージの２つのＳＡＳターゲットポートからの２つの冗長ＳＡＳリンクをそれぞれホストのＳＡＳイニシエータポートに接続している。そして、１つのＳＡＳイニシエータポートからは２つのＳＡＳターゲットポートのうちの一方のみにアクセスできるようになっている。このマルチパス構成は、一方のパスに障害が発生しても、他方のパスでホストがストレージにアクセスできるようにするものであり、ストレージの信頼性を高めるためには必要な構成である。
ところが、このようなマルチパス構成を構築しただけでは、同じストレージがホストからは別のストレージとして見えてしまう。また、一方のパスの障害時に他方のパスに自動的に切り替えることもできない。
そこで、通常、ホストに、マルチパスを制御するソフトウェア（以下、「マルチパスドライバ」という）をインストールする。マルチパスドライバは、ホストから見えるストレージの数の制御や、パスの障害の検知及びパス障害時のパスの切り替えを行う。即ち、マルチパスドライバは、ホストのアプリケーションからマルチパスを意識させないようにするものである。
【０００３】
尚、従来から、ストレージネットワークにおける冗長構成に関する技術は知られている（例えば、特許文献１、２参照）。
特許文献１では、ホストコンピュータとストレージデバイスとが複数のアクセスパスで接続されているストレージデバイスのマルチパスシステムにおけるホストコンピュータが、すべてのアクセスパスを検出し、検出された各アクセスパスに対して所定の時間間隔で検査Ｉ／Ｏを発行して各アクセスパスの障害発生状況を監視し、各アクセスパスの障害発生状況から、障害が発生していると推定される構成要素をまとめた障害箇所情報を作成する。
【０００４】
特許文献２では、複数の記憶装置を接続するネットワークを有するストレージ装置において、ネットワークからデータを入出力するデータ入出力部と、データ入出力部及び記憶装置間を接続する接続部との間、又は、接続部と接続部との間でデータを入出力するための複数の物理的なリンクのうち、少なくとも１つ以上の物理的なリンクを、少なくとも１
つ以上の論理的なリンクに分割して、１つの物理的なリンクに複数の論理的なリンクを設定し、複数の論理的なリンクに、データを同時に多重化転送すると共に、物理的なリンクにデータを転送する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１５８６６６号公報
【特許文献２】特開２００８−２５０６３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
先に述べた通り、ストレージネットワークでマルチパス構成を構築する場合、通常、ホストにマルチパスドライバをインストールしていた。
しかしながら、現状では、ストレージネットワークのインターフェイスによって、異なるマルチパスドライバをインストールすることが必要である。また、ストレージネットワークのインターフェイスが同一であったとしても、ホストのＯＳが異なる場合、異なるベンダのストレージ製品やスイッチ製品をホストに接続する場合等には、異なるマルチパスドライバをインストールしなければならないことがある。従って、マルチパス構成を導入するのに手間がかかり、しかも、マルチパスドライバの組み合わせによっては予期しない動作が行われることがあるため、システム運用前に入念に組み合わせ検証を行うことが必要となっている。
【０００７】
そして、このような課題を解決するための方法としては、ホストとストレージとの間にＳＡＳエクスパンダ経由で複数のＳＡＳのパスを設け、ＳＡＳエクスパンダによりマルチパス制御を実現する方法が考えられる。この方法では、通常、パスの排他制御が行われるが、パス間でＳＡＳトラフィックの負荷分散を行うことが望ましい。
【０００８】
尚、特許文献１、２の技術は、ストレージネットワークにおける冗長構成に関する技術ではあるが、ホストにマルチパスドライバをインストールする場合の上記課題を解決するものでもなく、ＳＡＳエクスパンダによりマルチパス制御を実現した際にマルチパスを用いて負荷分散を行うものでもない。
【０００９】
本発明の目的は、ＳＡＳネットワークにおけるマルチパスを用いた負荷分散を可能とすることにある。
本発明の他の目的は、ＳＡＳネットワークにおけるマルチパスを用いた負荷分散を、ホストにマルチパスドライバをインストールする必要なく可能とすることにある。
【課題を解決するための手段】
【００１０】
かかる目的のもと、本発明は、ＳＡＳネットワークにおけるマルチパスを使用するシステムであって、ＳＡＳイニシエータと、第１のポート及び第２のポートを有するＳＡＳターゲットと、ＳＡＳイニシエータに接続され、第１のポートと接続することにより第１のパスを形成し、第２のポートと接続することにより第２のパスを形成するＳＡＳエクスパンダとを含み、ＳＡＳエクスパンダは、第１のパス及び第２のパスの各パスに対して、各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、ＳＡＳイニシエータからＳＳＰ（Serial SCSI Protocol）コマンドフレームを受信し、ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、受信部によりＳＳＰコマンドフレームを受信した場合に、記憶部に記憶された送受信データ量に基づいて、第１のパス及び第２のパスのうちの特定のパスを、ＳＳＰコマンドフレームをＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、記憶部に記憶された特定のパスに対する送受信データ量に、受信部により受信したＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、受信部によりＳＳＰコマンドフレームに対応するＳＳＰレスポンスフレームを受信した場合に、記憶部に記憶された特定のパスに対する送受信データ量から要求データ量を減算する減算部と、受信部により受信したＳＳＰコマンドフレームを特定のパスを用いてＳＡＳターゲットへ送信し、受信部により受信したＳＳＰレスポンスフレームをＳＡＳイニシエータへ送信する送信部とを含む、システムを提供する。
【００１１】
ここで、ＳＡＳエクスパンダは、受信部によりＳＳＰコマンドフレームを受信した旨の情報を保持する保持部を更に含み、保持部は、ＳＳＰコマンドフレームを受信した旨の情報を保持してから予め定めた時間が経過しても情報を保持している場合に、情報を削除し、減算部は、ＳＳＰコマンドフレームを受信した旨の情報を保持してから予め定めた時間が経過しても情報を保持している場合に、記憶部に記憶された特定のパスに対する送受信データ量から要求データ量を減算する、ものであってよい。
或いは、減算部は、受信部によりＳＳＰタスクフレームに対応するＳＳＰレスポンスフレームを受信した場合に、記憶部に記憶された特定のパスに対する送受信データ量から、ＳＳＰタスクフレームの対象である少なくとも１つのＳＳＰコマンドフレームが送受信を要求したデータの量を減算する、ものであってよい。
【００１２】
また、本発明は、ＳＡＳネットワークにおけるマルチパスを使用するシステムであって、ＳＡＳイニシエータと、第１のポート及び第２のポートを有するＳＡＳターゲットと、ＳＡＳイニシエータに接続され、第１のポートと接続することにより、自身からＳＡＳターゲットへの第１のパスを形成する第１のＳＡＳエクスパンダと、ＳＡＳイニシエータに接続され、第２のポートと接続することにより、自身からＳＡＳターゲットへの第１のパスを形成する第２のＳＡＳエクスパンダとを含み、第１のＳＡＳエクスパンダは、第２のＳＡＳエクスパンダを介して第２のポートと接続することにより、自身からＳＡＳターゲットへの第２のパスを形成し、第２のＳＡＳエクスパンダは、第１のＳＡＳエクスパンダを介して第１のポートと接続することにより、自身からＳＡＳターゲットへの第２のパスを形成し、第１のＳＡＳエクスパンダ及び第２のＳＡＳエクスパンダのそれぞれは、自身からＳＡＳターゲットへの第１のパス及び第２のパスの各パスに対して、各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、ＳＡＳイニシエータからＳＳＰコマンドフレームを受信し、ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、受信部によりＳＳＰコマンドフレームを受信した場合に、記憶部に記憶された送受信データ量に基づいて、自身からＳＡＳターゲットへの第１のパス及び第２のパスのうちの特定のパスを、ＳＳＰコマンドフレームをＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、記憶部に記憶された特定のパスに対する送受信データ量に、受信部により受信したＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、受信部によりＳＳＰコマンドフレームに対応するＳＳＰレスポンスフレームを受信した場合に、記憶部に記憶された特定のパスに対する送受信データ量から要求データ量を減算する減算部と、受信部により受信したＳＳＰコマンドフレームを特定のパスを用いてＳＡＳターゲットへ送信し、受信部により受信したＳＳＰレスポンスフレームをＳＡＳイニシエータへ送信する送信部とを含む、システムも提供する。
【００１３】
ここで、本発明は、第１のＳＡＳエクスパンダは、自身のＳＡＳアドレスに代えて、自身及び第２のＳＡＳエクスパンダが共通に有する一の仮想的なＳＡＳアドレスである仮想エクスパンダアドレスをＳＡＳイニシエータに通知し、第１のポート及び第２のポートのＳＡＳアドレスに代えて、ＳＡＳターゲットの一の仮想的なポートのＳＡＳアドレスである仮想ターゲットポートアドレスをＳＡＳイニシエータに通知し、第２のＳＡＳエクスパンダは、自身のＳＡＳアドレスに代えて、仮想エクスパンダアドレスをＳＡＳイニシエータに通知し、第１のポート及び第２のポートのＳＡＳアドレスに代えて、仮想ターゲットポートアドレスをＳＡＳイニシエータに通知し、ＳＡＳイニシエータは、第１のＳＡＳエクスパンダ及び第２のＳＡＳエクスパンダにより仮想エクスパンダアドレスが通知されると、一のＳＡＳエクスパンダが自身の一のワイドポートに接続されていると認識し、第１のＳＡＳエクスパンダ及び第２のＳＡＳエクスパンダにより仮想ターゲットポートアドレスが通知されると、ＳＡＳターゲットが一のポートを介して一のＳＡＳエクスパンダに接続されていると認識する、ものであってよい。
【００１４】
また、本発明は、ＳＡＳイニシエータとＳＡＳターゲットとを接続するＳＡＳエクスパンダとして機能する装置であって、ＳＡＳターゲットへの複数のパスの各パスに対して、各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、ＳＡＳイニシエータからＳＳＰコマンドフレームを受信し、ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、受信部によりＳＳＰコマンドフレームを受信した場合に、記憶部に記憶された送受信データ量に基づいて、複数のパスのうちの特定のパスを、ＳＳＰコマンドフレームをＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、記憶部に記憶された特定のパスに対する送受信データ量に、受信部により受信したＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、受信部によりＳＳＰコマンドフレームに対応するＳＳＰレスポンスフレームを受信した場合に、記憶部に記憶された特定のパスに対する送受信データ量から要求データ量を減算する減算部と、受信部により受信したＳＳＰコマンドフレームを特定のパスを用いてＳＡＳターゲットへ送信し、受信部により受信したＳＳＰレスポンスフレームをＳＡＳイニシエータへ送信する送信部とを含む、装置も提供する。
【００１５】
更に、本発明は、ＳＡＳイニシエータとＳＡＳターゲットとを接続するＳＡＳエクスパンダとして機能する装置におけるマルチパスを使用する方法であって、ＳＡＳターゲットへの複数のパスの各パスに対して、各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部があり、ＳＡＳイニシエータからＳＳＰコマンドフレームを受信するステップと、ＳＳＰコマンドフレームを受信すると、記憶部に記憶された送受信データ量に基づいて、複数のパスのうちの特定のパスを、ＳＳＰコマンドフレームをＳＡＳターゲットへ送信するのに用いるパスに決定するステップと、記憶部に記憶された特定のパスに対する送受信データ量に、ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算するステップと、ＳＳＰコマンドフレームを特定のパスを用いてＳＡＳターゲットへ送信するステップと、ＳＡＳターゲットからＳＳＰコマンドフレームに対応するＳＳＰレスポンスフレームを受信するステップと、ＳＳＰレスポンスフレームを受信すると、記憶部に記憶された特定のパスに対する送受信データ量から要求データ量を減算するステップと、ＳＳＰレスポンスフレームをＳＡＳイニシエータへ送信するステップとを含む、方法も提供する。
【００１６】
更にまた、本発明は、ＳＡＳイニシエータとＳＡＳターゲットとを接続するＳＡＳエクスパンダとしてコンピュータを機能させるプログラムであって、コンピュータを、ＳＡＳターゲットへの複数のパスの各パスに対して、各パスを用いて送受信されているデータの量である送受信データ量を記憶する記憶部と、ＳＡＳイニシエータからＳＳＰコマンドフレームを受信し、ＳＡＳターゲットからＳＳＰレスポンスフレームを受信する受信部と、受信部によりＳＳＰコマンドフレームを受信した場合に、記憶部に記憶された送受信データ量に基づいて、複数のパスのうちの特定のパスを、ＳＳＰコマンドフレームをＳＡＳターゲットへ送信するのに用いるパスに決定する決定部と、記憶部に記憶された特定のパスに対する送受信データ量に、受信部により受信したＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量を加算する加算部と、受信部によりＳＳＰコマンドフレームに対応するＳＳＰレスポンスフレームを受信した場合に、記憶部に記憶された特定のパスに対する送受信データ量から要求データ量を減算する減算部と、受信部により受信したＳＳＰコマンドフレームを特定のパスを用いてＳＡＳターゲットへ送信し、受信部により受信したＳＳＰレスポンスフレームをＳＡＳイニシエータへ送信する送信部として機能させる、プログラムも提供する。
【発明の効果】
【００１７】
本発明によれば、ＳＡＳネットワークにおけるマルチパスを用いた負荷分散が可能となる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施の形態におけるＳＡＳストレージネットワークの構成例を示したブロック図である。
【図２】本発明の実施の形態におけるＳＡＳエクスパンダの機能構成例を示したブロック図である。
【図３】本発明の実施の形態で用いられるターゲットポート構成テーブルの一例を示した図である。
【図４】本発明の実施の形態におけるＳＡＳエクスパンダの仮想トポロジ報告時の動作例を示したフローチャートである。
【図５−１】本発明の実施の形態におけるＳＡＳエクスパンダの仮想トポロジ生成時の動作例を示したフローチャートである。
【図５−２】本発明の実施の形態におけるＳＡＳエクスパンダの仮想トポロジ報告時の動作例を示したフローチャートである。
【図６】本発明の実施の形態のＳＡＳエクスパンダによる仮想トポロジ報告後のＳＡＳホストからの各装置の見え方を示した図である。
【図７】本発明の実施の形態におけるＳＡＳエクスパンダのパス決定部の機能構成例を示したブロック図である。
【図８】本発明の実施の形態で用いられる要求データ長テーブルの一例を示した図である。
【図９】本発明の実施の形態で用いられるデータ転送量カウンタの一例を示した図である。
【図１０】本発明の実施の形態のパス決定部の第１の動作例におけるＳＳＰコマンドフレーム受信時の動作例を示したフローチャートである。
【図１１】本発明の実施の形態のパス決定部の第１の動作例におけるＳＳＰレスポンスフレーム受信時の動作例を示したフローチャートである。
【図１２】本発明の実施の形態のパス決定部の第２の動作例におけるＳＳＰタスクフレーム受信時の動作例を示したフローチャートである。
【図１３】本発明の実施の形態のパス決定部の第２の動作例におけるＳＳＰレスポンスフレーム受信時の動作例を示したフローチャートである。
【発明を実施するための形態】
【００１９】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
まず、本発明の実施の形態の概要を説明する。
ＳＡＳストレージネットワークは、ＳＡＳエクスパンダを用いて、複数のＳＡＳデバイス（ＳＡＳイニシエータ及びＳＡＳターゲット）を接続することにより構成される。
このようなＳＡＳストレージネットワークにおいて、本実施の形態では、ＳＡＳの標準を逸脱することなく、ＳＡＳの特徴を利用し、マルチパス構成のために用いるＳＡＳエクスパンダにマルチパス制御機能を搭載する。具体的には、ＳＡＳの特徴のうち、マルチレーン接続と、ＳＭＰ（SAS Management Protocol）によるＳＡＳトポロジのディスカバリプロセスとに注目し、ＳＡＳエクスパンダに対して、各ホストにそのホスト固有の仮想的なＳＡＳトポロジを報告する機能と、ＳＡＳアドレス変換機能とを追加する。
こうすることで、特別なＨＢＡ（Host Bus Adapter）やストレージ装置を必要とせず、また、マルチパスドライバ等の特別なソフトウェアをホストにインストールすることなく、ホストに対して、あたかも信頼性の高い１つのＳＡＳストレージがマルチレーンポートで接続されているように見せることを可能とする。
【００２０】
図１は、本実施の形態におけるＳＡＳストレージネットワーク１の構成例を示したブロック図である。
図示するように、本実施の形態におけるＳＡＳストレージネットワーク１は、ＳＡＳホスト１０と、ＳＡＳスイッチ２０ａ，２０ｂと、ＳＡＳストレージサブシステム３０とを備えている。
【００２１】
ＳＡＳホスト１０は、ＳＡＳスイッチ２０ａ，２０ｂを介してＳＡＳストレージサブシステム３０にアクセスするコンピュータであり、単に「ホスト」ということもある。例えば、ＳＡＳストレージネットワーク１がブレードサーバシステムであるとすると、ＳＡＳホスト１０は、マイクロプロセッサ、メモリ、ネットワークコントローラ等のコンポーネントを１枚に収めたブレードサーバである。
また、ＳＡＳホスト１０は、ＳＡＳイニシエータ１１として機能する部分を含む。ここで、ＳＡＳイニシエータ１１として機能する部分とは、例えばＨＢＡである。
更に、本実施の形態では、後述するように、ＳＡＳイニシエータ１１が、１つのＳＡＳイニシエータポート（以下、単に「イニシエータポート」という）として、ＳＡＳイニシエータ１１内に黒の塗り潰しで示したワイドポートを有するように構成される。そして、ＳＡＳスイッチ２０ａ，２０ｂからの冗長なリンク４１ａ，４１ｂがマルチレーンとしてまとめられ、このワイドポートに接続される。従って、ワイドポートには１つのＳＡＳアドレスが割り当てられる。以下では、このＳＡＳアドレスをＨとする。尚、ＳＡＳはマルチレーンによるワイドポート機能を標準でサポートしているので、特別なソフトウェアを必要とせずにこのような構成とすることができる。
【００２２】
ＳＡＳスイッチ２０ａ，２０ｂは、それぞれ、ＳＡＳホスト１０とＳＡＳストレージサブシステム３０とを接続することにより、複数のパスを形成するスイッチモジュールである。
また、ＳＡＳスイッチ２０ａ，２０ｂは、それぞれ、ＳＡＳエクスパンダ２１ａ，２１ｂとして機能する部分を含む。本実施の形態では、第１のＳＡＳエクスパンダの一例として、ＳＡＳエクスパンダ２１ａを設けており、第２のＳＡＳエクスパンダの一例として、ＳＡＳエクスパンダ２１ｂを設けている。
更に、ＳＡＳストレージサブシステム３０からのリンク４２ａはＳＡＳエクスパンダ２１ａに接続され、ＳＡＳストレージサブシステム３０からのリンク４２ｂはＳＡＳエクスパンダ２１ｂに接続される。そして、ＳＡＳエクスパンダ２１ａとＳＡＳエクスパンダ２１ｂも互いに接続され、ブリッジ４３を構成している。
尚、図では、ＳＡＳエクスパンダ２１ａ，２１ｂを示したが、これらを区別する必要がない場合は、単にＳＡＳエクスパンダ２１とも称する。また、ここでは２つのＳＡＳエクスパンダ２１を示したが、ＳＡＳエクスパンダ２１の数は２つには限らない。
【００２３】
ＳＡＳストレージサブシステム３０は、ＳＡＳホスト１０から受信したデータを記憶したり、記憶していたデータをＳＡＳホスト１０に送信したりするサブシステムである。
また、ＳＡＳストレージサブシステム３０は、ＳＡＳエクスパンダ３１ａ，３１ｂとして機能する部分と、ＳＡＳターゲット３２ａ，３２ｂ，３２ｃとして機能する部分とを含む。ここで、ＳＡＳエクスパンダ３１ａ，３１ｂとして機能する部分とは、例えばＳＡＳストレージを制御するＳＡＳストレージコントローラである。また、ＳＡＳターゲット３２ａ，３２ｂ，３２ｃとして機能する部分とは、例えばデュアルポートのＳＡＳストレージであり、それぞれが２つのＳＡＳターゲットポート（以下、単に「ターゲットポート」という）を有している。そして、この２つのターゲットポートのそれぞれがＳＡＳアドレスを有している。以下、ＳＡＳターゲット３２ａ，３２ｂ，３２ｃの２つのターゲットポートのＳＡＳアドレスのうち、ＳＡＳエクスパンダ３１ａ側のターゲットポートのＳＡＳアドレスをＤ１Ａ，Ｄ２Ａ，Ｄ３Ａとし、ＳＡＳエクスパンダ３１ｂ側のターゲットポートのＳＡＳアドレスをＤ１Ｂ，Ｄ２Ｂ，Ｄ３Ｂとする。本実施の形態では、第１のポートの一例として、ＳＡＳエクスパンダ３１ａ側のターゲットポートを用いており、第２のポートの一例として、ＳＡＳエクスパンダ３１ｂ側のターゲットポートを用いている。
尚、図では、ＳＡＳターゲット３２ａ，３２ｂ，３２ｃを示したが、これらを区別する必要がない場合は、単にＳＡＳターゲット３２とも称する。また、ここでは３つのＳＡＳターゲット３２を示したが、ＳＡＳターゲット３２の数は３つには限らない。
【００２４】
このような構成において、ＳＡＳホスト１０からＳＡＳターゲット３２への物理的なパスには、以下の４通りがある（ｘ＝１，２，３）。
（Ａ）イニシエータポートＨ→リンク４１ａ→リンク４２ａ→ターゲットポートＤｘＡ
（Ｂ）イニシエータポートＨ→リンク４１ａ→ブリッジ４３→リンク４２ｂ→ターゲットポートＤｘＢ
（Ｃ）イニシエータポートＨ→リンク４１ｂ→リンク４２ｂ→ターゲットポートＤｘＢ
（Ｄ）イニシエータポートＨ→リンク４１ｂ→ブリッジ４３→リンク４２ａ→ターゲットポートＤｘＡ
【００２５】
ところで、本実施の形態では、前述の通り、ＳＡＳホスト１０にマルチパスドライバ等の特別なソフトウェアをインストールしない。
しかしながら、図１に示した構成のまま、ＳＡＳホスト１０にマルチパスドライバ等をインストールしなかったとすると、ＳＡＳホスト１０は、ＳＡＳターゲット３２の２つのターゲットポートに別々のパスでアクセスすることができるので、１つのＳＡＳターゲット３２が複数のＳＡＳターゲット３２として見えてしまう。
そこで、ＳＡＳホスト１０から見えるＳＡＳターゲット３２の数の制御及びＳＡＳターゲット３２へのアクセスパスの制御のために、ＳＡＳホスト１０に直接接続されているＳＡＳエクスパンダ２１ａ，２１ｂに対して、以下の機能を搭載する。
（１）ターゲットポート構成テーブル
（２）各ホストにそのホスト固有の仮想的なＳＡＳトポロジを報告する機能
（３）ターゲットポートのＳＡＳアドレスの変換によるパス制御機能
【００２６】
次に、これらの機能が搭載されたＳＡＳエクスパンダ２１の機能構成について説明する。尚、ＳＡＳエクスパンダ２１ａとＳＡＳエクスパンダ２１ｂの機能構成は同様であるので、ここでは、ＳＡＳエクスパンダ２１の機能構成として説明する。
図２は、ＳＡＳエクスパンダ２１の機能構成例を示したブロック図である。
図示するように、ＳＡＳエクスパンダ２１は、受信部２２と、テーブル記憶部２３と、装置情報管理部２４と、トポロジ管理部２５と、パス決定部２６と、送信部２９とを備えている。
【００２７】
受信部２２は、ＳＡＳイニシエータ１１が初期化時に送信したIDENTIFY ADDRESSフレームを受信する。また、ＳＡＳイニシエータ１１がＳＡＳディスカバリプロセスの実行時に送信したＳＡＳトポロジの要求や、自装置がＳＡＳディスカバリプロセス実行時に送信したＳＡＳトポロジの要求に対する応答を受信する。更に、ＳＡＳイニシエータ１１が送信したＳＡＳフレームを受信する。
【００２８】
テーブル記憶部２３は、ＳＡＳターゲット３２の実際のターゲットポートのＳＡＳアドレス（以下、「実ターゲットポートアドレス」という）をＳＡＳターゲット３２の仮想的なターゲットポートのＳＡＳアドレス（以下、「仮想ターゲットポートアドレス」という）に変換する際、又は、ＳＡＳターゲット３２の仮想ターゲットポートアドレスをＳＡＳターゲット３２の実ターゲットポートアドレスに変換する際に参照されるターゲットポート構成テーブルを記憶する。このターゲットポート構成テーブルについては後で詳しく述べる。
【００２９】
装置情報管理部２４は、自装置の装置種別がＳＡＳエクスパンダであることと、自装置の仮想的なＳＡＳアドレス（以下、「仮想エクスパンダアドレス」という）とを含む装置情報を管理する。
【００３０】
トポロジ管理部２５は、ＳＡＳトポロジを知るためのプロセス（ＳＡＳディスカバリプロセス）を自装置が実行するための情報を管理すると共に、ＳＡＳディスカバリプロセスを自装置が実行することによって取得したＳＡＳトポロジに基づいて仮想的なＳＡＳトポロジ（以下、「仮想トポロジ」という）を生成する。特に、この仮想トポロジには、ＳＡＳターゲット３２の仮想ターゲットポートアドレスが含まれる。
【００３１】
パス決定部２６は、受信部２２からＳＡＳフレームを受け取り、そのＳＳＰトランスポートレイヤのフレームのデータを解析し、複数のパスのうちのＳＡＳフレームをルーティングすべきパスを、ＳＡＳのトラフィックができるだけ均等になるように決定する。そして、ＳＡＳフレームと決定したパスの情報とを送信部２９に受け渡す。
【００３２】
送信部２９は、ＳＡＳイニシエータ１１からIDENTIFY ADDRESSフレームを受信した場合には、自装置の装置種別がＳＡＳエクスパンダであることと、自装置の仮想エクスパンダアドレスとをＳＡＳイニシエータ１１に送信する。また、リンクリセット検知時及び変更ブロードキャスト受信時には、他の装置にＳＡＳトポロジの要求を送信する。そして、ＳＡＳイニシエータ１１からのＳＡＳトポロジの要求に対して、仮想トポロジを送信する。更に、ＳＡＳフレームをＳＡＳターゲット３２に送信する。
【００３３】
以下、ＳＡＳエクスパンダ２１に搭載する機能（１）〜（３）について説明する。
（１）ターゲットポート構成テーブル
図３は、ＳＡＳエクスパンダ２１のテーブル記憶部２３に記憶させるターゲットポート構成テーブルの一例を示した図である。
図示するように、ターゲットポート構成テーブルは、ＳＡＳホスト１０に提供するストレージの数だけエントリを持つ。図１ではＳＡＳターゲット３２ａ，３２ｂ，３２ｃを示したので、図３では、これらのＳＡＳターゲット３２にそれぞれ対応するエントリ＃１，＃２，＃３を設けている。
【００３４】
また、各エントリに対して、以下の項目ごとに値を設定している。
第一に、そのＳＡＳターゲット３２のＳＡＳエクスパンダ３１ａ側の実ターゲットポートアドレス（図では「実ターゲットポートアドレスＡ」と表記）である。ここでは、図１での説明に従い、エントリ＃１，＃２，＃３に対して、それぞれ、ＳＡＳアドレスＤ１Ａ，Ｄ２Ａ，Ｄ３Ａを記憶している。
第二に、そのＳＡＳターゲット３２のＳＡＳエクスパンダ３１ｂ側の実ターゲットポートアドレス（図では「実ターゲットポートアドレスＢ」と表記）である。ここでは、図１での説明に従い、エントリ＃１，＃２，＃３に対して、それぞれ、ＳＡＳアドレスＤ１Ｂ，Ｄ２Ｂ，Ｄ３Ｂを記憶している。
第三に、そのＳＡＳターゲット３２の仮想ターゲットポートアドレスである。ここでは、Ｄ１Ａ及びＤ１Ｂに対する仮想ターゲットポートアドレスをＤ１、Ｄ２Ａ及びＤ２Ｂに対する仮想ターゲットポートアドレスをＤ２、Ｄ３Ａ及びＤ３Ｂに対する仮想ターゲットポートアドレスをＤ３としている。
【００３５】
尚、このターゲットポート構成テーブルは、ＳＡＳホスト１０やその他のＳＡＳ管理用サーバからＳＭＰにてＳＡＳエクスパンダ２１に送信するとよい。或いは、ウェブ等の管理ユーザインターフェイスから通信回線を介して設定してもよい。
また、ターゲットポート構成テーブルに設定する仮想ターゲットポートアドレスとしては、図３のように新たなＳＡＳアドレスを生成してもよいし、ＳＡＳターゲット３２が既に仮想のＳＡＳアドレス（例えば、ＳＡＳデバイス名等）を持っていればそれを使用してもよい。
【００３６】
ここで、ターゲットポート構成テーブルは、ＳＡＳエクスパンダ２１ａ，２１ｂの両方に持たせる必要がある。そして、ＳＡＳエクスパンダ２１ａが持つターゲットポート構成テーブルとＳＡＳエクスパンダ２１ｂが持つターゲットポート構成テーブルとの間で同期をとることも必要である。
【００３７】
（２）各ホストにそのホスト固有の仮想的なＳＡＳトポロジを報告する機能
ＳＡＳイニシエータ１１は、ＳＡＳのポートの初期化時に、自身のイニシエータポートの接続先を特定する。具体的には、IDENTIFY ADDRESSフレームにより、自身のＰＨＹに接続されている装置の装置種別とＳＡＳアドレスとを特定する。本実施の形態において、ＳＡＳイニシエータ１１は、IDENTIFY ADDRESSフレームを、ＳＡＳエクスパンダ２１ａ，２１ｂの両方に送信する。
これに対し、ＳＡＳエクスパンダ２１は、自身の実ＳＡＳアドレスに代えて、１つの仮想エクスパンダアドレスをＳＡＳイニシエータ１１に通知する。
【００３８】
図４は、このときのＳＡＳエクスパンダ２１の動作例を示したフローチャートである。
ＳＡＳエクスパンダ２１（ＳＡＳエクスパンダ２１ａ，２１ｂ）では、まず、受信部２２が、ＳＡＳイニシエータ１１からIDENTIFY ADDRESSフレームを受信する（ステップ２０１）。
すると、装置情報管理部２４が、自身の装置種別として、ＳＡＳエクスパンダである旨の情報を取得すると共に、自身のＳＡＳアドレスとして、ＳＡＳエクスパンダ２１ａ，２１ｂに共通に与えられた仮想エクスパンダアドレスを取得する（ステップ２０２）。ここで、仮想エクスパンダアドレスは、ＳＡＳエクスパンダ２１内の図示しないメモリに予め記憶しておけばよい。
そして、送信部２９は、装置情報管理部２４が取得した装置種別及びＳＡＳアドレスをＳＡＳイニシエータ１１に送信する（ステップ２０３）。
その結果、ＳＡＳホスト１０のＨＢＡは、自身の２つのＰＨＹが同じＳＡＳエクスパンダに接続されていると判断し、１つの２レーンポートを構成させる。ＨＢＡは、複数のＰＨＹが同一のＳＡＳエクスパンダに接続した場合、ＳＡＳの標準の機能により、ワイドポートを形成し、複数のＰＨＹを１つのポートとして機能させるからである。
【００３９】
その後、ＳＡＳイニシエータ１１は、ＳＡＳトポロジを知るためのプロセス（ＳＡＳディスカバリプロセス）を実行する。ＳＡＳディスカバリプロセスを実行した装置は、ＳＡＳドメインに存在する全ての装置について、装置種別、ＳＡＳアドレス、サポートするプロトコル、どのＳＡＳエクスパンダに接続されているかを知ることができる。ＳＡＳイニシエータ１１はこれを実行し、接続可能なＳＡＳアドレスの特定や、コネクションレートの特定に利用する。
また、通常、ＳＡＳエクスパンダ２１は、ＳＡＳフレームのルーティングのためにルーティングテーブルを構築する必要があるが、自身のルーティングテーブルを構築する方法には、以下の２つの方法がある。
・ＳＡＳエクスパンダ２１がＳＡＳディスカバリプロセスを実行して情報を取得することによりルーティングテーブルを構築するセルフコンフィグレーション
・外部装置（例えばＳＡＳイニシエータ１１）がＳＭＰによってＳＡＳエクスパンダ２１にルーティングテーブルを設定する外部コンフィグレーション
本実施の形態では、このうち、セルフコンフィグレーションのみをサポートする。つまり、ＳＡＳエクスパンダ２１も、自身のルーティングテーブルを構築するためにＳＡＳディスカバリプロセスを実行する。
【００４０】
さて、上述したように、ＳＡＳイニシエータ１１は、ＳＡＳディスカバリプロセスを実行することにより、ＳＡＳエクスパンダ２１にＳＡＳトポロジを要求する。
これに対し、ＳＡＳエクスパンダ２１は、ＳＡＳターゲット３２のターゲットポートの実ＳＡＳアドレスを含む実際のＳＡＳトポロジに代えて、１つの仮想ターゲットポートアドレスを含む仮想的なＳＡＳトポロジ（仮想トポロジ）をＳＡＳイニシエータ１１に通知する。
【００４１】
図５−１及び図５−２は、このときのＳＡＳエクスパンダ２１の動作例を示したフローチャートである。このうち、図５−１は、ＳＡＳエクスパンダ２１がＳＡＳディスカバリプロセスを実行する場合の動作例を示したものであり、図５−２は、ＳＡＳイニシエータ１１がＳＡＳディスカバリプロセスを実行する場合の動作例を示したものである。
まず、ＳＡＳエクスパンダ２１がＳＡＳディスカバリプロセスを実行する場合について説明する。
ＳＡＳエクスパンダ２１では、図５−１に示すように、まず、受信部２２が、リンクリセットの検知又は変更ブロードキャストの受信を行う（ステップ２２１）。
すると、トポロジ管理部２５が、ＳＡＳトポロジを知るためのＳＡＳディスカバリプロセスの実行を開始する（ステップ２２２）。
そして、送信部２９が、他の装置にＳＡＳトポロジを要求する（ステップ２２３）。具体的には、まず、ＰＨＹの接続先の装置に対してＳＡＳトポロジを要求する。そして、その接続先が更にＳＡＳエクスパンダであれば、そのＳＡＳエクスパンダについても同様の処理を行う。
【００４２】
これにより、受信部２２が、ＳＡＳドメインに存在する全ての装置について、装置種別、ＳＡＳアドレス、サポートするプロトコル、どのＳＡＳエクスパンダに接続されているかを示すＳＡＳトポロジを受信する（ステップ２２４）。
すると、トポロジ管理部２５が、受信部２２が受信したＳＡＳトポロジに基づいて仮想トポロジを生成する（ステップ２２５）。ここで、仮想トポロジは、ＨＢＡがアクセス可能な装置のみがあたかもＳＡＳエクスパンダに直接接続されているかのように見せるためのものである。従って、この仮想トポロジを生成する処理は、ターゲットポート構成テーブルを参照して実ターゲットポートアドレスを仮想ターゲットポートアドレスに変換する処理や、仮想エクスパンダアドレスを有するＳＡＳエクスパンダにこの仮想のターゲットポートが接続された状態を表すように変換する処理等を含んでいる。或いは、受信部２２が受信したＳＡＳトポロジがターゲットポート構成テーブルの定義と矛盾していれば、エラー情報を生成してもよい。尚、仮想トポロジやエラー情報は、ＳＡＳエクスパンダ２１内の図示しないメモリに記憶すればよい。
【００４３】
次に、ＳＡＳイニシエータ１１がＳＡＳディスカバリプロセスを実行する場合について説明する。
ＳＡＳイニシエータ１１は、リンクリセットの検知又は変更ブロードキャストの受信に応じて、ＳＡＳディスカバリプロセスを実行する。即ち、ＳＡＳエクスパンダ２１にＳＡＳトポロジを要求する。
これにより、ＳＡＳエクスパンダ２１では、図５−２に示すように、まず、受信部２２が、ＳＡＳイニシエータ１１からＳＡＳトポロジの要求を受信する（ステップ２４１）。
すると、トポロジ管理部２５が、図示しないメモリに記憶された仮想トポロジを取り出す（ステップ２４２）。
そして、送信部２９が、この取り出された仮想トポロジをＳＡＳイニシエータ１１に送信する（ステップ２４３）。尚、このとき、図示しないメモリにエラー情報が記憶されていれば、エラーメッセージをＳＡＳイニシエータ１１に送信してもよい。
【００４４】
図６は、図４、図５−１、図５−２の処理を行った結果、ＳＡＳホスト１０からの各装置の見え方がどのようになるかを示したものである。
まず、ＳＡＳホスト１０は、ＳＡＳイニシエータ１１として機能する部分も含めて、図１に示した実際の構成と同じである。
一方、図１のＳＡＳスイッチ２０ａ，２０ｂは、ＳＡＳホスト１０からは、１つのＳＡＳスイッチとして認識される。これを、図では仮想ＳＡＳスイッチ５０として示している。そして、ＳＡＳホスト１０からは、自身のＨＢＡの２つのＰＨＹが１つのＳＡＳエクスパンダに接続されているように見える。これを、図では仮想ＳＡＳエクスパンダ５１として示している。
また、ＳＡＳホスト１０からは、アクセスするＳＡＳターゲットが直接ＳＡＳエクスパンダに接続されているように見える。これを、図では、仮想ＳＡＳターゲット６２ａ，６２ｂ，６２ｃとして示している。そして、これらの仮想ＳＡＳターゲット６２を含むＳＡＳストレージサブシステムも、図では、仮想ＳＡＳストレージサブシステム６０として示している。
これにより、複数のコネクションを同時に張ることができ、高いパフォーマンスを実現できるようになる。
また、同一の装置が複数の装置として認識されることがなくなる。
【００４５】
（３）ターゲットポートのＳＡＳアドレスの変換によるパス制御機能
（１）で述べたように、ＳＡＳエクスパンダ２１は、内部にターゲットポート構成テーブルを持つ。そして、仮想ターゲットポートアドレスを実ターゲットポートアドレスに変換し、ルーティングを行う。
【００４６】
ここで、例えば、ＳＡＳイニシエータ１１がリンク４１ａ側のＰＨＹからＳＡＳターゲット３２ａにアクセスする場合を考える。この場合、ＳＡＳエクスパンダ２１ａからＳＡＳターゲット３２ａへ、物理的には２つのパスがある。１つはリンク４２ａを経由したパス（第１のパスの一例）であり、もう１つはブリッジ４３及びリンク４２ｂを経由したパス（第２のパスの一例）である。ところが、常にそのどちらかを使用し、障害時にパスを切り替えるようにしたとすると、ＳＡＳエクスパンダ２１からＳＡＳターゲット３２へは必ず１つのパスが使用されることになり、その１つのパスがボトルネックになる可能性がある。
【００４７】
そこで、本実施の形態では、ＳＡＳエクスパンダ２１によるマルチパス構成にて、障害時用の代替パスも活用し、ＳＡＳエクスパンダ２１から複数のパスにルーティングを行うことで、ＳＡＳトラフィックの負荷分散を実現する。具体的には、ＳＡＳエクスパンダ２１が、通常は見ないＳＳＰトランスポートレイヤのデータを利用して、ＳＡＳトラフィックを複数のパスの間で均等に分散させる。
【００４８】
そのために、本実施の形態では、ＳＡＳエクスパンダ２１ａ，２１ｂに以下の機能を搭載する。
（３−１）ＳＳＰトランスポートレイヤのフレーム（以下、「ＳＳＰフレーム」という）を解析する機能
（３−２）ＳＡＳトラフィックができるだけ均等になるように複数のパスにＳＳＰフレームをルーティングする機能
【００４９】
これにより、ＳＡＳホスト１０とＳＡＳストレージサブシステム３０の間のＳＡＳの使用帯域が増えるので、ＳＡＳホスト１０からＳＡＳストレージサブシステム３０へのＩ／Ｏパフォーマンスが向上する。また、その際、特別なＨＢＡやストレージ装置を必要としない。更に、その際、ＳＡＳホスト１０に、マルチポートの排他制御及び負荷分散を行うマルチパスドライバを必要としない。
【００５０】
ここで、ＳＳＰについて説明する。
ＳＳＰとは、ＳＡＳでＳＣＳＩプロトコルを流すために定義されたプロトコルである。
ＳＳＰフレームには、ＳＳＰコマンドフレーム、ＳＳＰトランスファレディフレーム、ＳＳＰデータフレーム、ＳＳＰタスクフレーム、ＳＳＰレスポンスフレームがある。
【００５１】
ＳＳＰコマンドフレームは、ＳＡＳイニシエータからＳＡＳターゲットへＳＣＳＩコマンドを送るために用いられるフレームである。特に、ＳＳＰコマンドフレームは、その後に送るＳＳＰデータフレームによって書込み又は読出しが要求されるデータのデータ長（以下、「要求データ長」という）を含む。
ＳＳＰトランスファレディフレームは、ＳＳＰコマンドフレームに含まれる要求データ長に基づいて、ＳＳＰデータフレームによって書込みが要求されるデータをＳＡＳターゲットが受け入れ可能であると判断した場合に、ＳＡＳターゲットからＳＡＳイニシエータへ書込みデータを要求するために送られるフレームである。
ＳＳＰデータフレームは、ＳＡＳイニシエータからＳＡＳターゲットへ書込みデータを転送したり、ＳＡＳターゲットからＳＡＳイニシエータへ読出しデータを転送したりするためのフレームである。
【００５２】
ＳＳＰタスクフレームは、ＳＡＳイニシエータからＳＡＳターゲットへタスクマネジメントファンクションを送るために用いられるフレームである。ここで、タスクマネジメントファンクションとは、ＳＡＳターゲットへ送られたＳＳＰコマンドフレームによるコマンドをアボートしたりリセットしたりするものである。
ＳＳＰレスポンスフレームは、ＳＳＰコマンドフレームによるコマンドの処理又はＳＳＰタスクフレームによるタスクの処理が終わった後に、処理の結果をＳＡＳターゲットからＳＡＳイニシエータへ返すためのフレームであり、処理の結果としては、「ＧＯＯＤ」、「ＣＨＥＣＫ  ＣＯＮＤＩＴＩＯＮ」等がある。
【００５３】
さて、上記（３−１）及び（３−２）の機能は、ＳＡＳエクスパンダ２１のパス決定部２６によって実現される。
そこで、まず、パス決定部２６の詳細な機能構成について説明する。
図７は、パス決定部２６の機能構成例を示したブロック図である。
図示するように、パス決定部２６は、ＳＳＰ制御部７１と、要求データ長管理部７２と、要求データ長記憶部７３と、データ転送量管理部７４と、データ転送量記憶部７５とを備える。
【００５４】
ＳＳＰ制御部７１は、受信部２２（図２参照）から受け取ったＳＡＳフレームからＳＳＰフレームを取り出して解析する。そして、ＳＳＰフレームがＳＳＰコマンドフレームであれば、要求データ長管理部７２及びデータ転送量管理部７４によるパスの決定動作やデータ転送量の調整動作を制御し、ＳＡＳフレームと決定したパスの情報とを送信部２９（図２参照）に受け渡す。また、ＳＳＰフレームがＳＳＰレスポンスフレームであれば、要求データ長管理部７２及びデータ転送量管理部７４によるデータ転送量の調整動作を制御し、ＳＡＳフレームを送信部２９（図２参照）に受け渡す。或いは、ＳＳＰフレームがＳＳＰタスクフレームである場合に、要求データ長管理部７２及びデータ転送量管理部７４による動作を制御してもよい。
【００５５】
要求データ長管理部７２は、ＳＳＰコマンドフレームに関する情報、特に、ＳＳＰコマンドフレームに含まれる要求データ長及びＳＳＰコマンドフレームを転送すべきパスの情報を管理する。或いは、これに加えて、ＳＳＰタスクフレームに関する情報を管理してもよい。本実施の形態では、ＳＳＰコマンドフレームを受信した旨の情報を保持する保持部の一例として、要求データ長管理部７２を設けている。
要求データ長記憶部７３は、要求データ長管理部７２が管理するＳＳＰコマンドフレームに関する情報を保存するためのテーブル（以下、「要求データ長テーブル」という）を記憶する。或いは、要求データ長テーブルには、ＳＳＰタスクフレームに関する情報を保存してもよい。
【００５６】
データ転送量管理部７４は、ＳＡＳターゲット３２への複数のパスのそれぞれのデータ転送量を管理し、データ転送量に基づくパスの決定や、データ転送量に対する要求データ長の加算及び減算を行う。本実施の形態では、各パスを用いて送受信されているデータの量である送受信データ量の一例として、データ転送量を用いており、送受信データ量に基づいて特定のパスを送信に用いるパスに決定する決定部の一例として、データ転送量管理部７４を設けている。また、ＳＳＰコマンドフレームが送受信を要求するデータの量である要求データ量の一例として、要求データ長を用いており、送受信データ量に要求データ量を加算する加算部、送受信データ量から要求データ量を減算する減算部の一例として、データ転送量管理部７４を設けている。
データ転送量記憶部７５は、データ転送量管理部７４が管理するデータ転送量を示す複数のパスのそれぞれに対応するカウンタ（以下、「データ転送量カウンタ」という）を記憶する。尚、この複数のパス識別子は、トポロジ管理部２５が図５−１の処理で取得した情報に基づいて設定すればよい。本実施の形態では、送受信データ量を記憶する記憶部の一例として、データ転送量記憶部７５を設けている。
【００５７】
図８は、要求データ長記憶部７３に記憶される要求データ長テーブルの一例を示した図である。
図示するように、要求データ長テーブルは、指示識別子と、要求データ長と、パス識別子とを項目として有する。
指示識別子は、ＳＳＰコマンドフレームを一意に識別するための情報である。或いは、ＳＳＰタスクフレームを一意に識別するための情報を含めてもよい。
要求データ長は、ＳＳＰコマンドフレームの要求データ長である。
パス識別子は、ＳＳＰコマンドフレームの転送に用いたパスを一意に識別するための情報である。
【００５８】
図では、例えば、指示識別子「ｃｍｄ１」のＳＳＰコマンドフレームについて、その要求データ長がＬ１であり、パス識別子「ｐａｓｓ１」のパスに転送されたことが示され、指示識別子「ｃｍｄ２」のＳＳＰコマンドフレームについて、その要求データ長がＬ２であり、パス識別子「ｐａｓｓ２」のパスに転送されたことが示されている。
尚、このテーブルのエントリの数は、ストレージデバイスのキューの深さよりも多いことが望ましい。
【００５９】
ここで、指示識別子について説明する。
一般的にＳＡＳのドメインにおいて、ＳＳＰコマンドフレーム、ＳＳＰデータフレーム、ＳＳＰレスポンスフレームは、非同期で、しかも複数のＳＡＳイニシエータやＳＡＳターゲットから送信される。そこで、ＳＣＳＩのプロトコルには、ＳＳＰレスポンスフレームからＳＳＰコマンドフレーム及びＳＳＰタスクフレームを一意に特定するための方法が定義されている。それはI_T_L_Q nexusというものであり、これにはInitiator SAS Address、Target SAS Address、Logical Unit Number、Command Tagの４つの値が含まれている。そして、これら４つの値が一致するフレームが、対応するフレームと判定される。
【００６０】
これら４つの値のうち、まず、Initiator SAS Address、Target SAS Addressは、それぞれ、ＳＳＰフレームのフレームヘッダのHashed Source SAS Addressフィールド、Hashed Destination SAS Addressフィールドから取得できる。
次に、Command Tagは、ＳＳＰフレームのフレームヘッダのInitiator Port Transfer Tagに相当するものである。このInitiator Port Transfer Tagには、ＳＡＳイニシエータがＩ＿Ｔ単位で一意な値を設定する。値は、ＳＳＰコマンドフレームの場合はcommand identifierとして定義されている値であり、ＳＳＰタスクフレームの場合はassociationとして定義されている値である。これらの値は、Ｉ＿Ｔ単位で一意であり、ＳＳＰコマンドフレームとＳＳＰタスクフレームの間でも重複してはならない。Ｉ＿Ｔが同じで、異なるLogical Unit Numberに対してコマンドを送信する場合でも、このタグは重複してはならない。
よって、ＳＳＰレスポンスフレームやＳＳＰデータフレームのフレームヘッダのInitiator SAS Address、Target SAS Address、Initiator Port Transfer Tagの３つの値を見て、それらが全て一致するＳＳＰコマンドフレームを、対応するＳＳＰコマンドフレームとして特定できる。
従って、指示識別子は、少なくともこれら３つの値から構成する。
【００６１】
また、ＳＳＰフレームにおいてフレームヘッダに続くインフォメーションユニットは、フレームタイプによりフォーマットが異なるが、ＳＳＰコマンドフレームやＳＳＰタスクフレームの場合、最初にLogical Unit Numberというフィールドを持つ。このLogical Unit Numberフィールドは、I_T_L_Q nexusのＬに対応する。ＳＳＰレスポンスフレームから、対応するＳＳＰコマンドフレームやＳＳＰタスクフレームを特定するだけであれば、上記の３つの値で十分であるが、ＳＳＰタスクフレームをサポートするのであれば、このLogical Unit Numberも必要となる。
【００６２】
図９は、データ転送量記憶部７５に記憶されるデータ転送量カウンタの一例を示した図である。
図示するように、データ転送量カウンタは、複数のパス識別子のそれぞれにデータ転送量を対応付けることで構成されている。
図では、パス識別子「ｐａｓｓ１」のパスのデータ転送量カウンタがＴ１であり、パス識別子「ｐａｓｓ２」のパスのデータ転送量カウンタがＴ２であることが示されている。
尚、図では、ＳＡＳエクスパンダ２１ａ内のデータ転送量カウンタについて言えば、リンク４２ａを経由したパスと、ブリッジ４３及びリンク４２ｂを経由したパスとを想定し、２つのパス識別子のみを設定した。しかしながら、図示しない他のパス（ＳＡＳターゲット３２へのパスに限らない）のパス識別子を設定するようにしてもよい。
【００６３】
次に、ＳＡＳエクスパンダ２１が複数のパスを用いてＳＡＳトラフィックの負荷分散を実現するときの動作について説明する。
尚、ＳＡＳイニシエータ１１とＳＡＳターゲット３２の間のＳＡＳフレームの送受信は非同期で行われる。つまり、ＳＡＳターゲット３２側ではＩ／Ｏの順番を保証しない。Ｉ／Ｏを順番通りに実行したい場合、ＳＡＳホスト１０のアプリケーションが、１回目のＩ／ＯのコマンドをＳＡＳターゲット３２に転送し、そのコマンドに対するレスポンスをＳＡＳターゲット３２から受け取った後に、２回目のＩ／ＯのコマンドをＳＡＳターゲット３２に転送する。従って、ＳＡＳエクスパンダ２１は、Ｉ／Ｏの順番を気にせず、以下の方法で、複数のパスを使用して、ＳＡＳターゲット３２に対するＩ／Ｏを行う。
【００６４】
即ち、ＳＡＳエクスパンダ２１では、まず、受信部２２が、仮想ターゲットポートアドレスが宛先に設定されたＳＡＳフレームを受信する。そして、テーブル記憶部２３に記憶されたターゲットポート構成テーブルを参照し、宛先に設定された仮想ターゲットポートアドレスに対応する少なくとも１つの実ターゲットポートアドレスを求める。例えば、仮想ターゲットポートアドレスＤ１が宛先に設定されたＳＡＳフレームを受信すると、図３のターゲットポート構成テーブルを参照し、実ターゲットポートアドレスＤ１Ａ及びＤ１Ｂを求める。
【００６５】
一方、ＳＡＳエクスパンダ２１には、図５−１の処理の結果、実ターゲットポートアドレスとその実ターゲットポートアドレスへのデータ転送に使用されるＰＨＹ（パスと１対１に対応）とを対応付けたルーティングテーブル（図示せず）が保持されている。そこで、受信部２２は、このルーティングテーブルを参照して、先に求めた少なくとも１つの実ターゲットポートアドレスに対応するパスのパス識別子を、ＳＡＳフレームを転送すべきパスのパス識別子の候補とする。例えば、ＳＡＳエクスパンダ２１ａにおいて、パス識別子「ｐａｓｓ１」のパスがリンク４２ａを経由したパスであり、パス識別子「ｐａｓｓ２」のパスがブリッジ４３及びリンク４２ｂを経由したパスであるとする。この場合、ルーティングテーブルから、実ターゲットポートアドレスＤ１Ａとパス識別子「ｐａｓｓ１」との対応、及び、実ターゲットポートアドレスＤ１Ｂとパス識別子「ｐａｓｓ２」との対応が得られるので、パス識別子「ｐａｓｓ１」、「ｐａｓｓ２」を、ＳＡＳフレームを転送すべきパスのパス識別子の候補とする。
【００６６】
次に、パス決定部２６が、受信部２２からＳＡＳフレーム及びパス識別子の候補を受け取り、ＳＡＳフレームを転送すべきパスを決定する。尚、このときのパス決定部２６の動作としては、ＳＳＰコマンドフレームをサポートし、ＳＳＰタスクフレームをサポートしない場合の動作と、ＳＳＰコマンドフレームとＳＳＰタスクフレームの両方をサポートする場合の動作とがある。そこで、以下では、前者を第１の動作例とし、後者を第２の動作例として、詳細に説明する。
【００６７】
（第１の動作例）
パス決定部２６では、ＳＳＰ制御部７１が、受信部２２からＳＡＳフレームとパス識別子の候補とを受け取ると、ＳＡＳフレームからＳＳＰフレームを取り出す。そして、ＳＳＰフレームのフレームヘッダのフレームタイプフィールドを判別する。その結果、ＳＳＰフレームがＳＳＰコマンドフレームである場合は、ＳＳＰコマンドフレーム受信時処理を行い、ＳＳＰフレームがＳＳＰレスポンスフレームである場合は、ＳＳＰレスポンスフレーム受信時処理を行う。
【００６８】
まず、ＳＳＰコマンドフレーム受信時処理について説明する。
図１０は、このときのパス決定部２６の動作例を示したフローチャートである。
パス決定部２６では、まず、ＳＳＰ制御部７１が、ＳＳＰコマンドフレームとパス識別子の候補とを受け取る（ステップ２５１）。尚、このＳＳＰコマンドフレームとパス識別子の候補は要求データ長管理部７２に渡され、制御も要求データ長管理部７２に移る。
【００６９】
すると、要求データ長管理部７２は、ＳＳＰ制御部７１から渡されたＳＳＰコマンドフレームから、ＳＳＰコマンドフレームの識別情報である指示識別子と、ＳＳＰコマンドフレームの要求データ長とを求める（ステップ２５２）。このとき、指示識別子は、上述したように、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tagの３つの値から構成する。ここで、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tagは、ＳＳＰコマンドフレームのフレームヘッダから取得できる。また、ＳＳＰコマンドフレームのインフォメーションユニット内のＣＤＢ（Command Descriptor Block）と呼ばれるブロックにリード／ライト等の具体的なコマンド内容やコマンドの対象となるデータの長さ等が指定されているので、要求データ長はこのブロックから取得する。そして、要求データ長管理部７２は、要求データ長記憶部７３に記憶された要求データ長テーブルに指示識別子と要求データ長とを保存する（ステップ２５３）。尚、この要求データ長とステップ２５１で受け取ったパス識別子の候補はデータ転送量管理部７４に渡され、制御もデータ転送量管理部７４に移る。
【００７０】
これにより、データ転送量管理部７４は、データ転送量記憶部７５に記憶されたデータ転送量カウンタのうち、要求データ長管理部７２から渡されたパス識別子の候補に対応するデータ転送量カウンタから、最小のデータ転送量カウンタを選択し、そのデータ転送量カウンタに対して、要求データ長管理部７２から渡された要求データ長を加算する（ステップ２５４）。尚、この要求データ長を加算したデータ転送量カウンタに対応するパス識別子は要求データ長管理部７２に渡され、制御も要求データ長管理部７２に戻る。
【００７１】
すると、要求データ長管理部７２は、ステップ２５３で保存した指示識別子及び要求データ長に対して、データ転送量管理部７４から渡されたパス識別子を登録する（ステップ２５５）。尚、この登録したパス識別子はＳＳＰ制御部７１に渡され、制御もＳＳＰ制御部７１に戻る。
【００７２】
これにより、ＳＳＰ制御部７１は、受信部２２から受け取ったＳＡＳフレームと要求データ長管理部７２から受け取ったパス識別子とを送信部２９に受け渡す（ステップ２５６）。
その後、送信部２９は、ルーティングテーブル（図示せず）を参照して、ＳＳＰ制御部７１から渡されたパス識別子に対応する実ターゲットポートアドレスを求める。そして、ＳＡＳフレームの宛先に設定されたＳＡＳアドレスをその実ターゲットポートアドレスに変更し、転送する。
【００７３】
次に、ＳＳＰレスポンスフレーム受信時処理について説明する。
図１１は、このときのパス決定部２６の動作例を示したフローチャートである。
パス決定部２６では、まず、ＳＳＰ制御部７１が、ＳＳＰレスポンスフレームを受け取る（ステップ２６１）。尚、このＳＳＰレスポンスフレームは要求データ長管理部７２に渡され、制御も要求データ長管理部７２に移る。
【００７４】
すると、要求データ長管理部７２は、ＳＳＰ制御部７１から渡されたＳＳＰレスポンスフレームから、ＳＳＰレスポンスフレームに対応するＳＳＰコマンドフレームを検索するための検索キーを求める（ステップ２６２）。ここで、検索キーは、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tagの３つの値から構成する。また、要求データ長管理部７２は、要求データ長記憶部７３に記憶された要求データ長テーブルをこの検索キーで検索し、対応するＳＳＰコマンドフレームのエントリを見つける（ステップ２６３）。具体的には、要求データ長テーブルのエントリのうち、検索キーと一致する指示識別子を持つエントリを、対応するＳＳＰコマンドフレームのエントリとする。そして、そのエントリを削除する（ステップ２６４）。尚、この削除されたエントリにおける要求データ長とパス識別子はデータ転送量管理部７４に渡され、制御もデータ転送量管理部７４に移る。
【００７５】
これにより、データ転送量管理部７４は、データ転送量記憶部７５に記憶されたデータ転送量カウンタのうち、要求データ長管理部７２から渡されたパス識別子に対応するデータ転送量カウンタを、要求データ長管理部７２から渡された要求データ長だけ減算する（ステップ２６５）。
【００７６】
そして、ＳＳＰ制御部７１は、受信部２２から受け取ったＳＡＳフレームを送信部２９に受け渡す（ステップ２６６）。
その後、送信部２９は、ＳＡＳフレームをＳＡＳイニシエータ１１へ送信する。
【００７７】
ところで、タスクマネジメントファンクションによってコマンドがアボートされると、場合によっては、ＳＡＳターゲット３２は、そのコマンドに対するＳＳＰレスポンスフレームを返さない。そうなると、この第１の動作例のように、ＳＡＳエクスパンダ２１がＳＳＰタスクフレーム及びそれに対するＳＳＰレスポンスフレームを考慮しない場合、既にアボートされたコマンドのエントリが要求データ長テーブルに残ったままになる可能性がある。
そこで、この第１の動作例では、ＳＳＰコマンドフレームを要求データ長テーブルに登録する際に、エントリごとにタイムアウト時間を設定する。そして、定期的に要求データ長テーブルを確認し、タイムアウト時間を過ぎたエントリを削除する。また、データ転送量カウンタのうち、この削除したエントリにおけるパス識別子に対応するデータ転送量カウンタを、この削除したエントリにおける要求データ長だけ減算する。また、このようなタイムアウト時間を設定する方法は、ＳＳＰレスポンスフレームが戻って来ないようなエラーケース、例えば、ＳＡＳターゲット３２が異常な状態に陥ってハングした場合や、ＳＡＳターゲット３２側で勝手にリセットされた場合等においても、要求データ長テーブルの不要なコマンドのエントリを削除し、データ転送量カウンタから不要なコマンドの要求データ長を減算することができるので有効である。
【００７８】
勿論、次に述べる第２の動作例のように、ＳＡＳエクスパンダ２１がタスクマネジメントファンクションを完全にサポートした方が、よりきめ細かな負荷分散は可能となる。しかしながら、タスクマネジメントファンクションがそれほど頻繁に発生しないと思われることから、この第１の動作例の方法でも十分有用と考えられる。
【００７９】
（第２の動作例）
パス決定部２６では、ＳＳＰ制御部７１が、受信部２２からＳＡＳフレームとパス識別子の候補とを受け取ると、ＳＡＳフレームからＳＳＰフレームを取り出す。そして、ＳＳＰフレームのフレームヘッダのフレームタイプフィールドを判別する。その結果、ＳＳＰフレームがＳＳＰコマンドフレームである場合は、ＳＳＰコマンドフレーム受信時処理を行い、ＳＳＰフレームがＳＳＰタスクフレームである場合は、ＳＳＰタスクフレーム受信時処理を行い、ＳＳＰフレームがＳＳＰレスポンスフレームである場合は、ＳＳＰレスポンスフレーム受信時処理を行う。
【００８０】
まず、ＳＳＰコマンドフレーム受信時処理であるが、このときのパス決定部２６の動作例は、第１の動作例と略同様であるので、説明を省略する。
但し、この第２の動作例では、ＳＳＰコマンドフレームとＳＳＰタスクフレームとを併せて処理するので、指示識別子の構成が第１の動作例と異なる。即ち、指示識別子は、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tag、Logical Unit Number、コマンドかタスクかを識別するフラグ、コマンド又はタスクマネジメントファンクションの種別、Tag of Task to be Managedの値から構成する。ここで、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tag、コマンドかタスクかを識別するフラグは、ＳＳＰコマンドフレームのフレームヘッダから取得できる。また、Logical Unit Number、コマンドの種別は、ＳＳＰコマンドフレームのインフォメーションユニット内のフィールドから取得できる。一方、Tag of Task to be Managedは、タスクマネジメントファンクションに対してのみ値が設定されるので、ここでは値が設定されない。
【００８１】
次に、ＳＳＰタスクフレーム受信時処理について説明する。
図１２は、このときのパス決定部２６の動作例を示したフローチャートである。
パス決定部２６では、まず、ＳＳＰ制御部７１が、ＳＳＰタスクフレームとパス識別子の候補とを受け取る（ステップ２７１）。尚、このＳＳＰタスクフレームとパス識別子の候補は要求データ長管理部７２に渡され、制御も要求データ長管理部７２に移る。
【００８２】
すると、要求データ長管理部７２は、ＳＳＰ制御部７１から渡されたＳＳＰタスクフレームから、ＳＳＰコマンドフレーム及びＳＳＰタスクフレームの識別情報である指示識別子を求める（ステップ２７２）。このとき、指示識別子は、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tag、Logical Unit Number、コマンドかタスクかを識別するフラグ、コマンド又はタスクマネジメントファンクションの種別、Tag of Task to be Managedの値から構成する。ここで、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tag、コマンドかタスクかを識別するフラグは、ＳＳＰタスクフレームのフレームヘッダから取得できる。また、Logical Unit Number、タスクマネジメントファンクションの種別は、ＳＳＰタスクフレームのインフォメーションユニット内のフィールドから取得できる。一方、Tag of Task to be Managedは、ABORT TASKとQUERY TASKに対してのみ使用され、具体的にどのコマンドに対する処理かを指定する情報である。このTag of Task to be Managedは、ＳＳＰタスクフレームのインフォメーションユニット内のフィールドから取得できる。そして、要求データ長管理部７２は、要求データ長記憶部７３に記憶された要求データ長テーブルに指示識別子を保存する（ステップ２７３）。尚、ステップ２７１で受け取ったパス識別子の候補はデータ転送量管理部７４に渡され、制御もデータ転送量管理部７４に移る。
【００８３】
これにより、データ転送量管理部７４は、データ転送量記憶部７５に記憶されたデータ転送量カウンタのうち、要求データ長管理部７２から渡されたパス識別子の候補に対応するデータ転送量カウンタから、最小のデータ転送量カウンタを選択する（ステップ２７４）。尚、この選択したデータ転送量カウンタに対応するパス識別子は要求データ長管理部７２に渡され、制御も要求データ長管理部７２に戻る。
【００８４】
すると、要求データ長管理部７２は、ステップ２７３で保存した指示識別子に対して、データ転送量管理部７４から渡されたパス識別子を登録する（ステップ２７５）。尚、この登録したパス識別子はＳＳＰ制御部７１に渡され、制御もＳＳＰ制御部７１に戻る。
【００８５】
これにより、ＳＳＰ制御部７１は、受信部２２から受け取ったＳＡＳフレームと要求データ長管理部７２から受け取ったパス識別子とを送信部２９に受け渡す（ステップ２７６）。
その後、送信部２９は、ルーティングテーブル（図示せず）を参照して、ＳＳＰ制御部７１から渡されたパス識別子に対応する実ターゲットポートアドレスを求める。そして、ＳＡＳフレームの宛先に設定されたＳＡＳアドレスをその実ターゲットポートアドレスに変更し、転送する。
【００８６】
次に、ＳＳＰレスポンスフレーム受信時処理について説明する。
図１３は、このときのパス決定部２６の動作例を示したフローチャートである。
パス決定部２６では、まず、ＳＳＰ制御部７１が、ＳＳＰレスポンスフレームを受け取る（ステップ２８１）。尚、このＳＳＰレスポンスフレームは要求データ長管理部７２に渡され、制御も要求データ長管理部７２に移る。
【００８７】
すると、要求データ長管理部７２は、ＳＳＰ制御部７１から渡されたＳＳＰレスポンスフレームから、ＳＳＰレスポンスフレームに対応するＳＳＰフレームを検索するための検索キーを求める（ステップ２８２）。ここで、検索キーは、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tagの３つの値から構成する。また、要求データ長管理部７２は、要求データ長記憶部７３に記憶された要求データ長テーブルをこの検索キーで検索し、対応するＳＳＰフレームのエントリを見つける（ステップ２８３）。具体的には、要求データ長テーブルのエントリのうち、Initiator SAS Address、Target SAS Address、Initiator Port Transfer Tagの値が検索キーと一致する指示識別子を持つエントリを、対応するＳＳＰフレームのエントリとする。そして、そのエントリがＳＳＰコマンドフレームのエントリであるかＳＳＰタスクフレームのエントリであるかを判定する（ステップ２８４）。尚、この判定は、指示識別子のうちのコマンドかタスクかを識別するフラグに基づいて行うことができる。
【００８８】
その結果、ＳＳＰコマンドフレームのエントリであると判定された場合、要求データ長管理部７２は、そのエントリを削除する（ステップ２８５）。尚、この削除されたエントリにおける要求データ長とパス識別子はデータ転送量管理部７４に渡され、制御もデータ転送量管理部７４に移る。
【００８９】
これにより、データ転送量管理部７４は、データ転送量記憶部７５に記憶されたデータ転送量カウンタのうち、要求データ長管理部７２から渡されたパス識別子に対応するデータ転送量カウンタを、要求データ長管理部７２から渡された要求データ長だけ減算する（ステップ２８６）。
【００９０】
一方、ＳＳＰタスクフレームのエントリであると判定された場合、要求データ長管理部７２は、そのＳＳＰタスクフレームがキャンセルした全てのコマンドのエントリを要求データ長テーブルから見つける（ステップ２８７）。
【００９１】
例えば、ＳＳＰタスクフレームがABORT TASK（特定のコマンドをアボートするタスク）である場合を考える。ＳＳＰタスクフレームがABORT TASKであることは、指示識別子のうちのタスクマネジメントファンクションの種別によって知ることができる。この場合、要求データ長管理部７２は、要求データ長テーブルの中から、ＳＳＰタスクフレームのＩ＿Ｔと一致するＩ＿Ｔを持ち、かつ、ＳＳＰタスクフレームのTag of Task to be Managedと一致するInitiator Port Transfer Tagを持つエントリを探す。尚、ABORT TASKの場合、キャンセルされたコマンドは１つである。
また、ＳＳＰタスクフレームがABORT TASK SET（あるイニシエータからの全てのコマンドをアボートするタスク）である場合を考える。ＳＳＰタスクフレームがABORT TASK SETであることは、指示識別子のうちのタスクマネジメントファンクションの種別によって知ることができる。この場合、要求データ長管理部７２は、要求データ長テーブルの中から、ＳＳＰタスクフレームのＩ＿Ｔ及びLogical Unit Numberと一致するＩ＿Ｔ及びLogical Unit Numberを持つエントリを全て探し出す。
【００９２】
そして、そのＳＳＰタスクフレームのエントリと、ステップ２８７で見つけた全てのコマンドのエントリを削除する（ステップ２８８）。尚、この削除された全てのコマンドのエントリにおける要求データ長とパス識別子はデータ転送量管理部７４に渡され、制御もデータ転送量管理部７４に移る。
【００９３】
これにより、データ転送量管理部７４は、データ転送量記憶部７５に記憶されたデータ転送量カウンタのうち、要求データ長管理部７２から渡されたパス識別子に対応するデータ転送量カウンタを、要求データ長管理部７２から渡された要求データ長だけ減算する（ステップ２８９）。
【００９４】
そして、ＳＳＰ制御部７１は、受信部２２から受け取ったＳＡＳフレームを送信部２９に受け渡す（ステップ２９０）。
その後、送信部２９は、ＳＡＳフレームをＳＡＳイニシエータ１１へ送信する。
【００９５】
このように、本実施の形態では、ＳＡＳエクスパンダ２１に上記機能（１）〜（３）を搭載し、特に機能（３）として、上記機能（３−１）及び（３−２）を搭載した。
これにより、ＳＡＳドメインにおいてマルチパスの制御をスイッチ及びストレージサブシステム側で吸収できるようになり、ＳＡＳエクスパンダ２１がＳＡＳトラフィックを複数のパスで均等に分散できるようになった。その結果、ＳＡＳホスト１０にマルチパスドライバをインストールすることなく、マルチパスを用いた負荷分散を行うことが可能となった。
【００９６】
尚、本実施の形態では簡略化のため省略したが、ＳＳＰデータフレームも調査対象とし、転送し終わったデータの量をその都度データ転送量カウンタに反映させるようにしてもよい。このようにすれば、よりきめ細かな負荷分散が可能となる。
【００９７】
また、本実施の形態では、ＳＡＳエクスパンダ２１ａ，２１ｂが１つの仮想エクスパンダアドレスをＳＡＳイニシエータ１１に伝えることにより、ＳＡＳイニシエータ１１が１つの仮想ＳＡＳエクスパンダ５１に接続されていると認識している構成を前提とした。しかしながら、必ずしもこのような構成を前提としなければならないわけではない。即ち、ＳＡＳイニシエータ１１が実際に１つのＳＡＳエクスパンダ２１に接続されている構成を前提としてもよい。
【００９８】
更に、本実施の形態は、複数のＳＡＳホスト１０及び複数のＳＡＳターゲット３２に対しても適応可能である。また、マルチパス構成を１つ又は３つ以上のＳＡＳエクスパンダを用いて構築したとしても、本実施の形態は適用可能である。
【００９９】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【０１００】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【０１０１】
１０…ＳＡＳホスト、１１…ＳＡＳイニシエータ、２０…ＳＡＳスイッチ、２１，３１…ＳＡＳエクスパンダ、２２…受信部、２３…テーブル記憶部、２４…装置情報管理部、２５…トポロジ管理部、２６…パス決定部、２９…送信部、３０…ＳＡＳストレージサブシステム、３２…ＳＡＳターゲット、４１，４２…リンク、４３…ブリッジ、７１…ＳＳＰ制御部、７２…要求データ長管理部、７３…要求データ長記憶部、７４…データ転送量管理部、７５…データ転送量記憶部
【図１】
0005593184.tif 000002
【図２】
0005593184.tif 000003
【図３】
0005593184.tif 000004
【図４】
0005593184.tif 000005
【図５−１】
0005593184.tif 000006
【図５−２】
0005593184.tif 000007
【図６】
0005593184.tif 000008
【図７】
0005593184.tif 000009
【図８】
0005593184.tif 000010
【図９】
0005593184.tif 000011
【図１０】
0005593184.tif 000012
【図１１】
0005593184.tif 000013
【図１２】
0005593184.tif 000014
【図１３】
0005593184.tif 000015