(57)【要約】  ホストメモリ及び複数のホストプロセッサを含むホスト計算機と、ストレージ装置と、前記ホスト計算機及び前記ストレージ装置に接続され、複数の通信プロセッサを含むインターフェースデバイスと、を含む計算機システムに於いて、前記ホストメモリの一部の領域である第１ホストメモリ領域と、前記複数のホストプロセッサの少なくとも１つと、前記複数の通信プロセッサの少なくとも１つと、を占有して割り当てる対象である第１論理パーティションを作成する。
2016056140.tif 000002
【特許請求の範囲】
【請求項１】
ホストメモリ及び複数のホストプロセッサを含むホスト計算機と、ストレージ装置と、前記ホスト計算機及び前記ストレージ装置に接続され、複数の通信プロセッサを含むインターフェースデバイスと、を含む計算機システムであって、
前記ホスト計算機は、前記ホストメモリの一部の領域である第１ホストメモリ領域と、前記複数のホストプロセッサの少なくとも１つと、前記複数の通信プロセッサの少なくとも１つと、を占有して割り当てる対象である第１論理パーティションを作成する、
計算機システム。
【請求項２】
請求項１記載の計算機システムであって、
前記計算機システムはさらに、管理計算機を含み、
前記管理計算機は：
（１）前記管理計算機のユーザインターフェースから、ユーザ入力を受信し、
（２）前記ユーザ入力に基づいて前記第１論理パーティションに割り当てる通信プロセッサを前記複数の通信プロセッサから選択し、
（３）前記選択した通信プロセッサを前記第１論理パーティションへ割り当てる第１要求を、前記ホスト計算機に送信する、
計算機システム。
【請求項３】
請求項２記載の計算機システムであって、
前記ストレージ装置は、前記ホスト計算機が発行したＩ／Ｏコマンドを処理するための複数のストレージリソースを含み、
前記管理計算機は：
（４）前記ユーザ入力に基づいて、前記第１論理パーティションに割り当てるストレージリソースを前記複数のストレージリソースから選択し、
（５）前記選択したストレージリソースを前記第１論理パーティションへ占有して割り当てる第２要求を前記ストレージ装置に送信し、
（６）前記選択したストレージリソースを前記第１論理パーティションに割り当てる第３要求を前記ホスト計算機に送信する、
計算機システム。
【請求項４】
請求項３記載の計算機システムであって、
前記（１）は前記ユーザ入力に基づいて単位時間当たりのＩ／Ｏコマンド数に関する第１要件を計算することを含み、
前記（２）及び前記（４）の選択は、前記第１要件を満たすために必要な通信プロセッサの数を計算し、又前記第１要件を満たすためのストレージリソースの数又は量を計算する、ことを含む、
計算機システム。
【請求項５】
請求項３記載の計算機システムであって、
前記管理計算機は：
（７）前記複数のストレージリソースの少なくとも一部を、共有ストレージリソースとして管理し、
前記（４）の選択が占有割り当てである場合は、前記共有ストレージリソースを選択の対象外とする、
計算機システム。
【請求項６】
請求項２記載の計算機システムであって、
前記第１論理パーティション、又は前記第１論理パーティションを生成するハイパーバイザは、前記インターフェースデバイスのデバイスドライバを実行し、
前記ホスト計算機は：
（Ａ）前記第１要求を受信し、
（Ｂ）前記デバイスドライバに対して、前記第１要求で割り当てられた通信プロセッサの識別子を送信し、
前記デバイスドライバは、
（Ｃ）前記割り当てられた通信プロセッサの識別子を受信し、
（Ｄ）前記第１論理パーティションにて実行するアプリケーションまたはＯＳからＩ／Ｏコマンドを受信した場合は、前記受信した識別子に基づいて、Ｉ／Ｏコマンドを送信する通信プロセッサを選択し、
（Ｅ）前記（Ｄ）で選択した通信プロセッサに対応するＭＭＩＯ空間のレジスタにアクセスすることで、前記割り当てられた通信プロセッサに対してＩ／Ｏコマンドを送信する、
計算機システム。
【請求項７】
請求項６記載の計算機システムであって、
前記デバイスドライバが前記ＬＰＡＲで実行される場合は、複数の論理パーティションの各々で前記デバイスドライバが実行され、
前記管理計算機は、各ＬＰＡＲで実行されている前記デバイスドライバに対して異なる通信プロセッサの識別子を送信することで、占有使用を各ＬＰＡＲに設定する、
計算機システム。
【請求項８】
請求項６記載の計算機システムであって、
前記ハイパーバイザは：
前記第１論理パーティションに対してストレージ装置が提供する所定のＬＵを占有で割り当て、
前記第１論理パーティションに対して前記所定のＬＵに対してＩ／Ｏコマンドが送信できる仮想インターフェースデバイスを提供し、
前記デバイスドライバを実行し、
前記管理計算機は：
前記第１論理パーティションに対して占有割り当てしたＬＵの識別子と、前記（Ｃ）で受信した通信プロセッサの識別子と、に基づいて占有割り当てしたＬＵの識別子と通信プロセッサの識別子との対応リストを生成し、
前記生成した対応リストを前記デバイスドライバに送信し、
前記デバイスドライバは：
前記仮想インターフェースデバイスを介して受信したＩ／Ｏコマンドを前記ハイパーバイザから受信し、
前記Ｉ／Ｏコマンドに指定されたＬＵと、前記受信した対応リストに基づいて前記（Ｄ）の選択を行う、
計算機システム。
【請求項９】
請求項１記載の計算機システムであって、
前記ホスト計算機は、下記（ｉ）乃至（ｉｉｉ）を占有して割り当てる第２論理パーティションを作成し：
（ｉ）前記第１ホストメモリ領域以外の前記ホストメモリの一部の領域である第２ホストメモリ領域と、
（ｉｉ）前記第１論理パーティションに割り当てた以外の前記複数のホストプロセッサの少なくとも１つと、
（ｉｉｉ）前記第１論理パーティションに割り当てた以外の前記複数の通信プロセッサの少なくとも１つ、
前記第１論理パーティションにて実行する第１アプリケーションと、前記第２論理アプリケーションにて実行する第２アプリケーションとは、Ｉ／Ｏコマンドが対象とする転送データ長の平均値が異なる、
計算機システム。
【請求項１０】
請求項１記載の計算機システムであって、
前記第１論理パーティションは、前記複数の通信プロセッサが割り当てられており、デバイスドライバと、ＯＳと、アプリケーションと、を実行し、
前記デバイスドライバは、前記アプリケーションまたは前記ＯＳからＩ／Ｏコマンドを受信した場合は、少なくとも前記Ｉ／Ｏコマンドが対象とする転送データ長に基づいて、送信先となる通信プロセッサを前記複数の通信プロセッサから選択する、
計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｉ／Ｏコマンドを処理するインターフェースデバイスと、インターフェースデバイスを含み、論理パーティショニング機能を含む計算機システムと、に関する。
【背景技術】
【０００２】
Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ（ＨＢＡ）に搭載されるプロトコルチップは、接続プロトコルをオフロードするための通信プロセッサが実装されるのが一般的であるが、接続スピードの高速化及び仮想化技術の台頭によりＨＢＡにかかる負荷は増加傾向にある。プロトコルチップ内の通信プロセッサの処理性能が性能ボトルネックになるため、一つのファイバチャネルポートを複数の通信プロセッサにて制御する方法がある（たとえば、下記特許文献１を参照。）。特許文献１の方法は、ＨＢＡ上に複数の通信プロセッサを備え、ファイバチャネルポートで受信したフレームを複数のプロトコル制御回路で並列に制御する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開ＷＯ２０１３／００１５７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の方法では、ホスト上で動作し複数の通信プロセッサを制御するドライバが、Ｉ／Ｏコマンドの負荷をＨＢＡ上に備えられた複数の通信プロセッサ間を分散するが、分散される負荷にばらつきがあるという問題がある（第１の問題）。負荷にばらつきがあるため、通信プロセッサ数が増加してもトランザクション性能の向上を阻害することになる。【０００５】
また、複数の通信プロセッサにＩ／Ｏコマンドの負荷が均一に分散したとしても、ストレージ装置へのＩ／ＯコマンドのＩ／Ｏ特性がシーケンシャルの場合、トランザクション性能が低下するという問題がある（第２の問題）。ストレージへのアクセスは、ブロックという単位で制御され、Ｉ／Ｏ特性に応じて性能が異なる。ここで言うＩ／Ｏ特性とは、ストレージ装置へのアクセスパターンがシーケンシャルかランダムかということである。【０００６】
シーケンシャルアクセスでは、ブロックが連続して読み書きされ、ランダムアクセスでは細かなブロックをばらばらに読み書きする。同じデータ転送量でもシーケンシャルアクセスとランダムアクセスではストレージに対する読み書き要求数が異なり、例えば合計４０［ＫＢ］のデータ量で、ブロックのサイズが４［ＫＢ］の場合、シーケンシャルアクセスならばストレージ装置でのディスクへの読み書き要求数は１回、ランダムらなら４［ＫＢ］で１０回といった具合となる。【０００７】
ストレージ装置にはシーケンシャルな読み出し、書き込みコマンドが連続した場合に、シーケンシャルアクセスを効率化するアルゴリズムが実装されるのが一般的であり、シーケンシャル性が崩れるとストレージ装置の応答性能が低下する。【０００８】
また、ストレージ装置へのアクセスにおいてブロックサイズが小さいＩ／Ｏコマンドと大きいＩ／Ｏコマンドが混在した場合に、ブロックサイズが小さいＩ／Ｏコマンドによりトランザクション性能が低下するという問題がある（第３の問題）。ＨＢＡの同一ポートに接続されるファイバチャネルスイッチを介してテープ装置とディスク装置が接続された場合を例にあげて説明する。【０００９】
ストレージはブロックと呼ばれる単位でデータ転送を制御しているが、テープ装置はディスク装置に対して大きい（たとえば、８倍〜６４倍）ブロックサイズでデータ転送を制御する。よって、テープ装置に対するＩ／Ｏコマンド処理とディスク装置に対するＩ／Ｏコマンド処理を同一の通信プロセッサに要求した場合、ブロックサイズの大きいテープ装置のＩ／Ｏコマンドの処理時間が増大し、ファイバチャネルポートを共有しているブロックサイズの小さいディスク装置へのＩ／Ｏコマンド処理に待ち時間が発生し、性能低下を招く。【００１０】
第３の問題に対しては、これまでディスク装置とテープ装置に接続されるＨＢＡを分けるシステム設計によりテープ装置専用の通信帯域を確保し、システム全体の性能ボトルネックとならないような手法をとってきた。しかしながら、テープ専用のＨＢＡを導入する必要があるため導入コストが増大してしまう。【００１１】
第３の問題については接続先デバイスとしてテープ装置とディスク装置が混在した場合に限ったものではなく、ストレージ装置に格納されるデータベースの特性に依存しても発生する。同一ポートに接続されるストレージ装置内に業務系システム（ＯＬＴＰ）と情報系システム（ＤＷＨ）が混在した場合を例にあげて説明する。【００１２】
ＯＬＴＰとはオンライントランザクション処理のことで、ネットワークで接続されたホストとユーザ端末間の間で一連の処理を行うための仕組みであり、一般にデータの入力と検索のトランザクションを扱う。一回のＩ／Ｏコマンドで処理されるブロックサイズは小さく（数キロバイト）、高速なレスポンス性能が求められる。【００１３】
それに対し、ＤＷＨ（データウェアハウス）とは近年のビックデータに代表されるような大量の業務データの中から、各項目間の関連性を分析するシステムのことである。ＤＷＨでは、Ｉ／Ｏコマンドのブロックサイズは大きく（数十キロバイト以上）レスポンス性能よりもスループット性能が求められる。【００１４】
このように、ＯＬＴＰはブロックサイズの小さいＩ／Ｏコマンドであるのに対し、ＤＷＨではブロックサイズの大きいＩ／Ｏコマンドで制御されることから、ＨＢＡの同一ポートにディスク装置とテープ装置を接続した場合に発生する問題と同様の問題が発生する。すなわち、ＯＬＴＰとＤＷＨのＩ／Ｏコマンド処理を同一の通信プロセッサに要求した場合、Ｉ／Ｏコマンドのブロックサイズの大きいＤＷＨの処理時間が増大することによりＩ／Ｏコマンドのブロックサイズの小さいＯＬＴＰ処理に待ち時間が発生する。このため、ＯＬＴＰに求められるレスポンス性能が低下する。【００１５】
また、別な視点から見た場合、特許文献１記載の技術では、ホスト上に作成された論理パーティション（以後、ＬＰＡＲと呼ぶ）に対してどのように通信プロセッサを割り当てるべきか開示していない。【００１６】
本発明は、上述した問題を解決するため、ストレージ装置に対する処理性能の向上を図ることを目的とする。
【課題を解決するための手段】
【００１７】
本願において開示される発明の一側面となる計算機システムは、ホストメモリ及び複数のホストプロセッサを含むホスト計算機と、ストレージ装置と、前記ホスト計算機及び前記ストレージ装置に接続され、複数の通信プロセッサを含むインターフェースデバイスと、を含む計算機システムであって、前記ホスト計算機は、前記ホストメモリの一部の領域である第１ホストメモリ領域と、前記複数のホストプロセッサの少なくとも１つと、前記複数の通信プロセッサの少なくとも１つと、を占有して割り当てる対象である第１論理パーティションを作成することを特徴とする。
【発明の効果】
【００１８】
本発明の代表的な実施の形態によれば、ストレージ装置に対する処理性能の向上を図ることができる。前述した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【００１９】
【図１】実施例１にかかるホストによる入出力制御例１を示す説明図である。
【図２】実施例１にかかるホストによる入出力制御例２を示す説明図である。
【図３】実施例１にかかるホストによる入出力制御例３を示す説明図である。
【図４】通信システムのハードウェア構成例を示すブロック図である。
【図５】ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）の記憶内容例を示す説明図である。
【図６】ＨＢＡ内の詳細な構成を示す説明図である。
【図７】ホストの機能的構成例を示すブロック図である。
【図８】通信システムのシーケンスを示す説明図である。
【図９】図８に示した通信プロセッサ選択処理（ステップＳ８０３）の詳細な処理手順例を示すフローチャートである。
【図１０】図９に示したアクセス判定処理（ステップＳ９０４）の詳細な処理手順例を示すフローチャートである。
【図１１】実施例２の計算機システムの構成を示す図である。
【図１２】実施例２のリソース割り当てを示す図である。
【発明を実施するための形態】
【００２０】
以下に実施例について説明する。なお、以下の例ではファイバーチャネルＨＢＡを対象として説明するが、ホストとストレージ装置間の接続はファイバーチャネル以外であってもよい。これには例えばＩｎｆｉｎｉＢａｎｄ、Ｅｔｈｅｒｎｅｔ、ＰＣＩ−Ｅｘｐｒｅｓｓがある。ＨＢＡについても一例であり、実施例に開示の技術はホストをストレージ装置に接続する際のインターフェースデバイスであれば適用できる。なお、以後の説明にて登場する通信プロセッサ同士でハードウェア回路の共有が無い方が並列動作の観点上は望ましいが必須ではない。例えば、Ｉｎｔｅｌ社のＨｙｐｅｒ−Ｔｈｒｅａｄｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙといった技術で提供される複数コアの各々を通信プロセッサとしてみなしてもよい。また、通信プロセッサにはコアが対応してもよいことはいうまでもない。これらはホストＣＰＵ４０１及びストレージプロセッサについても同様である。
【実施例１】
【００２１】
実施例１では、ホストは、ＨＢＡ内の複数の通信プロセッサを制御するドライバにて通信プロセッサ毎のＩ／Ｏ負荷やストレージ装置への要求Ｉ／Ｏコマンド種、アクセスアドレスによりＩ／Ｏ特性を判定する。また、サーバは、接続ＬＵへのＩ／Ｏコマンドや特定のブロックサイズのＩ／Ｏコマンドを任意の通信プロセッサに占有制御させ、Ｉ／Ｏコマンドを処理する通信プロセッサを選択する。【００２２】
これにより、複数の通信プロセッサ間のＩ／Ｏコマンドの負荷に偏りなく、並列に動作させることができ、ファイバチャネルポートのトランザクション性能の向上を図ることができる。また、ＨＢＡに接続されるストレージ装置に対するブロックサイズの大きいＩ／Ｏコマンドと小さいＩ／Ｏコマンドが混在する場合、これまでブロックサイズの大きいＩ／Ｏコマンド処理に影響してブロックサイズの小さいＩ／Ｏコマンドの処理性能の低下を抑制する。これにより、これまで接続ストレージ種やデータベースの特性に応じて分ける必要があったＨＢＡを一枚に集約できるため、システム導入コストの低減を図ることができる。以下、本発明の実施例について図面を用いて説明する。【００２３】
＜入出力制御例１＞
図１は、実施例１にかかるホストによる入出力制御例１を示す説明図である。入出力制御例１は、Ｉ／Ｏコマンドの負荷をＨＢＡ上に備えられた複数の通信プロセッサ間を均一に分散させるロードバランス方式により、トランザクション性能の向上を図る。【００２４】
図１において、通信システム１００は、ホスト１０１と、ＨＢＡ１０２と、ストレージ装置の一例であるディスク装置１０３と、を有する。ホスト１０１は、ＨＢＡ１０２を制御するＨＢＡドライバ１１０を有し、ＨＢＡ１０２は、複数のコア＃０〜＃３、およびポート１２０を有し、ディスク装置１０３にＩ／Ｏコマンドを転送する。実施例１では、一例としてコアの数を４個としているが、４個に限定されず、２個以上であればよい。ホスト１０１には、Ｉ／ＯコマンドＡ〜Ｅがアルファベット順に入力されるものとする。【００２５】
ディスク装置１０３は、複数の論理ユニットＬＵ＃０〜ＬＵ＃３を有する。実施例１では、一例として論理ユニットの数を４個としているが、４個に限定されず、２個以上であればよい。また、コアの数と同数でなくてもよい。【００２６】
ホスト１０１は、複数のコア＃０〜＃３の負荷の状態を見て各Ｉ／ＯコマンドＡ〜Ｅの割当先となるコアを選択する。コア＃１〜＃３内の黒塗矩形は、Ｉ／ＯコマンドＡ〜Ｅよりも先に入力されたＩ／Ｏコマンドである。ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＡの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃０に割り当てる。つぎに、ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＢの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃０〜２のいずれかに割り当てる。割当先候補が複数ある場合は、番号の若いコアが選択されるものとする。【００２７】
つぎに、ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＣの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃１に割り当て、その次のＩ／ＯコマンドＤの割当先を、先行するＩ／Ｏコマンドの数が最少であるコア＃１に割り当てる。このように、実行中のＩ／Ｏコマンドが多いとそれだけコアに負荷がかかるため、ＨＢＡドライバ１１０は、実行中のＩ／Ｏコマンドの数が最少のコアを選択して、Ｉ／Ｏコマンドを出力する。これにより、Ｉ／Ｏコマンドの負荷をＨＢＡ上に備えられた複数の通信プロセッサ間を均一に分散させることで、トランザクション性能の向上を図ることができる。【００２８】
＜入出力制御例２＞
図２は、実施例１にかかるホストによる入出力制御例２を示す説明図である。入出力制御例２は、ストレージ装置へのＩ／ＯコマンドのＩ／Ｏ特性がシーケンシャルの場合にトランザクション性能の向上を図る。【００２９】
図２において、ホスト１０１には、Ｉ／ＯコマンドＡ〜Ｅがアルファベット順に入力されるものとする。コマンド内のデータも、コマンドと同一符号を用いる。たとえば、コマンドＡ内のデータをデータＡとする。データにはＬＵ番号およびＲ／Ｗが付随する。ここでは、データ、ＬＵ番号およびＲ／Ｗの組み合わせで１つのＩ／Ｏコマンドとなる。【００３０】
ＬＵ番号とは、そのデータのアクセス先となるディスク装置１０３内の論理ユニットを一意に特定する識別情報である。たとえば、ＬＵ番号が「０」のＩ／Ｏコマンドは、ディスク装置１０３の論理ユニットＬＵ＃０に出力される。Ｒ／Ｗは、そのＩ／Ｏコマンドがリードコマンドであるかまたはライトコマンドであるかというアクセス種別である。【００３１】
ＨＢＡドライバ１１０は、Ｉ／ＯコマンドＡ、Ｂ、Ｃ、Ｄ、Ｅの順に取り込む。ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンドの連続性およびアクセス種別の同一性を判定する。連続するＩ／Ｏコマンド（Ａ，Ｂ）については、ともにアクセス種別が「Ｒ」（リード）である。アクセスするアドレスが連続していると判定された場合、連続するＩ／Ｏコマンド（Ａ，Ｂ）は、同一のコアで処理される。本例の場合、ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンド（Ａ，Ｂ）をコア＃０に渡し、コア＃０はポート１２０を介して、連続するＩ／Ｏコマンド（Ａ，Ｂ）をＩ／ＯコマンドＡ，Ｂの順で論理ユニットＬＵ＃０に転送する。【００３２】
また、ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンド（Ｂ，Ｃ）、（Ｃ，Ｄ）、（Ｄ，Ｅ）についても同様に判定する。ＨＢＡドライバ１１０は、図１に示したようなロードバランス方式にしたがって、Ｉ／ＯコマンドＣをコア＃１に、Ｉ／ＯコマンドＤをコア＃２に、Ｉ／ＯコマンドＥをコア＃３に割り当てる。【００３３】
そして、コア＃１は、Ｉ／ＯコマンドＣを論理ユニットＬＵ＃１に転送し、コア＃２は、Ｉ／ＯコマンドＤを論理ユニットＬＵ＃２に転送し、コア＃３は、Ｉ／ＯコマンドＥを論理ユニットＬＵ＃３に転送する。これにより、複数のコア間のＩ／Ｏコマンドの負荷に偏りなく、並列に動作させることができ、ポート１２０のトランザクション性能の向上を図ることができる。【００３４】
＜入出力制御例３＞
図３は、実施例１にかかるホスト１０１による入出力制御例３を示す説明図である。入出力制御例３は、ストレージ装置へのアクセスにおいてブロックサイズが小さいＩ／Ｏコマンドと大きいＩ／Ｏコマンドが混在した場合に、ブロックサイズが小さいＩ／Ｏコマンドによるトランザクション性能の向上を図る。入出力制御例３では、ストレージ装置の一例として、ＨＢＡ１０２のポート１２０に接続されるファイバチャネルスイッチ（不図示）を介してテープ装置３０３とディスク装置１０３が接続された場合を例にあげて説明する。なお、テープ装置３０３を情報系システム（ＤＷＨ）に、ディスク装置１０３を業務系システム（ＯＬＴＰ）に置き換えてもよい。【００３５】
図３では、コア＃０がテープ装置３０３専用の通信プロセッサであり、コア＃１〜＃３がディスク装置１０３専用の通信プロセッサとする。Ｉ／Ｏコマンド列３００のうちＩ／Ｏコマンドａ〜ｃ、ｅは、ブロックサイズが小さいＩ／Ｏコマンドであり、Ｉ／Ｏコマンドｄ、ｆは、ブロックサイズが大きいＩ／Ｏコマンドである。【００３６】
ホスト１０１内のＨＢＡドライバ１１０は、順次入力されてくるＩ／Ｏコマンドａ〜ｆのブロックサイズから転送先のコアを選択する。テープ装置２０３はディスク装置１０３に対して大きい（たとえば、８倍〜６４倍）ブロックサイズでデータ転送を制御するため、ＨＢＡドライバ１１０は、Ｉ／Ｏコマンドｄ、ｆをその入力順でコア＃０に転送する。【００３７】
このように、ブロックサイズの大きいＩ／Ｏコマンドと小さいＩ／Ｏコマンドが混在する場合、ブロックサイズの大きいＩ／Ｏコマンドの処理に影響して低下していたブロックサイズの小さいＩ／Ｏコマンドの処理性能の向上を図ることができる。これにより、これまで接続ストレージ種やデータベースの特性に応じて複数に分ける必要があったＨＢＡ１０２を一枚に集約できるため、システム導入コストの低減を図ることができる。【００３８】
また、ＨＢＡドライバ１１０は、Ｉ／Ｏコマンドａ〜ｃ、ｅをコア＃１〜コア＃３に振り分ける。この場合、Ｉ／Ｏコマンドａ〜ｃ、ｅ内で指定されたＬＵ番号に応じて、振分け先のコアが選択される。また、図２の入出力制御例２で示したように、ＨＢＡドライバ１１０は、連続するＩ／Ｏコマンドの連続性およびアクセス種別の同一性により、振分け先として同一コアを選択する。【００３９】
たとえば、連続するＩ／Ｏコマンド（ａ，ｂ）については、ともにアクセスするアドレスに連続性があり、かつ、アクセス種別が「Ｒ」（リード）とすると、論理ユニットＬＵ＃１に対応するコア＃１に転送される。これにより、複数のコア間のＩ／Ｏコマンドの負荷に偏りなく、並列に動作させることができ、ポート１２０のトランザクション性能の向上を図ることができる。【００４０】
＜通信システム１００のハードウェア構成例＞
図４は、通信システム１００のハードウェア構成例を示すブロック図である。通信システム１００は、ホスト１０１と、ＨＢＡ１０２と、ストレージ装置４４０と、を有する。ホスト１０１とＨＢＡ１０２は、ＰＣＩバスを介して接続されており、ＨＢＡ１０２の先にはＩ／Ｏインターフェース制御部４３３（ポート１２０に該当）を介してストレージ装置４４０が接続される。ストレージ装置４４０は、１以上の記憶領域を有する。記憶領域とは、Ｉ／Ｏコマンドによりデータのリードまたはライトされる領域である。【００４１】
たとえば、ストレージ装置４４０がディスク装置１０３の場合、図１に示したように１以上の論理ディスクを有する。また、ストレージ装置４４０は、１以上のテープ装置３０３でもよい。また、ストレージ装置３４０は、図２に示したように、ディスク装置１０３とテープ装置３０３とを含む構成でもよい。また、ストレージ装置３４０は、情報系システム（ＤＷＨ）や業務系システム（ＯＬＴＰ）内のストレージ装置３４０でもよい。なお、ホスト１０１は、アクセス先となるストレージ装置３４０の種類が物理的なディスク装置１０３であってもテープ装置３０３であっても、論理ユニットとして扱う。【００４２】
ホスト１０１は、ホストＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０１と、ホストメモリ４０２と、を有する。ホストＣＰＵ４０１はホスト１０１を制御する。ホストメモリ４０２は、ホストＣＰＵ４０１の作業エリアとなる。また、ホストメモリ４０２は、各種プログラムやデータを記憶する非一時的な記録媒体である。ホストメモリ４０２としては、たとえば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、フラッシュメモリがある。【００４３】
ホストメモリ４０２は、プログラム領域４１０と、ＨＢＡドライバデータ領域４２０と、ＭＭＩＯ空間４３０と、を有する。プログラム領域４１０には、アプリケーション４１１、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）４１２およびＨＢＡドライバ１１０が格納され、ホストＣＰＵ３０１により実行される。また、ＨＢＡドライバ１１０には、通信プロセッサ選択プログラム３１３がある。【００４４】
ＨＢＡドライバデータ領域４２０には、通信プロセッサ情報群４２１と、接続ＬＵ情報群４２３と、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２と、が格納される。通信プロセッサ情報群４２１は、通信プロセッサごとの通信プロセッサ情報４２１−０〜３２１−Ｎである。通信プロセッサ情報とは、ＨＢＡ１０２内の通信プロセッサ群のうち対応する通信プロセッサを管理する情報である。具体的には、通信プロセッサ情報４２１−０〜４２１−Ｎには、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）がある。実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）は、現在処理中のＩ／Ｏコマンドの数である。実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）の値が大きいほど、その通信プロセッサに負荷がかかっていることを示す。【００４５】
接続ＬＵ情報群４２３は、論理ユニットごとの接続ＬＵ情報４２３−０〜４２３−Ｎである。接続ＬＵ情報４２３−０〜４２３−Ｎとは、論理ユニットを管理する情報である。具体的には、たとえば、接続ＬＵ情報４２３−０〜４２３−Ｎは、最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ）と、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と、占有割当情報（ｄｅｖ＿ｉｎｆｏ）と、最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）と、を有する。【００４６】
最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ）は、その論理ユニットに対して実行されたＩ／Ｏコマンドのアクセス種別が書き込み（Ｗ）か読み出し（Ｒ）であったかを示す情報である。【００４７】
連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）は、その論理ユニットへのアクセスパターンがシーケンシャルであるか否かを判定するための情報である。具体的には、たとえば、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）とは、その論理ユニットへのアクセスアドレスとアクセスするＩ／Ｏコマンドのブロックサイズとの和である。【００４８】
占有割当情報（ｄｅｖ＿ｉｎｆｏ）は、転送先論理ユニットへのＩ／Ｏコマンドの制御を特定の通信プロセッサに占有割当てさせるための管理情報である。具体的には、たとえば、占有割当てさせる特定の通信プロセッサを一意に特定する識別情報である。【００４９】
占有割当情報（ｄｅｖ＿ｉｎｆｏ）は、通信システム１００導入時にオペレータがアプリケーション４１１を介してＨＢＡドライバデータ領域３２０に設定するパラメータである。【００５０】
最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）は、最後に当該論理ユニット宛てにＩ／Ｏコマンドを起動した通信プロセッサを管理する情報である。具体的には、たとえば、最後に当該ＬＵ宛てにＩ／Ｏコマンドを起動した通信プロセッサを一意に特定する識別情報である。【００５１】
ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２は、Ｉ／Ｏコマンドを制御する通信プロセッサをブロックサイズに応じて占有させる情報である。具体的には、たとえば、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２とは、通信プロセッサに対応付けられたＩ／Ｏコマンドのブロックサイズである。【００５２】
ＭＭＩＯ空間４３０とは、Ｍｅｍｏｒｙ  Ｍａｐｐｅｄ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ空間の略であり、ＨＢＡドライバ１１０がＨＢＡ１０２などのＩ／Ｏデバイス内レジスタへアクセスするために用いられるアドレス空間である。【００５３】
ＨＢＡ１０２は、複数の通信プロセッサ制御部４３０−０〜４３０−Ｎを有する。通信プロセッサ制御部４３０−０〜４３０−Ｎは、Ｉ／Ｏインターフェース制御部４３３を介して、対応する論理ユニットとアクセスする。通信プロセッサ制御部４３０−０〜４３０−Ｎは、Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎと通信プロセッサ４３２−０〜４３２−Ｎとを有する。Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎは、ＨＢＡドライバ１１０からのＩ／Ｏコマンドを保持する。つぎに、ＨＢＡ１０２の内部構成については後述する。【００５４】
図５は、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２の記憶内容例を示す説明図である。ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２は、ブロックサイズと占有制御プロセッサ番号とを対応付けた情報である。ブロックサイズとは、Ｉ／Ｏコマンドのブロックサイズである。占有制御プロセッサ番号とは、占有制御する通信プロセッサの番号である。占有制御する通信プロセッサとは、対応するブロックサイズのＩ／Ｏコマンドを受け付けた場合に選択される通信プロセッサである。たとえば、Ｉ／Ｏコマンドのブロックサイズが１６［ＫＢ］の場合、通信プロセッサ＃３が占有制御される通信プロセッサである。したがって、当該Ｉ／Ｏコマンドの送出先は、通信プロセッサ＃３となる。また、「未設定」は、占有制御する通信プロセッサが決められていないことを示す。【００５５】
図６は、ＨＢＡ１０２内の詳細な構成を示す説明図である。Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎは、ＭＭＩＯ空間４３０にマッピングされる。これにより、ＨＢＡドライバ１１０は、Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎにアクセスすることができ、Ｉ／Ｏコマンド起動レジスタ４３１−０〜４３１−Ｎは、ホスト１０１上で動作するＨＢＡドライバ１１０が通信プロセッサに対してＩ／Ｏコマンド実行指示を行うことができる。【００５６】
ＨＢＡ１０２は、ＨＢＡドライバ１１０から指示されたＩ／ＯコマンドをＩ／Ｏコマンド起動キュー６００に通信プロセッサ毎にスタックし、通信プロセッサ群４３２に対してＩ／Ｏコマンドの起動を通知する。その後、通信プロセッサ群４３２は、Ｉ／Ｏインターフェース制御部４３３を介してストレージ装置４４０にＩ／Ｏコマンドを送出する。なお、ホスト１０１とＨＢＡ１０２の接続４００は、例えばＰＣＩ−Ｅｘｐｒｅｓｓに基づく接続であることが考えられるが他の接続であってもよい。また、ホスト１０１はＨＢＡ１０２を内蔵する形態であってもよい。【００５７】
＜ホスト１０１の機能的構成例＞
図７は、ホスト１０１の機能的構成例を示すブロック図である。ホスト１０１である制御装置７００は、複数の記憶領域にアクセスするインターフェースに設けられた複数の記憶領域の各々に対応する複数のプロセッサを制御する制御装置である。複数の記憶領域とは、ストレージ装置４４０内の記憶領域であり、たとえば、ディスク装置１０３やテープ装置３０３の論理ユニットに該当する。複数のプロセッサとは、たとえば、通信プロセッサ群４３２であり、複数の記憶領域にアクセスするインターフェースとは、たとえば、通信プロセッサ群４３２を有するＨＢＡ１０２である。【００５８】
制御装置７００は、更新部７０１と、選択部７０２と、出力部７０３と、判定部７０４と、記憶部７０５と、を有する。更新部７０１〜判定部７０４は、具体的には、たとえば、図４に示したＨＢＡドライバ１１０をホストＣＰＵ４０１に実行させることにより、その機能を実現する。また、記憶部７０５は、ホストメモリ４０２により、その機能を実現する。【００５９】
更新部７０１は、各々が複数の記憶領域のいずれかに出力されるコマンド列が入力された場合、複数のプロセッサの各プロセッサが、当該プロセッサに対応する記憶領域に対して実行中であるコマンドによる負荷を更新する。具体的には、たとえば、更新部７０１は、通信プロセッサ情報群４２１の各通信プロセッサ情報３２１−０〜３２１−Ｎに記憶されている実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）を更新する。すなわち、更新部７０１は、通信プロセッサにＩ／Ｏコマンドを発行した場合、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）を１インクリメントし、通信プロセッサから終了通知を受け取った場合に、１デクリメントする。【００６０】
選択部７０２は、コマンド列の中のいずれかのコマンドについて、更新部７０１によって更新されたプロセッサごとの実行中のコマンドによる負荷に基づいて、いずれかのコマンドの割当先となるプロセッサを複数のプロセッサの中から選択する。具体的には、たとえば、選択部７０２は、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）が最少の通信プロセッサを割当先に選択する。【００６１】
出力部７０３は、選択部７０２によって選択されたプロセッサに対しいずれかのコマンドを出力する。具体的には、たとえば、出力部７０３は、Ｉ／Ｏインターフェース制御部により、割当先の通信プロセッサに対応する論理ユニットにＩ／Ｏコマンドを送信する。【００６２】
判定部７０４は、コマンド列のうち第１のコマンドおよび第１のコマンドの直後の第２のコマンドについて、複数の記憶領域のいずれかにアクセスされるアドレスに連続性があり、かつ、アクセス種別が同一であるか否かを判定する。具体的には、たとえば、判定部７０４は、連続するＩ／Ｏコマンドについてアドレスの連続性とアクセス種別の同一性を判定する。【００６３】
より具体的には、たとえば、判定部７０４は、連続するＩ／Ｏコマンドのうち先行する第１のコマンドの連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と、連続するＩ／Ｏコマンドのうち後続する第２のコマンドのアクセス先アドレスとを比較する。連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）とは、その論理ユニットへのアクセスアドレスとアクセスするＩ／Ｏコマンドのブロックサイズとの和である。一致する場合は、判定部７０４は、第１のコマンドと第２のコマンドとは連続性ありと判定する。【００６４】
また、判定部７０４は、最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ）を参照して、第１のコマンドのアクセス種別が書き込み（Ｗ）か読み出し（Ｒ）であったかを特定し、第２のコマンドのアクセス種別と一致するか否かを判定する。一致する場合は、判定部７０４は、第１のコマンドと第２のコマンドとはアクセス種別が同一であると判定する。【００６５】
この場合、選択部７０２は、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）により第２のコマンドの割当先を選択しない。そして、選択部７０２は、判定部７０４によってアクセスされるアドレスに連続性があり、かつ、アクセス種別が同一であると判定された場合、複数のプロセッサのうち第１のコマンドがアクセスした記憶領域に対応するプロセッサを選択する。たとえば、第１のコマンドのアクセス先が論理ユニット＃０である場合、第２のコマンドのアクセス先も論理ユニット＃０となる。ただし、選択部７０２は、アドレスに連続性がない場合、または、アクセス種別に同一性がない場合には、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）により第２のコマンドの割当先を選択することになる。【００６６】
記憶部７０５は、複数のプロセッサのうち特定のプロセッサの識別情報と、特定のプロセッサのアクセス先となる複数の記憶領域の中の特定の記憶領域の識別情報と、を対応付けた第１の対応情報を記憶する。第１の対応情報とは、接続ＬＵ情報４２３−０〜４２３−Ｎ内の占有割当情報（ｄｅｖ＿ｉｎｆｏ）である。すなわち、特定のプロセッサの識別情報とは、接続ＬＵ情報４２３−０〜４２３−Ｎで特定される論理ユニットの番号であり、特定の記憶領域の識別情報とは、占有割当情報（ｄｅｖ＿ｉｎｆｏ）に記憶された通信プロセッサの番号である。【００６７】
第１の対応情報を用いる場合、判定部７０４は、第１の対応情報を参照して、第２のコマンドが保持する第２のコマンドのアクセス先の記憶領域の識別情報と、特定の記憶領域の識別情報とが一致するか否かを判定する。そして、選択部７０２は、判定部７０４によって、第２のコマンドのアクセス先の記憶領域の識別情報と、特定の記憶領域の識別情報とが一致すると判定された場合、特定のプロセッサを選択する。【００６８】
たとえば、連続するＩ／Ｏコマンドのうち後続である第２のコマンドのアクセス先が論理ユニット＃０であり、特定の記憶領域が論理ユニット＃０である場合、選択部７０２は、第２のコマンドの割当先として、論理ユニット＃０の接続ＬＵ情報４２３−０の占有割当情報（ｄｅｖ＿ｉｎｆｏ）に記憶された通信プロセッサの番号で指定される通信プロセッサを選択する。【００６９】
また、記憶部７０５は、複数のプロセッサのうち特定のプロセッサの識別情報と、特定のプロセッサがアクセス先に出力するコマンドのサイズと、を対応付けた第２の対応情報を記憶する。第２の対応情報とは、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２である。【００７０】
第２の対応情報を用いる場合、判定部７０４は、第２の対応情報を参照して、第２のコマンドのサイズと特定のプロセッサがアクセス先に出力するコマンドのサイズとが一致するか否かを判定する。そして、選択部７０２は、判定部７０４によって、第２のコマンドのサイズと特定のプロセッサがアクセス先に出力するコマンドのサイズとが一致すると判定された場合、特定のプロセッサを選択する。【００７１】
たとえば、連続するＩ／Ｏコマンドのうち後続である第２のコマンドのブロックサイズが１６．０［ＫＢ］であり、ブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）４２２においてブロックサイズが１６．０［ＫＢ］に対応する通信プロセッサの番号が「３」である場合、選択部７０２は、第２のコマンドの割当先として、通信プロセッサ＃３を選択する。【００７２】
＜通信システム１００のシーケンス＞
図８は、通信システム１００のシーケンスを示す説明図である。なお、アプリケーション４１１、ＯＳ４１２、ＨＢＡドライバ１１０といったプログラムを主語として説明を行う場合があるが、プログラムはホストＣＰＵ４０１によって実行されることで定められた処理を、ホストメモリ４０２を用いながら行うため、ホストＣＰＵ４０１を主語とした説明と同義とする。【００７３】
まず、アプリケーション４１１は、ＯＳ４１２に対してストレージ装置４４０への送受信要求を実行する（ステップＳ８０１）。その要求を受信したＯＳ４１２は、ＨＢＡドライバ１１０に対してＩ／Ｏコマンドを発行する（ステップＳ８０２）。ＨＢＡドライバ１１０の通信プロセッサ選択プログラム４１３は、Ｉ／Ｏコマンドを起動する通信プロセッサ選択処理を実行する（ステップＳ８０３）。ステップＳ８０３で選択された通信プロセッサを「選択通信プロセッサ」と称す。通信プロセッサ選択処理（ステップＳ８０３）の詳細については、図７で後述する。【００７４】
ＨＢＡドライバ１１０は、出力部７０３により、選択通信プロセッサに対してＩ／Ｏコマンドを発行する（ステップＳ８０４）。Ｉ／Ｏコマンド発行後、ＨＢＡドライバ１１０は、更新部７０１により、Ｉ／Ｏコマンドの転送先論理ユニットにおける接続ＬＵ情報である連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と、最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ）と、最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）とを更新する（ステップＳ８０５）。【００７５】
具体的には、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）は、当該論理ユニットへのアクセスアドレスとアクセスブロックサイズとの和に更新される。最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ）は、ステップＳ８０４で発行したＩ／Ｏコマンドが書き込みである場合は書込み（Ｗ）、読み出しである場合は読み出し（Ｒ）を示す制御情報に更新される。最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）は、通信プロセッサ選択処理（ステップＳ８０３）で選択された選択通信プロセッサの番号に更新される。【００７６】
そして、ＨＢＡドライバ１１０は、選択通信プロセッサにおいて現在実行中のＩ／Ｏコマンドの数を更新する（ステップＳ８０６）。具体的には、選択通信プロセッサにて現在実行中のＩ／Ｏコマンドの数を示す実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）に、ステップＳ８０４でＩ／Ｏコマンドを発行した分（１個）が加算される。なお、Ｉ／Ｏコマンド完了通知を選択通信プロセッサより受信すると、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）は減算される。【００７７】
図９は、図８に示した通信プロセッサ選択処理（ステップＳ８０３）の詳細な処理手順例を示すフローチャートである。まず、ＨＢＡドライバ１１０は、判定部７０４により、ステップＳ８０２でＯＳ４１２から発行されたＩ／Ｏコマンド（以下、起動コマンド）のブロックサイズが、特定の通信プロセッサに占有制御される設定であるか否かを判断する（ステップＳ９０１）。具体的には、たとえば、ＨＢＡドライバ１１０は、図４に示したブロックサイズ情報（ｂｌｏｃｋ＿ｓｉｚｅ＿ｉｎｆｏ）３２２を参照して判断する。【００７８】
すなわち、ブロックサイズに対応する占有制御プロセッサ番号が「未設定」の場合はステップＳ９０１：Ｎｏとなり、占有制御プロセッサ番号が有る場合はステップＳ９０１：Ｙｅｓとなる。ステップＳ９０１：Ｙｅｓの場合は、ステップＳ９０３に移行し、ＨＢＡドライバ１１０は、選択部７０２により、占有制御プロセッサ番号の通信プロセッサを選択する（ステップＳ９０３）。【００７９】
ステップＳ９０１：Ｎｏの場合、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドの転送先論理ユニットが、特定の通信プロセッサに占有制御される設定であるか否かを判断する（ステップＳ９０２）。具体的には、たとえば、ＨＢＡドライバ１１０は、転送先論理ユニットの占有割当情報（ｄｅｖ＿ｉｎｆｏ）を参照して判断する。すなわち、転送先論理ユニットの占有割当情報（ｄｅｖ＿ｉｎｆｏ）に占有制御プロセッサ番号が「未設定」の場合はステップＳ９０２：Ｎｏとなり、占有制御プロセッサ番号が有る場合はステップＳ９０２：Ｙｅｓとなる。ステップＳ９０２：Ｙｅｓの場合は、ステップＳ９０３に移行し、ＨＢＡドライバ１１０は、選択部７０２により、占有制御プロセッサ番号の通信プロセッサを選択する（ステップＳ９０３）。【００８０】
ＨＢＡ１０２に接続されているＬＵがディスク装置１０３とテープ装置２０３である場合、テープ装置２０３のＬＵに対するＩ／Ｏコマンド制御を特定の通信プロセッサに占有割り当てすることで一つのＨＢＡ１０２の先にテープ装置２０３とディスク装置１０３を接続した場合に発生する性能低下を防ぐことができる。【００８１】
ステップＳ９０１：Ｎｏの場合、ＨＢＡドライバ１１０は、判定部７０４により、アクセス判定処理を実行する（ステップＳ９０４）。アクセス判定処理（ステップＳ９０４）の詳細については図８で後述するが、アクセス判定処理（ステップＳ９０４）では、転送先論理ユニットに対するアクセスがシーケンシャルアクセスであるか否かが判定される。【００８２】
転送先論理ユニットに対するアクセスがシーケンシャルアクセスである場合（ステップＳ９０５：Ｙｅｓ）、ステップＳ９０６に移行し、シーケンシャルアクセスでない場合（ステップＳ９０５：Ｎｏ）、ステップＳ９０７に移行する。【００８３】
シーケンシャルアクセスである場合（ステップＳ９０５：Ｙｅｓ）、ＨＢＡドライバ１１０は、選択部７０２により、最終コア情報（ｌａｓｔ＿ｃｏｒｅ＿ｉｎｆｏ）を参照して、転送先論理ユニットに対して最後にＩ／Ｏコマンドを発行した通信プロセッサを特定し、当該通信プロセッサを選択する（ステップＳ９０６）。【００８４】
一方、シーケンシャルアクセスでない場合（ステップＳ９０５：Ｎｏ）、ＨＢＡドライバ１１０は、選択部７０２により、複数の通信プロセッサのうち、滞留中のＩ／Ｏコマンドの負荷が最も少ない通信プロセッサを選択する（ステップＳ９０７）。たとえば、ＨＢＡドライバ１１０は、実行中コマンド数（ｅｘｅｃ＿ｃｍｄ＿ｎｕｍ）が最少の通信プロセッサを選択する。【００８５】
図１０は、図９に示したアクセス判定処理（ステップＳ９０４）の詳細な処理手順例を示すフローチャートである。まず、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドが転送先論理ユニットに対して最後に実行したアクセス種別と同一種別であるか否かを判定する（ステップＳ１００１）。具体的には、ＨＢＡドライバ１１０は、起動コマンドのアクセス種別と最終コマンド情報（ｌａｓｔ＿ｃｍｄ＿ｉｎｆｏ）で特定されるアクセス種別とが一致するか否かを判定することになる。同一種別でない場合（ステップＳ１００１：Ｎｏ）、ＨＢＡドライバ１１０は、起動コマンドがランダムアクセスであると判定する（ステップＳ１００４）。ランダムアクセスであるため、ステップＳ１００４に移行する。【００８６】
一方、同一種別である場合（ステップＳ１００１：Ｙｅｓ）、シーケンシャルアクセスであるため、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドが転送先論理ユニットにて最後に実行されたアドレスと連続するか否かを判定する（ステップＳ１００２）。具体的には、ＨＢＡドライバ１１０は、転送先論理ユニットに対して最後に実行したＩ／Ｏコマンドのアドレスとそのブロックサイズから計算された連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）を参照して、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と起動コマンドのアドレスとが一致するかを判定する。【００８７】
一致する場合（ステップＳ１００２：Ｙｅｓ）、ＨＢＡドライバ１１０は、判定部７０４により、起動コマンドがシーケンシャルアクセスであると判定し（ステップＳ１００３）、不一致の場合（ステップＳ１００２：Ｎｏ）、起動コマンドがランダムアクセスであると判定する（ステップＳ１００４）。ステップＳ１００３、Ｓ１００４のあとは、ステップＳ９０５に移行して、アクセス判定処理（ステップＳ９０４）を終了する。【００８８】
なお、ステップＳ１００２において、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）と起動コマンドのアドレスとが一致した場合を例に説明したが、ストレージ装置４４０におけるシーケンシャルアクセス判定アルゴリズムはアクセスアドレスが連続していなかった場合にも動作する場合がある。【００８９】
たとえば、連続判定情報（ｎｅｘｔ＿ＬＢＡ＿ａｄｒ＿ｉｎｆｏ）から数百バイトの範囲内であればストレージ装置４４０ではシーケンシャルアクセスとみなして動作する場合がある。したがって、ＨＢＡドライバ１１０によるアドレス判定方法はこの数百バイト以内のアドレスのずれであれば、シーケンシャルアクセスとみなす判定としてもよい。また、このアドレス範囲のずれをパラメータ化し、接続されるストレージ装置４４０のシーケンシャルアクセスアルゴリズムに応じて変更可能な方法をとってもよい。【００９０】
このように、実施例１では、ＨＢＡ１０２を制御するＨＢＡドライバ１１０が通信プロセッサ毎のＩ／Ｏ負荷やストレージ装置４４０へのアクセス種別、アクセスアドレス、ブロックサイズによりＩ／Ｏ特性を判定し、Ｉ／Ｏコマンドを起動する通信プロセッサを選択する。これにより、ＨＢＡ１０２のトランザクション性能の向上を図ることができる。また、接続されるＬＵへのＩ／Ｏコマンド処理を特定の通信プロセッサに占有制御させることで、性能ボトルネックのないデータ転送を実現することができる。【００９１】
なお、本発明は上述した実施例に限定されるものではなく、様々な変形例が含まれる。たとえば、上述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、説明した全ての構成を備えるものに限定するものでない。また、図６〜図８で説明した処理順序を適宜入れ替えて実現してもよい。
【実施例２】
【００９２】
次に実施例２について説明する。【００９３】
＜ＬＰＡＲを用いた計算機システムの構成＞
実施例２の計算機システムの構成を示す図である。本実施例ではホスト１０１内にＬＰＡＲが作成されている点、ストレージ装置４４０内部を開示している点が異なる。その他の点、特にＨＢＡ１０２内部構成については実施例１で説明済みのため省略する。なお、図１１に存在しないが実施例１に存在するエンティティは単に記載を省略しているだけで、そのエンティティを積極的に除外する意図はない。なお、図１１中のＨＢＡ１０２に含まれる「Ｐｒｏｃ」４３２は通信プロセッサ４３２を、ストレージ装置４４０に含まれる「Ｐｒｏｃ」４４０１１はストレージプロセッサを表す。また、ＨＢＡ１０２にはデータ転送エンジン１０２１が含まれる（図１１中では「Ｅ」と省略している）。【００９４】
なお、図１１の例では実装の容易化のため、ＨＢＡ１０２のポート毎に用いることのできる通信プロセッサ４３２が決められているように示しているが、これは必須ではない。なお、データ転送エンジン１０２１の例としてはＤＭＡエンジン、ＨＢＡ１０２のフレーム送受信を制御するエンジンがあるが、ストレージ装置４４０とホストメモリ４０２とのデータ転送を行うエンティティであればこれらに限定されない。【００９５】
＜＜ＬＰＡＲ＞＞
ＬＰＡＲ１０１１０は、ホスト１０１内に生成される論理的なホストであって、ホストＣＰＵ４０１、及びホストメモリ４０２の一部の領域又は定められたメモリ量と、が割り当てられる。これら割り当てられたホストリソースによってＬＰＡＲ１０１１０はアプリケーション４１１、ＯＳ４１２、又はＨＢＡドライバ１１０を実行する。なお、ＨＢＡドライバ１１０とＯＳ４１２とは別なソフトウェアモジュールであってもよいが、そうでなくてもよい。同様にＨＢＡドライバ１１０とアプリケーション４１１とは別なソフトウェアモジュールでなくてもよい。【００９６】
なお、ＬＰＡＲ１０１１０は典型的には下記によって生成される：
＊ハイパーバイザ方式：ハイパーバイザプログラムをホストＣＰＵ４０１で実行する。
＊コンテナ方式：ＬＰＡＲ１０１１０毎にＯＳ４１２やＨＢＡドライバ１１０を実行する代わりに、ＬＰＡＲ１０１１０間で共通のＯＳ４１２やＨＢＡドライバ１１０を実行する。ＬＰＡＲ１０１１０は内部で実行するアプリケーション４１１に対して使用するホストＣＰＵ４０１及びホストメモリ４０２の領域又は量を区切ったエンティティとみなすことができる。【００９７】
しかしＬＰＡＲ１０１１０の生成方式はこれ以外であってもよい。なお、以後の説明ではハイパーバイザ方式を前提に説明する。【００９８】
＜ＬＰＡＲ１０１１０に対する通信プロセッサ４３２の割り当て＞
上述のＬＰＡＲ１０１１０はホストリソースを占有して使用できるため、通常の計算用途ではＬＰＡＲ１０１１０間での性能競合を大部分軽減（通常の用途ではほぼ解消）することができる。一方で、近年のアプリケーションは高いＩ／Ｏ負荷を発生させる場合があり、又Ｉ／Ｏに関係するデバイス、装置が共有されているため、性能競合が発生する。特に近年はＣＰＵのマルチコア化、ホストメモリ４０２の容量の大容量化が達成された結果、１つのＨＢＡ１０２で処理すべきＩ／Ｏコマンド数が増え、ＨＢＡ１０２自体のＩ／Ｏコマンド処理限界を考慮すべき事態となっている。そのため、実施例２では下記のＨＢＡ１０２内の通信プロセッサ４３２の割り当てを行う：【００９９】
＊管理計算機は、Ｉ／Ｏ性能（特にＩＯＰＳ）が求められるＬＰＡＲ１０１１０に対して特定の通信プロセッサ４３２を占有割り当てする。これによって他のＬＰＡＲ１０１１０から当該特定の通信プロセッサ４３２が使用されなくなる。これによって他のＬＰＡＲ１０１１０との性能競合を解消することができる。さらに、アクセスパターンの異なる複数のアプリケーション４１１を別々なＬＰＡＲ１０１１０内で実行すれば、より効率的なＩ／Ｏ処理が可能となる。その一例がＯＬＴＰとＤＷＨである。【０１００】
＊管理計算機は、Ｉ／Ｏ性能が求められないＬＰＡＲ１０１１０が存在する場合は、事前に定めた共有の通信プロセッサ４３２を割り当てる（共有割り当て）。通信プロセッサ４３２が全て占有されてしまうと、このようなＬＰＡＲ１０１１０がＩ／Ｏコマンド送信に用いる通信プロセッサ４３２が無くなってしまう事態に対する対策である。【０１０１】
＜ＬＰＡＲ１０１１０に対するストレージリソースの割り当て＞
しかし、Ｉ／Ｏコマンドに関する性能競合はストレージ装置４４０内でも発生し得る。ＩＯＰＳの視点では下記ストレージリソースがボトルネックとなり得る：【０１０２】
＊ストレージプロセッサ４４０１１：ＨＢＡ１０２からＩ／Ｏコマンドを受信し、解釈し、ストレージ装置４４０内のデータ転送エンジン（図示は省略）と連携してデータ転送を行う。
＊プール：プール内部には複数の記憶デバイスが含まれ、典型的にはこれら複数の記憶デバイスを並列動作させながらＩ／Ｏコマンドの対象データの転送を行う。そのため、プールに含まれる記憶デバイスの数が処理可能なＩＯＰＳ限界に影響する。さらに、記憶デバイスにはヘッドの移動を伴うＨＤＤと、ヘッドの移動が不要な不揮発メモリ（例えばフラッシュメモリ）が存在するため、記憶デバイスの種類もプールのＩＯＰＳ限界に影響する。【０１０３】
また、転送帯域（単に帯域と呼ぶ）の視点では下記ストレージリソースがボトルネックとなり得る：【０１０４】
＊ポート：接続規格によって限界帯域が定まる。
＊プール：記憶デバイス自体の転送能力の限界の他、記憶デバイスとストレージコントローラ４４０１０との間の接続の帯域限界が関係するため、典型的には記憶デバイスの数が多いほどよい。また、帯域についても記憶デバイスの種類が関係する。【０１０５】
レスポンスタイムの視点は、これらＩＯＰＳの視点、帯域の視点も関係し、さらにキャッシュメモリ４４０１２のヒット率が関係する。なお、アプリケーション４１１のアクセス特性が同じであれば、キャッシュメモリ４４０１２の量が多いほど、ヒット率は向上する傾向がある。そのため、他のＬＰＡＲ１０１１０でキャッシュメモリ４４０１２の使用量が増加し、重要なアプリケーションが実行中のＬＰＡＲ１０１１０で使用できるキャッシュメモリ量が減少するとキャッシュヒット率が低下し、レスポンスタイムが悪化する場合がある。【０１０６】
＜統合リソースグループ＞
統合リソースグループ１１０００は、ＬＰＡＲ１０１１０に対して占有割り当てしたホストリソース及びストレージリソースを含む論理的なエンティティである。図１１の例では、ＬＰＡＲ＃４の統合リソースグループに、ホストＣＰＵ４０１が１つ、ホストメモリ４０２が提供する全領域の一部（領域１０１１Ｐ）、ＨＢＡ＃２（１０２）の通信プロセッサ＃７、ストレージ装置４４０のストレージプロセッサ＃Ｄ、キャッシュメモリ４４０１２の一部の領域４４０１２Ｐ、そしてプール＃Ｃが含まれることを表している。【０１０７】
なお、複数のＬＰＡＲ１０１１０で統合リソースグループ１１０００のストレージリソースを共有してもよい。これは例えば下記の通りである：【０１０８】
＊同じホスト１０１の複数のＬＰＡＲ１０１１０で統合リソースグループを共有する場合は、ストレージリソースと、通信プロセッサ４３２の共有を行ってもよい。この例はＨＢＡ１０２内の通信プロセッサ４３２の数がＬＰＡＲ１０１１０の数以下の場合に比較的現実的な選択肢となる。【０１０９】
＊異なるホスト１０１のＬＰＡＲ１０１１０同士で統合リソースグループを共有する場合は、ストレージリソースが共有対象となる。この例は当該ＬＰＡＲ１０１１０間でＨＡクラスタリング又は性能クラスタリングを行う場合に好適である。処理すべき負荷は個々のＬＰＡＲ１０１１０ではなく、クラスタ全体として扱うべきであり、従って共有アクセス先であるストレージ装置４４０のストレージリソースは個々のＬＰＡＲ１０１１０に対してストレージリソースを割り当てるよりもクラスタ内で柔軟に調節し、クラスタ全体としてよりパフォーマンスが発揮できるようにすべきだからである。【０１１０】
なお、「（１以上の）ＬＰＡＲ１０１１０に対して占有して割り当てる」とは、その割り当て対象が割り当て対象から外れたＬＰＡＲ１０１１０から使用されない事を指す。【０１１１】
なお、その他占有割り当て対象としてもよいストレージリソースとしては下記がある。しかし、下記をリソースとして統合リソースグループに含めてもかまわない：【０１１２】
＊ＨＢＡ１０２のデータ転送エンジン。【０１１３】
＊ストレージプロセッサ４４０１１によるＩＯＰＳ及び帯域制御スロットリングがある場合はその設定ＩＯＰＳ及び設定帯域。なお、スロットリングの設定は、上記ストレージプロセッサ４４０１１以外に、ポート、ＬＵ、プール、キャッシュメモリのほか、後述する内部ＬＵ、パリティグループでもよく、又はホスト１０１のＮＩＣ（図示せず）を対象にしてもよい。また、スロットリングの設定は、その他のホストリソースやストレージリソースを対象としてもよい。【０１１４】
＊ＨＢＡ１０２とストレージコントローラ間の接続装置、又は接続媒体の帯域。これにはＨＢＡ１０２のポートとストレージ装置４４０のポートが含まれる。【０１１５】
＊ＬＵ、内部ＬＵ、パリティグループ、及びパリティグループに含まれる記憶デバイス。なお、内部ＬＵとは、ストレージ装置４４０の１つ以上のポートそれぞれにＬＵＮを伴って割り当てられることでＬＵとなるような関係である。【０１１６】
＜ＨＢＡ１０２のＭＭＩＯ空間とホスト１０１の物理アドレス空間とＬＰＡＲ物理アドレス空間の関係＞
次にホスト１０１の物理アドレス空間とＬＰＡＲ物理アドレス空間の関係について説明する。実施例２でも実施例１と同様に、ＨＢＡ１０２のレジスタはＭＭＩＯ空間の一部として、ホスト１０１の物理メモリアドレス空間１０１１（図１１中ではＰＡ１０１１と省略している）にマッピングされている。そしてハイパーバイザの処理によって、各ＬＰＡＲ１０１１０にとっての物理アドレス空間（混乱を避けるため、以後はＬＰＡＲ物理アドレス空間と呼ぶ）が生成される。なお、図１１中では、このＬＰＡＲ物理アドレス空間をＬＡ１１１１１と省略している。【０１１７】
＜＜第１方式：ＭＭＩＯマッピング方式＞＞
ＭＭＩＯマッピング方式では、ＨＢＡ１０２のＭＭＩＯ空間４３０は各ＬＰＡＲ１０１１０のＬＰＡＲ物理アドレス空間１１１１１それぞれにマッピングされている（図１１中のＬＡ１１１１１内の網掛けの領域）。そしてＬＰＡＲ１０１１０内のＨＢＡドライバ１１０は、ＬＰＡＲ物理アドレス空間にマッピングされたＭＭＩＯ空間にアクセスすることでＩ／ＯコマンドをＨＢＡ１０２に送信することができる。【０１１８】
＜＜第２方式：仮想インターフェースデバイス方式＞＞
仮想インターフェースデバイス方式では、ハイパーバイザが仮想のインターフェースデバイスを生成し、ＬＰＡＲ１０１１０上のＯＳ４１２に提供する。ハイパーバイザは、ＯＳ４１２による仮想インターフェースデバイスに対するＩ／Ｏコマンド発行を検知し、ハイパーバイザ上で実行するＨＢＡドライバ１１０にＩ／Ｏコマンドを発行する。【０１１９】
＜ＬＰＡＲ１０１１０内でのＩ／Ｏコマンド発行からデータ格納まで＞
次に、ＬＰＡＲ１０１１０内でのＩ／Ｏコマンド発行からデータ格納までの動作について説明する。先ずはＭＭＩＯ方式について動作を説明する。【０１２０】
＜＜第１方式：ＭＭＩＯマッピング方式＞＞
ＬＰＡＲ１０１１０に対して通信プロセッサ４３２を占有して割り当てた場合のＩ／Ｏコマンド処理をリード処理を例として説明すると下記の通りである。【０１２１】
（Ｓｔｅｐ１１−０１）アプリケーション４１１は、ＯＳ４１２に対してリードデータ格納先のアドレスを仮想アドレス空間で指定したファイルリード要求を発行する。【０１２２】
（Ｓｔｅｐ１１−０２）ＯＳ４１２は、ファイルリード要求を受信し、ファイルリード要求に基づいてリードコマンドを生成し、リードデータ格納先アドレスと共にリードコマンドをＨＢＡドライバ１１０に発行する。【０１２３】
（Ｓｔｅｐ１１−０３）ＨＢＡドライバ１１０は、受信したリードコマンドとリードデータ格納先アドレスをホストメモリ４０２に格納する。【０１２４】
（Ｓｔｅｐ１１−０４）ＨＢＡドライバ１１０は、使用可能な通信プロセッサ４３２の中から受信したリードコマンド送信先となる通信プロセッサ４３２を選択する。なお、使用可能な通信プロセッサ４３２は、当該ファイルリード要求前に事前に把握している。例えば、ＨＢＡドライバ１１０の起動時に、同ドライバ１１０がハイパーバイザから使用可能な通信プロセッサ４３２の識別子リストを受信し、保持することが考えられるが、他の方法で把握してもよい。【０１２５】
（Ｓｔｅｐ１１−０５）ＨＢＡドライバ１１０は、選択した通信プロセッサ４３２に対応するＭＭＩＯ空間のレジスタにアクセスすることで、選択した通信プロセッサ４３２に送信したいリードコマンドが存在することを通知する。【０１２６】
（Ｓｔｅｐ１１−０６）選択された通信プロセッサ４３２は、レジスタのアクセスを検知し、Ｓｔｅｐ１１−０３でホストメモリ４０２に格納したリードコマンドと、リードデータ格納先アドレスと、を読み込む。【０１２７】
（Ｓｔｅｐ１１−０７）選択された通信プロセッサ４３２は、ＨＢＡ１０２のポートを介して、ストレージ装置４４０のポートに対してリードコマンドを送信する。【０１２８】
（Ｓｔｅｐ１１−０８）選択された通信プロセッサ４３２は、データ転送エンジン１０２１に対して、ストレージ装置４４０から受信したデータをホストメモリ４０２のリードデータ格納先アドレスに書きこませる指示を送信する。【０１２９】
以上がリード処理を例としたＩ／Ｏコマンド処理である。ライト処理の場合は、上記ステップに対して例えば下記が差異となる：【０１３０】
＊「ファイルリード要求」が「ファイルライト要求」に代わる。
＊Ｉ／Ｏコマンドが「リードコマンド」から「ライトコマンド」に代わる。
＊「リードデータ格納先のアドレス」が「ライトデータ格納先のアドレス」に代わる。
＊Ｓｔｅｐ１１−０８は「ストレージ装置４４０からの転送準備完了応答を待ち、データ転送エンジン１０２１に対してライトデータ格納先アドレスからストレージ装置４４０にライトデータを送信させる指示を送信する」に代わる。【０１３１】
なお、ＨＢＡ１０２が受信したリード又はライトデータ格納先アドレスはＬＰＡＲ物理アドレス空間でのアドレスで指しているため、データ転送エンジン向けに物理アドレス空間上でのアドレスに変換することが考えられる。そしてその変換処理はハイパーバイザ、ＨＢＡ１０２、ホストＣＰＵ４０１のハードウェア機能、ホスト１０１上のチップセットが提供するハードウェア機能が行ってもよい。また、アプリケーションが発行する要求はファイル以外のブロックアクセス要求であってもよい。【０１３２】
＜＜第２方式：仮想インターフェースデバイス方式＞＞
第１方式の説明と同様に、ＬＰＡＲ１０１１０に対して通信プロセッサ４３２を占有して割り当てた場合のＩ／Ｏコマンド処理をリード処理を例として説明する。【０１３３】
（Ｓｔｅｐ１２−０１）アプリケーション４１１は、ＯＳ４１２に対してリードデータ格納先のアドレスを仮想アドレス空間で指定したファイルリード要求を発行する（方式１と同じ）。【０１３４】
（Ｓｔｅｐ１２−０２）ＯＳ４１２は、ファイルリード要求を受信し、ファイルリード要求に基づいてリードコマンドを生成し、リードデータ格納先アドレスと共にリードコマンドを仮想インターフェースデバイスに発行する。【０１３５】
（Ｓｔｅｐ１２−０２Ｂ）ハイパーバイザは、ＯＳ４１２による仮想インターフェースデバイスに対するリードコマンド発行を検知し、リードデータ格納先アドレスと共にリードコマンドをＨＢＡドライバ１１０に発行する。【０１３６】
（Ｓｔｅｐ１２−０３）ＨＢＡドライバ１１０は、受信したリードコマンドとリードデータ格納先アドレスをホストメモリ４０２に格納する。【０１３７】
（Ｓｔｅｐ１２−０４）ＨＢＡドライバ１１０は、使用可能な通信プロセッサ４３２の中から受信したリードコマンド送信先となる通信プロセッサ４３２を選択する（選択方法は後述する）。【０１３８】
（Ｓｔｅｐ１２−０５乃至Ｓｔｅｐ１２−０８）Ｓｔｅｐ１１−０５乃至Ｓｔｅｐ１１−０８と同じ。【０１３９】
なお、Ｓｔｅｐ１２−０４における選択方法としては、ＬＵとＬＰＡＲ１０１１０の割り当て対応関係が１：Ｎの場合は、下記方法を採用することが考えられる。【０１４０】
（Ｓｔｅｐ１２−０４Ａ）ＨＢＡドライバ１１０は、ＬＵと通信プロセッサ４３２との対応リストを管理計算機から受信し、把握する。なお、当該対応リストは、管理計算機が記憶する「各ＬＰＡＲ１０１１０がアクセスするＬＵのリスト」と、「各ＬＰＡＲ１０１１０に割り当てた通信プロセッサ４３２のリスト」と、に基づいて管理計算機が生成したリストである。【０１４１】
（Ｓｔｅｐ１２−０４Ｂ）ＨＢＡドライバ１１０は、対応リストを参照し、受信したリードコマンドに含まれるＬＵに対応する通信プロセッサ４３２を選択する。
以上である。その他説明については方式１と同様のため、省略する。【０１４２】
＜＜両方式のメリット＞＞
以上の動作から上記２方式はそれぞれ以下のメリットを持つ。【０１４３】
＊ＭＭＩＯマッピング方式：ハイパーバイザにて仮想インターフェースデバイスの処理が不要のため、Ｉ／Ｏ処理のオーバーヘッドが小さい。【０１４４】
＊仮想インターフェースデバイス方式：ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）等のより一般的な仮想インターフェースデバイスを提供できる場合は、より多くの種類のＯＳ４１２に対して通信プロセッサ割り当てが適用可能である。そして、ＯＳ４１２等のＬＰＡＲ１０１１０上で動作するプログラムをエンハンスせず（または僅かにエンハンスするだけで）、通信プロセッサ割り当てが適用可能である。【０１４５】
＜＜他の実現方式＞＞
なお、上述のＩ／Ｏコマンド処理方式以外にも実現方式が考えられる。例えば下記である：【０１４６】
上記第１方式の仮想ＨＢＡの提供をＨＢＡ１０２が行う。ハイパーバイザは、その仮想ＨＢＡのＭＭＩＯ空間を特定のＬＰＡＲ物理アドレス空間にだけマッピングする。ハイパーバイザによる選択処理を行わずに済むが、ＨＢＡ１０２にエンハンスが必要となる。【０１４７】
＜Ｉ／Ｏ性能を求めないＬＰＡＲ１０１１０との共存＞
前述の通り、ＬＰＡＲ１０１１０によってはアプリケーション４１１が行うＩ／Ｏの頻度が高くないため、通信プロセッサ４３２やストレージリソースの占有割り当てが過度な割り当てとなる場合がある。このようなＬＰＡＲ１０１１０（便宜上Ｉ／Ｏ低優先度ＬＰＡＲと呼ぶ）に対応するため、管理計算機は、事前に前述の共有の通信プロセッサ４３２に加えてさらに共有のストレージリソースを設定し、Ｉ／Ｏ低優先度ＬＰＡＲに共有割り当てを行ってもよい。【０１４８】
このような設定によって、Ｉ／Ｏ低優先度ＬＰＡＲは他のＩ／Ｏ低優先度ＬＰＡＲ以外のＬＰＡＲ１０１１０に対して性能競合を発生させずに済む。また、事前の共有設定を行うことで、占有使用による共有リソースの枯渇を防止して、Ｉ／Ｏ低優先度ＬＰＡＲがＩ／Ｏコマンドを送信できない事態を防止できる。【０１４９】
＜管理計算機＞
図示は省略したが、計算機システムには管理計算機が含まれてもよい。この場合、管理計算機は、ユーザ入力を受信するユーザインターフェースと、管理プログラムを実行するＣＰＵと、ホスト１０１やストレージ装置４４０等に代表される計算機システムのコンポーネントに関する構成情報を格納する記憶資源と、を含む。管理計算機は例えば以下の処理を行うことが考えられる：【０１５０】
＊ＬＰＡＲ１０１１０に対する通信プロセッサ割り当て。
＊Ｉ／Ｏ性能要件に基づいた通信プロセッサ４３２及びストレージリソースの割り当て。
＊テンプレートに基づいたホストリソース及びストレージリソースの割り当て。
以下、それぞれについて説明する。【０１５１】
＜＜ＬＰＡＲ１０１１０に対する通信プロセッサ割り当て＞＞
これまで説明の通り、各ＬＰＡＲ１０１１０に通信プロセッサ４３２を占有割り当てすることは非効率又は現実的でない。そのため、管理計算機は管理プログラムを実行することで以下の処理を行ってもよい：【０１５２】
＊管理計算機は、ユーザインターフェースを通じてユーザからＬＰＡＲ１０１１０の識別子と、どの（またはどのぐらいの数の）通信プロセッサ４３２を割り当てるか、を含むユーザ入力を受信する。そして、管理計算機は、その受信に基づいてホスト１０１（より正確にはホスト１０１のハイパーバイザ、ＨＢＡドライバ１１０、又はＨＢＡ１０２）に対してユーザが指定したＬＰＡＲ１０１１０に対しての通信プロセッサ割り当て指示を送信する。【０１５３】
＊管理計算機は、ホスト１０１（より正確にはホスト１０１のハイパーバイザ、ＨＢＡドライバ１１０、又はＨＢＡ１０２）から情報を取得し、ＬＰＡＲ１０１１０と通信プロセッサ４３２の割り当て関係をユーザインターフェースに表示する。この表示には当該関係が占有割り当てか、共有割り当てかといった情報を表示してもよい。【０１５４】
なお、これら指示の送信方式は例えば下記の通りである：【０１５５】
＊ＭＭＩＯマッピング方式：ＬＰＡＲ１０１１０にて実行中のＨＢＡドライバ１１０各々に対して異なる通信プロセッサ４３２の識別子を送信することで、ＬＰＡＲ１０１１０に対する通信プロセッサ４３２の占有割り当てを実現する。【０１５６】
＊仮想インターフェースデバイス方式：所定の通信プロセッサ４３２を占有させたいＬＰＡＲ１０１１０がアクセスするＬＵに対してだけ、所定の通信プロセッサ４３２が対応するようなリストを作成し、送信する。【０１５７】
＜＜共有通信プロセッサと共有ストレージリソースの管理＞＞
管理計算機は、ユーザ入力に基づいて、所定の通信プロセッサ４３２及び所定のストレージリソースを共有用途として記憶する。そして、管理計算機は、以後のＬＰＡＲ１０１１０に対する占有割り当てを行う場合は、共有用途として管理された所定の通信プロセッサ４３２及び所定のストレージリソースは占有使用対象から除外するように割り当てのための処理を行う。【０１５８】
＜＜Ｉ／Ｏ性能要件に基づいた通信プロセッサ４３２及びストレージリソースの割り当て＞＞
アプリケーション４１１のＳＬＯ（Ｓｅｒｖｉｃｅ  Ｌｅｖｅｌ  Ｏｂｊｅｃｔｉｖｅ）等からＬＰＡＲ１０１１０に対して明確なＩ／Ｏ性能要件を持つ場合、管理計算機は、そのＩ／Ｏ性能要件（典型的にはユーザインターフェースを通じて受信する）に基づいて適切な数の通信プロセッサ４３２と、適切な数又は量のストレージリソースを算出し、ホスト１０１とストレージ装置４４０のそれぞれに対して割り当て要求を送信する。【０１５９】
図１２は、実施例２のリソース割り当てを示す図である。図１２の領域１２０１はＩＯＰＳ要件と各通信プロセッサ４３２及びストレージリソースの限界能力との関係を表した図である。また、図１２の領域１２０２は帯域要件と各通信プロセッサ４３２及びストレージリソースの限界能力との関係を表した図である。【０１６０】
なお、各領域の高さは要件の大きさか、各通信プロセッサ４３２又はストレージリソースの限界性能の大きさを表している。なお、ＩＯＰＳと帯域については各要件に影響を及ぼす通信プロセッサ４３２及びストレージリソースの限界性能の最小値がＬＰＡＲ１０１１０の限界性能となる。ただし、プールについてはその前にキャッシュメモリ４４０１２の効果があるため、その点は踏まえる必要がある。【０１６１】
領域１２０１ではＬＰＡＲ＃１の１０ＫＩＯＰＳのＩＯＰＳ要件に基づいて、通信プロセッサ４３２が２つ、ストレージプロセッサ４４０１１が１つ、及びプール＃Ａの占有割り当てが好適と計算した例を示している。このように、ＩＯＰＳ要件を満たすためには、ＩＯＰＳに影響を及ぼす通信プロセッサ４３２、及びストレージプロセッサ４４０１１やプールの何れの限界性能もＩＯＰＳ要件以上であることが原則である。【０１６２】
ただし、ストレージプロセッサ４４０１１の例のように、僅かに限界性能が不足し、新たにストレージプロセッサ４４０１１を割り当てると過度な割り当てとなる場合はこのような追加割り当てをしなくてもよい。このようにして管理計算機は、ユーザ入力で指定されたＩＯＰＳ要件を満たすための通信プロセッサ４３２の数及びストレージリソースの数又は量の計算を行う。領域１２０２についても同様である。【０１６３】
なお、各種要件が所定の値未満である場合に、管理計算機は、その要件に対応するＬＰＡＲ１０１１０をＩ／Ｏ低優先度ＬＰＡＲとみなしてもよい。そして、Ｉ／Ｏ低優先度ＬＰＡＲか否かは要件毎に定めてもよい。例えば、ＩＯＰＳ要件についてのみＩ／Ｏ低優先度と判断した場合は、管理計算機は共有用途の通信プロセッサ４３２を当該ＬＰＡＲに共有割り当てしてもよい。【０１６４】
＜＜テンプレートに基づいたホストリソース及びストレージリソースの割り当て＞＞
引き続き図１２を用いて説明する。上述のような具体的な数値で要件を指定することは、アプリケーション４１１及びそのアプリケーション４１１の用途等で定まるＩ／Ｏ特性を熟知していなければ困難である。よって割り当てテンプレートを管理計算機が保有し、ユーザがそのテンプレートを指定したらその指定されたテンプレートの内容に沿ってホストリソース、ストレージリソースを割り当てる。【０１６５】
図１２ではその一例としてＯＬＴＰ（Ｏｎ‐Ｌｉｎｅ  Ｔｒａｎｓａｃｔｉｏｎ  Ｐｒｏｃｅｓｓｉｎｇ）  Ｇｏｌｄテンプレートと、ＤＷＨ（Ｄａｔａ  ＷａｒｅＨｏｕｓｅ）  Ｓｉｌｖｅｒテンプレートが示されている。なお、このテンプレートは、上述のＩ／Ｏ特性を熟知したユーザが事前作成した情報であって、図１２の例ではＯＬＴＰ  Ｇｏｌｄテンプレートでは、ＩＯＰＳ要件は１０ＫＩＯＰＳ、帯域要件は１ＧＢｙｔｅ／ｓのが必要であると記述された例である。なお、テンプレートにはこのようなＩ／Ｏ性能要件の数値の代わりとして、ホストリソース、通信プロセッサ４３２、ストレージリソースの数や量が記述されていてもよい。さらに、テンプレートには、割り当てが占有が必須か、共有でもよいか示す情報が含まれていてもよい。
以上、実施例２について説明した。【０１６６】
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。
【図１】
2016056140.tif 000003
【図２】
2016056140.tif 000004
【図３】
2016056140.tif 000005
【図４】
2016056140.tif 000006
【図５】
2016056140.tif 000007
【図６】
2016056140.tif 000008
【図７】
2016056140.tif 000009
【図８】
2016056140.tif 000010
【図９】
2016056140.tif 000011
【図１０】
2016056140.tif 000012
【図１１】
2016056140.tif 000013
【図１２】
2016056140.tif 000014
【手続補正書】
【提出日】平成29年2月27日(2017.2.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項７
【補正方法】変更
【補正の内容】
【請求項７】
請求項６記載の計算機システムであって、
前記デバイスドライバがＬＰＡＲで実行される場合は、複数の論理パーティションの各々で前記デバイスドライバが実行され、
前記管理計算機は、各ＬＰＡＲで実行されている前記デバイスドライバに対して異なる通信プロセッサの識別子を送信することで、占有使用を各ＬＰＡＲに設定する、
計算機システム。
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項９
【補正方法】変更
【補正の内容】
【請求項９】
請求項１記載の計算機システムであって、
前記ホスト計算機は、下記（ｉ）乃至（ｉｉｉ）を占有して割り当てる第２論理パーティションを作成し：
（ｉ）前記第１ホストメモリ領域以外の前記ホストメモリの一部の領域である第２ホストメモリ領域と、
（ｉｉ）前記第１論理パーティションに割り当てた以外の前記複数のホストプロセッサの少なくとも１つと、
（ｉｉｉ）前記第１論理パーティションに割り当てた以外の前記複数の通信プロセッサの少なくとも１つ、
前記第１論理パーティションにて実行する第１アプリケーションと、前記第２論理パーティションにて実行する第２アプリケーションとは、Ｉ／Ｏコマンドが対象とする転送データ長の平均値が異なる、
計算機システム。
【国際調査報告】
2016056140.tif 000015
2016056140.tif 000016
2016056140.tif 000017
2016056140.tif 000018