(57)【特許請求の範囲】
【請求項１】
ＯＬＴＰのデータベースとＤＷＨのデータベースが格納されたストレージ装置と、前記ＯＬＴＰのデータベースと、前記ＤＷＨのデータベースを用いるアプリケーションを実行するホストと、に接続され、複数の通信プロセッサを備えるホストバスアダプタであって、
前記複数の通信プロセッサの一部である第１通信プロセッサは、前記ＤＷＨのデータベースに対して送信される、ブロックサイズが所定のサイズ以上を指定した第１Ｉ／Ｏコマンドを前記ホストから受信し、当該第１Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有し、
前記複数の通信プロセッサの一部である第２通信プロセッサは、前記ＯＬＴＰのデータベースに対して送信される、ブロックサイズが前記所定のサイズ未満を指定した第２Ｉ／Ｏコマンドを前記ホストから受信し、当該第２Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有する、
ことを特徴としたホストバスアダプタ。
【請求項２】
請求項１記載のホストバスアダプタであって、
前記第１通信プロセッサが処理する前記第１Ｉ／Ｏコマンドを格納する、第１Ｉ／Ｏコマンド起動キューと、
前記第２通信プロセッサが処理する前記第２Ｉ／Ｏコマンドを格納する、前記第１Ｉ／Ｏコマンド起動キューとは異なる第２Ｉ／Ｏコマンド起動キューと、
を有することを特徴としたホストバスアダプタ。
【請求項３】
請求項２記載のホストバスアダプタであって、
前記ホストが有するＭＭＩＯ空間にマップされ、前記第１Ｉ／Ｏコマンド起動キューおよび前記第２Ｉ／Ｏコマンド起動キューに前記第１Ｉ／Ｏコマンドおよび前記第２Ｉ／Ｏコマンドをスタックする際にアクセスされる、ＭＭＩＯ空間リソース、
を有することを特徴としたホストバスアダプタ。
【請求項４】
請求項３記載のホストバスアダプタであって、
前記ＭＭＩＯ空間リソースは、前記複数の通信プロセッサの各々に対応したＩ／Ｏコマンド起動レジスタを含む、
ことを特徴としたホストバスアダプタ。
【請求項５】
ＯＬＴＰのデータベースとＤＷＨのデータベースが格納されたストレージ装置と、
前記ストレージ装置に、ファイバーチャネルを介して接続され、複数の通信プロセッサを備えるホストバスアダプタと、
前記ホストバスアダプタに接続され、前記ＯＬＴＰのデータベースと、前記ＤＷＨのデータベースを用いるアプリケーションを実行するホストと、
を有するシステムであって、
前記複数の通信プロセッサの一部である第１通信プロセッサは、前記ＤＷＨのデータベースに対して送信される、ブロックサイズが所定のサイズ以上を指定した第１Ｉ／Ｏコマンドを前記ホストから受信し、当該第１Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有し、
前記複数の通信プロセッサの一部である第２通信プロセッサは、前記ＯＬＴＰのデータベースに対して送信される、ブロックサイズが前記所定のサイズ未満を指定した第２Ｉ／Ｏコマンドを前記ホストから受信し、当該第２Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有する、
ことを特徴としたシステム。
【請求項６】
請求項５記載のシステムであって、
前記ホストバスアダプタは、
前記第１通信プロセッサが処理する前記第１Ｉ／Ｏコマンドを格納する、第１Ｉ／Ｏコマンド起動キューと、
前記第２通信プロセッサが処理する前記第２Ｉ／Ｏコマンドを格納する、前記第１Ｉ／Ｏコマンド起動キューとは異なる第２Ｉ／Ｏコマンド起動キューと、
を有することを特徴としたシステム。
【請求項７】
請求項６記載のシステムであって、
前記ホストバスアダプタは、
前記ホストが有するＭＭＩＯ空間にマップされ、前記第１Ｉ／Ｏコマンド起動キューおよび前記第２Ｉ／Ｏコマンド起動キューに前記第１Ｉ／Ｏコマンドおよび前記第２Ｉ／Ｏコマンドをスタックする際にアクセスされる、ＭＭＩＯ空間リソース、
を有することを特徴としたシステム。
【請求項８】
請求項７記載のシステムであって、
前記ＭＭＩＯ空間リソースは、前記複数の通信プロセッサの各々に対応したＩ／Ｏコマンド起動レジスタを含む、
ことを特徴としたシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｉ／Ｏコマンドを処理するインターフェースを制御する制御装置および制御方法に関する。
【背景技術】
【０００２】
Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ（ＨＢＡ）に搭載されるプロトコルチップは、接続プロトコルをオフロードするための通信プロセッサが実装されるのが一般的であるが、接続スピードの高速化及び仮想化技術の台頭によりＨＢＡにかかる負荷は増加傾向にある。プロトコルチップ内の通信プロセッサの処理性能が性能ボトルネックになるため、一つのファイバチャネルポートを複数の通信プロセッサにて制御する方法がある（たとえば、下記特許文献１を参照。）。特許文献１の方法は、ＨＢＡ上に複数の通信プロセッサを備え、ファイバチャネルポートで受信したフレームを複数のプロトコル制御回路で並列に制御する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開ＷＯ２０１３／００１５７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の方法では、ホスト上で動作し複数の通信プロセッサを制御するドライバが、Ｉ／Ｏコマンドの負荷をＨＢＡ上に備えられた複数の通信プロセッサ間を分散するが、分散される負荷にばらつきがあるという問題がある（第１の問題）。負荷にばらつきがあるため、通信プロセッサ数が増加してもトランザクション性能の向上を阻害することになる。【０００５】
また、複数の通信プロセッサにＩ／Ｏコマンドの負荷が均一に分散したとしても、ストレージ装置へのＩ／ＯコマンドのＩ／Ｏ特性がシーケンシャルの場合、トランザクション性能が低下するという問題がある（第２の問題）。ストレージへのアクセスは、ブロックという単位で制御され、Ｉ／Ｏ特性に応じて性能が異なる。ここで言うＩ／Ｏ特性とは、ストレージ装置へのアクセスパターンがシーケンシャルかランダムかということである。【０００６】
シーケンシャルアクセスでは、ブロックが連続して読み書きされ、ランダムアクセスでは細かなブロックをばらばらに読み書きする。同じデータ転送量でもシーケンシャルアクセスとランダムアクセスではストレージに対する読み書き要求数が異なり、例えば合計４０［ＫＢ］のデータ量で、ブロックのサイズが４［ＫＢ］の場合、シーケンシャルアクセスならばストレージ装置でのディスクへの読み書き要求数は１回、ランダムらなら４［ＫＢ］で１０回といった具合となる。【０００７】
ストレージ装置にはシーケンシャルな読み出し、書き込みコマンドが連続した場合に、シーケンシャルアクセスを効率化するアルゴリズムが実装されるのが一般的であり、シーケンシャル性が崩れるとストレージ装置の応答性能が低下する。【０００８】
また、ストレージ装置へのアクセスにおいてブロックサイズが小さいＩ／Ｏコマンドと大きいＩ／Ｏコマンドが混在した場合に、ブロックサイズが小さいＩ／Ｏコマンドによりトランザクション性能が低下するという問題がある（第３の問題）。ＨＢＡの同一ポートに接続されるファイバチャネルスイッチを介してテープ装置とディスク装置が接続された場合を例にあげて説明する。【０００９】
ストレージはブロックと呼ばれる単位でデータ転送を制御しているが、テープ装置はディスク装置に対して大きい（たとえば、８倍〜６４倍）ブロックサイズでデータ転送を制御する。よって、テープ装置に対するＩ／Ｏコマンド処理とディスク装置に対するＩ／Ｏコマンド処理を同一の通信プロセッサに要求した場合、ブロックサイズの大きいテープ装置のＩ／Ｏコマンドの処理時間が増大し、ファイバチャネルポートを共有しているブロックサイズの小さいディスク装置へのＩ／Ｏコマンド処理に待ち時間が発生し、性能低下を招く。【００１０】
第３の問題に対しては、これまでディスク装置とテープ装置に接続されるＨＢＡを分けるシステム設計によりテープ装置専用の通信帯域を確保し、システム全体の性能ボトルネックとならないような手法をとってきた。しかしながら、テープ専用のＨＢＡを導入する必要があるため導入コストが増大してしまう。【００１１】
第３の問題については接続先デバイスとしてテープ装置とディスク装置が混在した場合に限ったものではなく、ストレージ装置に格納されるデータベースの特性に依存しても発生する。同一ポートに接続されるストレージ装置内に業務系システム（ＯＬＴＰ）と情報系システム（ＤＷＨ）が混在した場合を例にあげて説明する。【００１２】
ＯＬＴＰとはオンライントランザクション処理のことで、ネットワークで接続されたホストとユーザ端末間の間で一連の処理を行うための仕組みであり、一般にデータの入力と検索のトランザクションを扱う。一回のＩ／Ｏコマンドで処理されるブロックサイズは小さく（数キロバイト）、高速なレスポンス性能が求められる。【００１３】
それに対し、ＤＷＨ（データウェアハウス）とは近年のビックデータに代表されるような大量の業務データの中から、各項目間の関連性を分析するシステムのことである。ＤＷＨでは、Ｉ／Ｏコマンドのブロックサイズは大きく（数十キロバイト以上）レスポンス性能よりもスループット性能が求められる。【００１４】
このように、ＯＬＴＰはブロックサイズの小さいＩ／Ｏコマンドであるのに対し、ＤＷＨではブロックサイズの大きいＩ／Ｏコマンドで制御されることから、ＨＢＡの同一ポートにディスク装置とテープ装置を接続した場合に発生する問題と同様の問題が発生する。すなわち、ＯＬＴＰとＤＷＨのＩ／Ｏコマンド処理を同一の通信プロセッサに要求した場合、Ｉ／Ｏコマンドのブロックサイズの大きいＤＷＨの処理時間が増大することによりＩ／Ｏコマンドのブロックサイズの小さいＯＬＴＰ処理に待ち時間が発生する。このため、ＯＬＴＰに求められるレスポンス性能が低下する。【００１５】
本発明は、上述した問題を解決するため、ストレージ装置に対する処理性能の向上を図ることを目的とする。
【課題を解決するための手段】
【００１６】
本願において開示される発明の一側面となるホストバスアダプタは、ＯＬＴＰのデータベースとＤＷＨのデータベースが格納されたストレージ装置と、前記ＯＬＴＰのデータベースと、前記ＤＷＨのデータベースを用いるアプリケーションを実行するホストと、に接続され、複数の通信プロセッサを備えるホストバスアダプタであって、前記複数の通信プロセッサの一部である第１通信プロセッサは、前記ＤＷＨのデータベースに対して送信される、ブロックサイズが所定のサイズ以上を指定した第１Ｉ／Ｏコマンドを前記ホストから受信し、当該第１Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有し、前記複数の通信プロセッサの一部である第２通信プロセッサは、前記ＯＬＴＰのデータベースに対して送信される、ブロックサイズが前記所定のサイズ未満を指定した第２Ｉ／Ｏコマンドを前記ホストから受信し、当該第２Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有する、ことを特徴とする。
本願において開示される発明の一側面となるシステムは、ＯＬＴＰのデータベースとＤＷＨのデータベースが格納されたストレージ装置と、前記ストレージ装置に、ファイバーチャネルを介して接続され、複数の通信プロセッサを備えるホストバスアダプタと、前記ホストバスアダプタに接続され、前記ＯＬＴＰのデータベースと、前記ＤＷＨのデータベースを用いるアプリケーションを実行するホストと、を有するシステムであって、前記複数の通信プロセッサの一部である第１通信プロセッサは、前記ＤＷＨのデータベースに対して送信される、ブロックサイズが所定のサイズ以上を指定した第１Ｉ／Ｏコマンドを前記ホストから受信し、当該第１Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有し、前記複数の通信プロセッサの一部である第２通信プロセッサは、前記ＯＬＴＰのデータベースに対して送信される、ブロックサイズが前記所定のサイズ未満を指定した第２Ｉ／Ｏコマンドを前記ホストから受信し、当該第２Ｉ／Ｏコマンドを前記ストレージ装置に送信する処理を占有する、ことを特徴とする。
【発明の効果】
【００１７】
本発明の代表的な実施の形態によれば、ストレージ装置に対する処理性能の向上を図ることができる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１８】
【図１】本実施例にかかるホストによる入出力制御例１を示す説明図である。
【図２】本実施例にかかるホストによる入出力制御例２を示す説明図である。
【図３】本実施例にかかるホストによる入出力制御例３を示す説明図である。
【図４】通信システムのハードウェア構成例を示すブロック図である。
【図５】ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）の記憶内容例を示す説明図である。
【図６】ＨＢＡ内の詳細な構成を示す説明図である。
【図７】ホストの機能的構成例を示すブロック図である。
【図８】通信システムのシーケンスを示す説明図である。
【図９】図８に示した通信プロセッサ選択処理（ステップＳ８０３）の詳細な処理手順例を示すフローチャートである。
【図１０】図９に示したアクセス判定処理（ステップＳ９０４）の詳細な処理手順例を示すフローチャートである。
【発明を実施するための形態】
【００１９】
本実施例では、ホストは、ＨＢＡ内の複数の通信プロセッサを制御するドライバにて通信プロセッサ毎のＩ／Ｏ負荷やストレージ装置への要求Ｉ／Ｏコマンド種、アクセスアドレスによりＩ／Ｏ特性を判定する。また、サーバは、接続ＬＵへのＩ／Ｏコマンドや特定のブロックサイズのＩ／Ｏコマンドを任意の通信プロセッサに占有制御させ、Ｉ／Ｏコマンドを処理する通信プロセッサを選択する。
【００２０】
これにより、複数の通信プロセッサ間のＩ／Ｏコマンドの負荷に偏りなく、並列に動作させることができ、ファイバチャネルポートのトランザクション性能の向上を図ることができる。また、ＨＢＡに接続されるストレージ装置に対するブロックサイズの大きいＩ／Ｏコマンドと小さいＩ／Ｏコマンドが混在する場合、これまでブロックサイズの大きいＩ／Ｏコマンド処理に影響してブロックサイズの小さいＩ／Ｏコマンドの処理性能の低下を抑制する。これにより、これまで接続ストレージ種やデータベースの特性に応じて分ける必要があったＨＢＡを一枚に集約できるため、システム導入コストの低減を図ることができる。以下、本発明の実施例について図面を用いて説明する。
【００２１】
＜入出力制御例１＞
図１は、本実施例にかかるホストによる入出力制御例１を示す説明図である。入出力制御例１は、Ｉ／Ｏコマンドの負荷をＨＢＡ上に備えられた複数の通信プロセッサ間を均一に分散させるロードバランス方式により、トランザクション性能の向上を図る。
【００２２】
図１において、通信システム１００は、ホスト１０１と、ＨＢＡ１０２と、ストレージ装置の一例であるディスク装置１０３と、を有する。ホスト１０１は、ＨＢＡ１０２を制御するＨＢＡドライバ１１０を有し、ＨＢＡ１０２は、複数のコア＃０〜＃３、およびポート１２０を有し、ディスク装置１０３にＩ／Ｏコマンドを転送する。本実施例では、一例としてコアの数を４個としているが、４個に限定されず、２個以上であればよい。ホスト１０１には、Ｉ／ＯコマンドＡ〜Ｅがアルファベット順に入力されるものとする。
【００２３】
ディスク装置１０３は、複数の論理ユニットＬＵ＃０〜ＬＵ＃３を有する。本実施例では、一例として論理ユニットの数を４個としているが、４個に限定されず、２個以上であればよい。また、コアの数と同数でなくてもよい。
【００２４】
ホスト１０１は、複数のコア＃０〜＃３の負荷の状態を見て各Ｉ／ＯコマンドＡ〜Ｅの割当先となるコアを選択する。コア＃１〜＃３内の黒塗矩形は、Ｉ／ＯコマンドＡ〜Ｅよりも先に入力されたＩ／Ｏコマンドである。ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＡの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃０に割り当てる。つぎに、ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＢの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃０〜２のいずれかに割り当てる。割当先候補が複数ある場合は、番号の若いコアが選択されるものとする。
【００２５】
つぎに、ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＣの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃１に割り当て、その次のＩ／ＯコマンドＤの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃１に割り当てる。このように、実行中のＩ／Ｏコマンドが多いとそれだけコアに負荷がかかるため、ＨＢＡドライバは、実行中のＩ／Ｏコマンドの数が最少のコアを選択して、Ｉ／Ｏコマンドを出力する。これにより、Ｉ／Ｏコマンドの負荷をＨＢＡ上に備えられた複数の通信プロセッサ間を均一に分散させることで、トランザクション性能の向上を図ることができる。
【００２６】
＜入出力制御例２＞
図２は、本実施例にかかるホストによる入出力制御例２を示す説明図である。入出力制御例２は、ストレージ装置へのＩ／ＯコマンドのＩ／Ｏ特性がシーケンシャルの場合にトランザクション性能の向上を図る。
【００２７】
図２において、ホスト１０１には、Ｉ／ＯコマンドＡ〜Ｅがアルファベット順に入力されるものとする。コマンド内のデータも、コマンドと同一符号を用いる。たとえば、コマンドＡ内のデータをデータＡとする。データにはＬＵ番号およびＲ／Ｗが付随する。ここでは、データ、ＬＵ番号およびＲ／Ｗの組み合わせで１つのＩ／Ｏコマンドとなる。
【００２８】
ＬＵ番号とは、そのデータのアクセス先となるディスク装置１０３内の論理ユニットを一意に特定する識別情報である。たとえば、ＬＵ番号が「０」のＩ／Ｏコマンドは、ディスク装置１０３の論理ユニットＬＵ＃０に出力される。Ｒ／Ｗは、そのＩ／Ｏコマンドがリードコマンドであるかまたはライトコマンドであるかというアクセス種別である。
【００２９】
ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＡ、Ｂ、Ｃ、Ｄ、Ｅの順に取り込む。ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンドの連続性およびアクセス種別の同一性を判定する。連続するＩ／Ｏコマンド（Ａ，Ｂ）については、ともにアクセス種別が「Ｒ」（リード）である。アクセスするアドレスが連続していると判定された場合、連続するＩ／Ｏコマンド（Ａ，Ｂ）は、同一のコアで処理される。本例の場合、ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンド（Ａ，Ｂ）をコア＃０に渡し、コア＃０はポート１２０を介して、連続するＩ／Ｏコマンド（Ａ，Ｂ）をＩ／ＯコマンドＡ，Ｂの順で論理ユニットＬＵ＃０に転送する。
【００３０】
また、ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンド（Ｂ，Ｃ）、（Ｃ，Ｄ）、（Ｄ，Ｅ）についても同様に判定する。ＨＢＡドライバ１１０は、図１に示したようなロードバランス方式にしたがって、Ｉ／ＯコマンドＣをコア＃１に、Ｉ／ＯコマンドＤをコア＃２に、Ｉ／ＯコマンドＥをコア＃３に割り当てる。
【００３１】
そして、コア＃１は、Ｉ／ＯコマンドＣを論理ユニットＬＵ＃１に転送し、コア＃２は、Ｉ／ＯコマンドＤを論理ユニットＬＵ＃２に転送し、コア＃３は、Ｉ／ＯコマンドＥを論理ユニットＬＵ＃３に転送する。これにより、複数のコア間のＩ／Ｏコマンドの負荷に偏りなく、並列に動作させることができ、ポート１２０のトランザクション性能の向上を図ることができる。
【００３２】
＜入出力制御例３＞
図３は、本実施例にかかるホスト１０１による入出力制御例３を示す説明図である。入出力制御例３は、ストレージ装置へのアクセスにおいてブロックサイズが小さいＩ／Ｏコマンドと大きいＩ／Ｏコマンドが混在した場合に、ブロックサイズが小さいＩ／Ｏコマンドによるトランザクション性能の向上を図る。入出力制御例３では、ストレージ装置の一例として、ＨＢＡ１０２のポート１２０に接続されるファイバチャネルスイッチ（不図示）を介してテープ装置３０３とディスク装置１０３が接続された場合を例にあげて説明する。なお、テープ装置３０３を情報系システム（ＤＷＨ）に、ディスク装置１０３を業務系システム（ＯＬＴＰ）に置き換えてもよい。
【００３３】
図３では、コア＃０がテープ装置３０３専用の通信プロセッサであり、コア＃１〜＃３がディスク装置１０３専用の通信プロセッサとする。Ｉ／Ｏコマンド列３００のうちＩ／Ｏコマンドａ〜ｃ、ｅは、ブロックサイズが小さいＩ／Ｏコマンドであり、Ｉ／Ｏコマンドｄ、ｆは、ブロックサイズが大きいＩ／Ｏコマンドである。
【００３４】
ホスト１０１内のＨＢＡドライバ１１０は、順次入力されてくるＩ／Ｏコマンドａ〜ｆのブロックサイズから転送先のコアを選択する。テープ装置２０３はディスク装置１０３に対して大きい（たとえば、８倍〜６４倍）ブロックサイズでデータ転送を制御するため、ＨＢＡドライバ１１０は、Ｉ／Ｏコマンドｄ、ｆをその入力順でコア＃０に転送する。
【００３５】
このように、ブロックサイズの大きいＩ／Ｏコマンドと小さいＩ／Ｏコマンドが混在する場合、ブロックサイズの大きいＩ／Ｏコマンドの処理に影響して低下していたブロックサイズの小さいＩ／Ｏコマンドの処理性能の向上を図ることができる。これにより、これまで接続ストレージ種やデータベースの特性に応じて複数に分ける必要があったＨＢＡ１０２を一枚に集約できるため、システム導入コストの低減を図ることができる。
【００３６】
また、ＨＢＡドライバ１１０は、Ｉ／Ｏコマンドａ〜ｃ、ｅをコア＃１〜コア＃３に振り分ける。この場合、Ｉ／Ｏコマンドａ〜ｃ、ｅ内で指定されたＬＵ番号に応じて、振分け先のコアが選択される。また、図２の入出力制御例２で示したように、ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンドの連続性およびアクセス種別の同一性により、振分け先として同一コアを選択する。
【００３７】
たとえば、連続するＩ／Ｏコマンド（ａ，ｂ）については、ともにアクセスするアドレスに連続性があり、かつ、アクセス種別が「Ｒ」（リード）とすると、論理ユニットＬＵ＃１に対応するコア＃１に転送される。これにより、複数のコア間のＩ／Ｏコマンドの負荷に偏りなく、並列に動作させることができ、ポート１２０のトランザクション性能の向上を図ることができる。
【００３８】
＜通信システム１００のハードウェア構成例＞
図４は、通信システム１００のハードウェア構成例を示すブロック図である。通信システム１００は、ホスト１０１と、ＨＢＡ１０２と、ストレージ装置４４０と、を有する。ホスト１０１とＨＢＡ１０２は、ＰＣＩバスを介して接続されており、ＨＢＡ１０２の先にはＩ／Ｏインターフェース制御部４３３（ポート１２０に該当）を介してストレージ装置４４０が接続される。ストレージ装置４４０は、１以上の記憶領域を有する。記憶領域とは、Ｉ／Ｏコマンドによりデータのリードまたはライトされる領域である。
【００３９】
たとえば、ストレージ装置４４０がディスク装置１０３の場合、図１に示したように１以上の論理ディスクを有する。また、ストレージ装置４４０は、１以上のテープ装置３０３でもよい。また、ストレージ装置３４０は、図２に示したように、ディスク装置１０３とテープ装置３０３とを含む構成でもよい。また、ストレージ装置３４０は、情報系システム（ＤＷＨ）や業務系システム（ＯＬＴＰ）内のストレージ装置３４０でもよい。なお、ホスト１０１は、アクセス先となるストレージ装置３４０の種類が物理的なディスク装置１０３であってもテープ装置３０３であっても、論理ユニットとして扱う。
【００４０】
ホスト１０１は、ホストＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ホストメモリ４０２と、を有する。ホストＣＰＵ４０１はホスト１０１を制御する。ホストメモリ４０２は、ホストＣＰＵ４０１の作業エリアとなる。また、ホストメモリ４０２は、各種プログラムやデータを記憶する非一時的な記録媒体である。ホストメモリ４０２としては、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、フラッシュメモリがある。
【００４１】
ホストメモリ４０２は、プログラム領域４１０と、ＨＢＡドライバデータ領域４２０と、ＭＭＩＯ空間４３０と、を有する。プログラム領域４１０には、アプリケーション４１１、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）４１２およびＨＢＡドライバ１１０が格納され、ホストＣＰＵ３０１により実行される。また、ＨＢＡドライバ１１０には、通信プロセッサ選択プログラム３１３がある。
【００４２】
ＨＢＡドライバデータ領域４２０には、通信プロセッサ情報群４２１と、接続ＬＵ情報群４２３と、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２と、が格納される。通信プロセッサ情報群４２１は、通信プロセッサごとの通信プロセッサ情報４２１−０〜３２１−Ｎである。通信プロセッサ情報とは、ＨＢＡ１０２内の通信プロセッサ群のうち対応する通信プロセッサを管理する情報である。具体的には、通信プロセッサ情報４２１−０〜４２１−Ｎには、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）がある。実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）は、現在処理中のＩ／Ｏコマンドの数である。実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）の値が大きいほど、その通信プロセッサに負荷がかかっていることを示す。
【００４３】
接続ＬＵ情報群４２３は、論理ユニットごとの接続ＬＵ情報４２３−０〜４２３−Ｎである。接続ＬＵ情報４２３−０〜４２３−Ｎとは、論理ユニットを管理する情報である。具体的には、たとえば、接続ＬＵ情報４２３−０〜４２３−Ｎは、最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ)と、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と、占有割当情報（ｄｅｖ＿ｉｎｆｏ）と、最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）と、を有する。
【００４４】
最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ)は、その論理ユニットに対して実行されたＩ／Ｏコマンドのアクセス種別が書き込み（Ｗ）か読み出し（Ｒ）であったかを示す情報である。
【００４５】
連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）は、その論理ユニットへのアクセスパターンがシーケンシャルであるか否かを判定するための情報である。具体的には、たとえば、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）とは、その論理ユニットへのアクセスアドレスとアクセスするＩ／Ｏコマンドのブロックサイズとの和である。
【００４６】
占有割当情報（ｄｅｖ＿ｉｎｆｏ）は、転送先論理ユニットへのＩ／Ｏコマンドの制御を特定の通信プロセッサに占有割当てさせるための管理情報である。具体的には、たとえば、占有割当てさせる特定の通信プロセッサを一意に特定する識別情報である。
【００４７】
占有割当情報（ｄｅｖ＿ｉｎｆｏ）は、通信システム１００導入時にオペレータがアプリケーション４１１を介してＨＢＡドライバデータ領域３２０に設定するパラメータである。
【００４８】
最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）は、最後に当該論理ユニット宛てにＩ／Ｏコマンドを起動した通信プロセッサを管理する情報である。具体的には、たとえば、最後に当該ＬＵ宛てにＩ／Ｏコマンドを起動した通信プロセッサを一意に特定する識別情報である。
【００４９】
ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２は、Ｉ／Ｏコマンドを制御する通信プロセッサをブロックサイズに応じて占有させる情報である。具体的には、たとえば、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２とは、通信プロセッサに対応付けられたＩ／Ｏコマンドのブロックサイズである。
【００５０】
ＭＭＩＯ空間４３０とは、Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ空間の略であり、ＨＢＡドライバ１１０がＨＢＡ１０２などのＩ／Ｏデバイス内レジスタへアクセスするために用いられるアドレス空間である。
【００５１】
ＨＢＡ１０２は、複数の通信プロセッサ制御部４３０−０〜４３０−Ｎを有する。通信プロセッサ制御部４３０−０〜４３０−Ｎは、Ｉ／Ｏインターフェース制御部４３３を介して、対応する論理ユニットとアクセスする。通信プロセッサ制御部４３０−０〜４３０−Ｎは、Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎと通信プロセッサ４３２−０〜４３２−Ｎとを有する。Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎは、ＨＢＡドライバ１１０からのＩ／Ｏコマンドを保持する。つぎに、ＨＢＡ１０２の内部構成については後述する。
【００５２】
図５は、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２の記憶内容例を示す説明図である。ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２は、ブロックサイズと占有制御プロセッサ番号とを対応付けた情報である。ブロックサイズとは、Ｉ／Ｏコマンドのブロックサイズである。占有制御プロセッサ番号とは、占有制御する通信プロセッサの番号である。占有制御する通信プロセッサとは、対応するブロックサイズのＩ／Ｏコマンドを受け付けた場合に選択される通信プロセッサである。たとえば、Ｉ／Ｏコマンドのブロックサイズが１６［ＫＢ］の場合、通信プロセッサ＃３が占有制御される通信プロセッサである。したがって、当該Ｉ／Ｏコマンドの送出先は、通信プロセッサ＃３となる。また、「未設定」は、占有制御する通信プロセッサが決められていないことを示す。
【００５３】
図６は、ＨＢＡ１０２内の詳細な構成を示す説明図である。Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎは、ＭＭＩＯ空間４３０にマッピングされる。これにより、ＨＢＡドライバ１１０は、Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎにアクセスすることができ、Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎは、ホスト１０１上で動作するＨＢＡドライバ１１０が通信プロセッサに対してＩ／Ｏコマンド実行指示を行うことができる。
【００５４】
ＨＢＡ１０２は、ＨＢＡドライバ１１０から指示されたＩ／ＯコマンドをＩ／Ｏコマンド起動キュー６００に通信プロセッサ毎にスタックし、通信プロセッサ群４３２に対してＩ／Ｏコマンドの起動を通知する。その後、通信プロセッサ群４３２は、Ｉ／Ｏインターフェース制御部４３３を介してストレージ装置４４０にＩ／Ｏコマンドを送出する。
【００５５】
＜ホスト１０１の機能的構成例＞
図７は、ホスト１０１の機能的構成例を示すブロック図である。ホスト１０１である制御装置７００は、複数の記憶領域にアクセスするインターフェースに設けられた複数の記憶領域の各々に対応する複数のプロセッサを制御する制御装置である。複数の記憶領域とは、ストレージ装置４４０内の記憶領域であり、たとえば、ディスク装置１０３やテープ装置３０３の論理ユニットに該当する。複数のプロセッサとは、たとえば、通信プロセッサ群４３２であり、複数の記憶領域にアクセスするインターフェースとは、たとえば、通信プロセッサ群４３２を有するＨＢＡ１０２である。
【００５６】
制御装置７００は、更新部７０１と、選択部７０２と、出力部７０３と、判定部７０４と、記憶部７０５と、を有する。更新部７０１〜判定部７０４は、具体的には、たとえば、図４に示したＨＢＡドライバ１１０をホストＣＰＵ４０１に実行させることにより、その機能を実現する。また、記憶部７０５は、ホストメモリ４０２により、その機能を実現する。
【００５７】
更新部７０１は、各々が複数の記憶領域のいずれかに出力されるコマンド列が入力された場合、複数のプロセッサの各プロセッサが、当該プロセッサに対応する記憶領域に対して実行中であるコマンドによる負荷を更新する。具体的には、たとえば、更新部７０１は、通信プロセッサ情報群４２１の各通信プロセッサ情報３２１−０〜３２１−Ｎに記憶されている実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）を更新する。すなわち、更新部７０１は、通信プロセッサにＩ／Ｏコマンドを発行した場合、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）を１インクリメントし、通信プロセッサから終了通知を受け取った場合に、１デクリメントする。
【００５８】
選択部７０２は、コマンド列の中のいずれかのコマンドについて、更新部７０１によって更新されたプロセッサごとの実行中のコマンドによる負荷に基づいて、いずれかのコマンドの割当先となるプロセッサを複数のプロセッサの中から選択する。具体的には、たとえば、選択部７０２は、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）が最少の通信プロセッサを割当先に選択する。
【００５９】
出力部７０３は、選択部７０２によって選択されたプロセッサに対しいずれかのコマンドを出力する。具体的には、たとえば、出力部７０３は、Ｉ／Ｏインターフェース制御部により、割当先の通信プロセッサに対応する論理ユニットにＩ／Ｏコマンドを送信する。
【００６０】
判定部７０４は、コマンド列のうち第１のコマンドおよび第１のコマンドの直後の第２のコマンドについて、複数の記憶領域のいずれかにアクセスされるアドレスに連続性があり、かつ、アクセス種別が同一であるか否かを判定する。具体的には、たとえば、判定部７０４は、連続するＩ／Ｏコマンドについてアドレスの連続性とアクセス種別の同一性を判定する。
【００６１】
より具体的には、たとえば、判定部７０４は、連続するＩ／Ｏコマンドのうち先行する第１のコマンドの連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と、連続するＩ／Ｏコマンドのうち後続する第２のコマンドのアクセス先アドレスとを比較する。連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）とは、その論理ユニットへのアクセスアドレスとアクセスするＩ／Ｏコマンドのブロックサイズとの和である。一致する場合は、判定部７０４は、第１のコマンドと第２のコマンドとは連続性ありと判定する。
【００６２】
また、判定部７０４は、最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ)を参照して、第１のコマンドのアクセス種別が書き込み（Ｗ）か読み出し（Ｒ）であったかを特定し、第２のコマンドのアクセス種別と一致するか否かを判定する。一致する場合は、判定部７０４は、第１のコマンドと第２のコマンドとはアクセス種別が同一であると判定する。
【００６３】
この場合、選択部７０２は、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）により第２のコマンドの割当先を選択しない。そして、選択部７０２は、判定部７０４によってアクセスされるアドレスに連続性があり、かつ、アクセス種別が同一であると判定された場合、複数のプロセッサのうち第１のコマンドがアクセスした記憶領域に対応するプロセッサを選択する。たとえば、第１のコマンドのアクセス先が論理ユニット＃０である場合、第２のコマンドのアクセス先も論理ユニット＃０となる。ただし、選択部７０２は、アドレスに連続性がない場合、または、アクセス種別に同一性がない場合には、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）により第２のコマンドの割当先を選択することになる。
【００６４】
記憶部７０５は、複数のプロセッサのうち特定のプロセッサの識別情報と、特定のプロセッサのアクセス先となる複数の記憶領域の中の特定の記憶領域の識別情報と、を対応付けた第１の対応情報を記憶する。第１の対応情報とは、接続ＬＵ情報４２３−０〜４２３−Ｎ内の占有割当情報（ｄｅｖ＿ｉｎｆｏ）である。すなわち、特定のプロセッサの識別情報とは、接続ＬＵ情報４２３−０〜４２３−Ｎで特定される論理ユニットの番号であり、特定の記憶領域の識別情報とは、占有割当情報（ｄｅｖ＿ｉｎｆｏ）に記憶された通信プロセッサの番号である。
【００６５】
第１の対応情報を用いる場合、判定部７０４は、第１の対応情報を参照して、第２のコマンドが保持する第２のコマンドのアクセス先の記憶領域の識別情報と、特定の記憶領域の識別情報とが一致するか否かを判定する。そして、選択部７０２は、判定部７０４によって、第２のコマンドのアクセス先の記憶領域の識別情報と、特定の記憶領域の識別情報とが一致すると判定された場合、特定のプロセッサを選択する。
【００６６】
たとえば、連続するＩ／Ｏコマンドのうち後続である第２のコマンドのアクセス先が論理ユニット＃０であり、特定の記憶領域が論理ユニット＃０である場合、選択部７０２は、第２のコマンドの割当先として、論理ユニット＃０の接続ＬＵ情報４２３−０の占有割当情報（ｄｅｖ＿ｉｎｆｏ）に記憶された通信プロセッサの番号で指定される通信プロセッサを選択する。
【００６７】
また、記憶部７０５は、複数のプロセッサのうち特定のプロセッサの識別情報と、特定のプロセッサがアクセス先に出力するコマンドのサイズと、を対応付けた第２の対応情報を記憶する。第２の対応情報とは、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２である。
【００６８】
第２の対応情報を用いる場合、判定部７０４は、第２の対応情報を参照して、第２のコマンドのサイズと特定のプロセッサがアクセス先に出力するコマンドのサイズとが一致するか否かを判定する。そして、選択部７０２は、判定部７０４によって、第２のコマンドのサイズと特定のプロセッサがアクセス先に出力するコマンドのサイズとが一致すると判定された場合、特定のプロセッサを選択する。
【００６９】
たとえば、連続するＩ／Ｏコマンドのうち後続である第２のコマンドのブロックサイズが１６．０［ＫＢ］であり、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２においてブロックサイズが１６．０［ＫＢ］に対応する通信プロセッサの番号が「３」である場合、選択部７０２は、第２のコマンドの割当先として、通信プロセッサ＃３を選択する。
【００７０】
＜通信システム１００のシーケンス＞
図８は、通信システム１００のシーケンスを示す説明図である。なお、アプリケーション４１１、ＯＳ４１２、ＨＢＡドライバ１１０といったプログラムを主語として説明を行う場合があるが、プログラムはホストＣＰＵ４０１によって実行されることで定められた処理を、ホストメモリ４０２を用いながら行うため、ホストＣＰＵ４０１を主語とした説明と同義とする。
【００７１】
まず、アプリケーション４１１は、ＯＳ４１２に対してストレージ装置４４０への送受信要求を実行する（ステップＳ８０１）。その要求を受信したＯＳ４１２は、ＨＢＡドライバ１１０に対してＩ／Ｏコマンドを発行する（ステップＳ８０２）。ＨＢＡドライバ１１０の通信プロセッサ選択プログラム４１３は、Ｉ／Ｏコマンドを起動する通信プロセッサ選択処理を実行する（ステップＳ８０３）。ステップＳ８０３で選択された通信プロセッサを「選択通信プロセッサ」と称す。通信プロセッサ選択処理（ステップＳ８０３）の詳細については、図７で後述する。
【００７２】
ＨＢＡドライバ１１０は、出力部７０３により、選択通信プロセッサに対してＩ／Ｏコマンドを発行する（ステップＳ８０４）。Ｉ／Ｏコマンド発行後、ＨＢＡドライバ１１０は、更新部７０１により、Ｉ／Ｏコマンドの転送先論理ユニットにおける接続ＬＵ情報である連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と、最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ)と、最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）とを更新する（ステップＳ８０５）。
【００７３】
具体的には、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）は、当該論理ユニットへのアクセスアドレスとアクセスブロックサイズとの和に更新される。最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ)は、ステップＳ８０４で発行したＩ／Ｏコマンドが書き込みである場合は書込み（Ｗ）、読み出しである場合は読み出し（Ｒ）を示す制御情報に更新される。最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）は、通信プロセッサ選択処理（ステップＳ８０３）で選択された選択通信プロセッサの番号に更新される。
【００７４】
そして、ＨＢＡドライバ１１０は、選択通信プロセッサにおいて現在実行中のＩ／Ｏコマンドの数を更新する（ステップＳ８０６）。具体的には、選択通信プロセッサにて現在実行中のＩ／Ｏコマンドの数を示す実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）に、ステップＳ８０４でＩ／Ｏコマンドを発行した分（１個）が加算される。なお、Ｉ／Ｏコマンド完了通知を選択通信プロセッサより受信すると、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）は減算される。
【００７５】
図９は、図８に示した通信プロセッサ選択処理（ステップＳ８０３）の詳細な処理手順例を示すフローチャートである。まず、ＨＢＡドライバ１１０は、判定部７０４により、ステップＳ８０２でＯＳ４１２から発行されたＩ／Ｏコマンド（以下、起動コマンド）のブロックサイズが、特定の通信プロセッサに占有制御される設定であるか否かを判断する（ステップＳ９０１）。具体的には、たとえば、ＨＢＡドライバ１１０は、図４に示したブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）３２２を参照して判断する。
【００７６】
すなわち、ブロックサイズに対応する占有制御プロセッサ番号が「未設定」の場合はステップＳ９０１：Ｎｏとなり、占有制御プロセッサ番号が有る場合はステップＳ９０１：Ｙｅｓとなる。ステップＳ９０１：Ｙｅｓの場合は、ステップＳ９０３に移行し、ＨＢＡドライバ１１０は、選択部７０２により、占有制御プロセッサ番号の通信プロセッサを選択する（ステップＳ９０３）。
【００７７】
ステップＳ９０１：Ｎｏの場合、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドの転送先論理ユニットが、特定の通信プロセッサに占有制御される設定であるか否かを判断する（ステップＳ９０２）。具体的には、たとえば、ＨＢＡドライバ１１０は、転送先論理ユニットの占有割当情報（ｄｅｖ＿ｉｎｆｏ）を参照して判断する。すなわち、転送先論理ユニットの占有割当情報（ｄｅｖ＿ｉｎｆｏ）に占有制御プロセッサ番号が「未設定」の場合はステップＳ９０２：Ｎｏとなり、占有制御プロセッサ番号が有る場合はステップＳ９０２：Ｙｅｓとなる。ステップＳ９０２：Ｙｅｓの場合は、ステップＳ９０３に移行し、ＨＢＡドライバ１１０は、選択部７０２により、占有制御プロセッサ番号の通信プロセッサを選択する（ステップＳ９０３）。
【００７８】
ＨＢＡ１０２に接続されているＬＵがディスク装置１０３とテープ装置２０３である場合、テープ装置２０３のＬＵに対するＩ／Ｏコマンド制御を特定の通信プロセッサに占有割り当てすることで一つのＨＢＡ１０２の先にテープ装置２０３とディスク装置１０３を接続した場合に発生する性能低下を防ぐことができる。
【００７９】
ステップＳ９０１：Ｎｏの場合、ＨＢＡドライバ１１０は、判定部７０４により、アクセス判定処理を実行する（ステップＳ９０４）。アクセス判定処理（ステップＳ９０４）の詳細については図８で後述するが、アクセス判定処理（ステップＳ９０４）では、転送先論理ユニットに対するアクセスがシーケンシャルアクセスであるか否かが判定される。
【００８０】
転送先論理ユニットに対するアクセスがシーケンシャルアクセスである場合（ステップＳ９０５：Ｙｅｓ）、ステップＳ９０６に移行し、シーケンシャルアクセスでない場合（ステップＳ９０５：Ｎｏ）、ステップＳ９０７に移行する。
【００８１】
シーケンシャルアクセスである場合（ステップＳ９０５：Ｙｅｓ）、ＨＢＡドライバ１１０は、選択部７０２により、最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）を参照して、転送先論理ユニットに対して最後にＩ／Ｏコマンドを発行した通信プロセッサを特定し、当該通信プロセッサを選択する（ステップＳ９０６）。
【００８２】
一方、シーケンシャルアクセスでない場合（ステップＳ９０５：Ｎｏ）、ＨＢＡドライバ１１０は、選択部７０２により、複数の通信プロセッサのうち、滞留中のＩ／Ｏコマンドの負荷が最も少ない通信プロセッサを選択する（ステップＳ９０７）。たとえば、ＨＢＡドライバ１１０は、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）が最少の通信プロセッサを選択する。
【００８３】
図１０は、図９に示したアクセス判定処理（ステップＳ９０４）の詳細な処理手順例を示すフローチャートである。まず、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドが転送先論理ユニットに対して最後に実行したアクセス種別と同一種別であるか否かを判定する（ステップＳ１００１）。具体的には、ＨＢＡドライバ１１０は、起動コマンドのアクセス種別と最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ)で特定されるアクセス種別とが一致するか否かを判定することになる。同一種別でない場合（ステップＳ１００１：Ｎｏ）、ＨＢＡドライバ１１０は、起動コマンドがランダムアクセスであると判定する（ステップＳ１００４）。ランダムアクセスであるため、ステップＳ１００４に移行する。
【００８４】
一方、同一種別である場合（ステップＳ１００１：Ｙｅｓ）、シーケンシャルアクセスであるため、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドが転送先論理ユニットにて最後に実行されたアドレスと連続するか否かを判定する（ステップＳ１００２）。具体的には、ＨＢＡドライバ１１０は、転送先論理ユニットに対して最後に実行したＩ／Ｏコマンドのアドレスとそのブロックサイズから計算された連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）を参照して、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と起動コマンドのアドレスとが一致するかを判定する。
【００８５】
一致する場合（ステップＳ１００２：Ｙｅｓ）、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドがシーケンシャルアクセスであると判定し（ステップＳ１００３）、不一致の場合（ステップＳ１００２：Ｎｏ）、起動コマンドがランダムアクセスであると判定する（ステップＳ１００４）。ステップＳ１００３、Ｓ１００４のあとは、ステップＳ９０５に移行して、アクセス判定処理（ステップＳ９０４）を終了する。
【００８６】
なお、ステップＳ１００２において、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と起動コマンドのアドレスとが一致した場合を例に説明したが、ストレージ装置４４０におけるシーケンシャルアクセス判定アルゴリズムはアクセスアドレスが連続していなかった場合にも動作する場合がある。
【００８７】
たとえば、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）から数百バイトの範囲内であればストレージ装置４４０ではシーケンシャルアクセスとみなして動作する場合がある。したがって、ＨＢＡドライバ１１０によるアドレス判定方法はこの数百バイト以内のアドレスのずれであれば、シーケンシャルアクセスとみなす判定としてもよい。また、このアドレス範囲のずれをパラメータ化し、接続されるストレージ装置４４０のシーケンシャルアクセスアルゴリズムに応じて変更可能な方法をとってもよい。
【００８８】
このように、本実施例では、ＨＢＡ１０２を制御するＨＢＡドライバ１１０が通信プロセッサ毎のＩ／Ｏ負荷やストレージ装置４４０へのアクセス種別、アクセスアドレス、ブロックサイズによりＩ／Ｏ特性を判定し、Ｉ／Ｏコマンドを起動する通信プロセッサを選択する。これにより、ＨＢＡ１０２のトランザクション性能の向上を図ることができる。また、接続されるＬＵへのＩ／Ｏコマンド処理を特定の通信プロセッサに占有制御させることで、性能ボトルネックのないデータ転送を実現することができる。
【００８９】
なお、本発明は上述した実施例に限定されるものではなく、様々な変形例が含まれる。たとえば、上述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、説明した全ての構成を備えるものに限定するものでない。また、図６〜図８で説明した処理順序を適宜入れ替えて実現してもよい。
【００９０】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【図１】
0005969122.tif 000002
【図２】
0005969122.tif 000003
【図３】
0005969122.tif 000004
【図４】
0005969122.tif 000005
【図５】
0005969122.tif 000006
【図６】
0005969122.tif 000007
【図７】
0005969122.tif 000008
【図８】
0005969122.tif 000009
【図９】
0005969122.tif 000010
【図１０】
0005969122.tif 000011