(57)【要約】  計算機システムは、メモリ及び複数のＣＰＵコアを有する少なくとも１つの計算機と、記憶デバイスを用いて構成される複数の論理記憶ユニットを有するストレージサブデバイスとを含む。計算機において、メモリには複数のキューが構成されており、当該複数のキューの各々には複数のＣＰＵコアのうちの少なくとも１つが割り当てられている。キューは、当該キューの割り当てられたＣＰＵコアから論理記憶ユニットに対して発行されるＩ／Ｏコマンドがエンキューされるものである。計算機システムは、各キューから各論理記憶ユニットへのアクセス許否に関する情報を含むアクセス制御情報を有する。
2017072827.tif 000002
【特許請求の範囲】
【請求項１】
メモリ及び複数のＣＰＵコアを有する少なくとも１つの計算機と、
記憶デバイスを用いて構成される複数の論理記憶ユニットを有するストレージサブデバイスと、
を含む計算機システムであって、
前記計算機において、
前記メモリには複数のキューが構成されており、
当該複数のキューの各々には複数のＣＰＵコアのうちの少なくとも１つが割り当てられており、
キューは、当該キューの割り当てられたＣＰＵコアから論理記憶ユニットに対して発行されるＩ／Ｏコマンドがエンキューされるものであり、
各キューから各論理記憶ユニットへのアクセス許否に関する情報を含むアクセス制御情報を有する
計算機システム。
【請求項２】
前記計算機に構成された複数のキューをグループとして管理するためのキューグループ情報をさらに有し、
前記キューグループ情報において１つのグループに属する各キューについての前記アクセス制御情報における各論理記憶ユニットへのアクセス許否は、同一の設定に一括で変更される
請求項１に記載の計算機システム。
【請求項３】
前記計算機は、物理計算機上で稼働する仮想計算機であり、
前記メモリ及び前記ＣＰＵコアは、それぞれ、前記仮想計算機が有する仮想メモリ及び仮想ＣＰＵコアであり、
前記物理計算機と前記ストレージサブデバイスとは、Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）に準拠するインターフェースによって接続されており、
前記ストレージサブデバイスは、前記アクセス制御情報に基づいて、キューにエンキューされたＩ／Ｏコマンドの論理記憶ユニットへのアクセス許否を判定し、
前記物理計算機又は所定の管理計算機で実行されるキュー管理機構は、前記キューグループ情報を管理する
請求項２に記載の計算機システム。
【請求項４】
前記仮想計算機は、仮想ＣＰＵコアの数に基づいて決定されるキューの要求数を含むキュー割当要求コマンドを、前記キュー管理機構へ送信し、
前記キュー管理機構は、前記仮想計算機から受領したキュー要求コマンドに含まれるキューの要求数に基づいて当該仮想計算機に割り当てるキューの数を決定し、その決定した数のキューが属するグループを作成するためのキューグループ作成コマンドを、前記ストレージサブデバイスへ送信する
請求項３に記載の計算機システム。
【請求項５】
前記キュー管理機構は、前記キューグループ情報において１つのグループに属する全てのキューに関するアクセス許否を同一の設定に一括で変更するためのアクセス設定コマンドを、前記ストレージサブデバイスへ送信する
請求項４に記載の計算機システム。
【請求項６】
前記キュー管理機構は、或るグループに属するキューにエンキューされたＩ／Ｏコマンドのうち、アクセス拒否と判定されたＩ／Ｏコマンドの数を、そのグループに属するキューの構成されている仮想計算機と対応付けて表示する
請求項４に記載の計算機システム。
【請求項７】
前記計算機は、物理計算機上で稼働する仮想計算機であり、
前記メモリ及び前記ＣＰＵコアは、それぞれ、前記仮想計算機が有する仮想メモリ及び仮想ＣＰＵコアであり、
前記物理計算機を前記ストレージサブデバイスに接続するためのアダプタ装置をさらに含み、
前記物理計算機と前記アダプタ装置とは、Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）に準拠するインターフェースによって接続されており、
前記アダプタ装置は、前記アクセス制御情報に基づいて、キューにエンキューされたＩ／Ｏコマンドの論理記憶ユニットへのアクセス許否を判定し、
前記アダプタ装置で実行されるキュー管理機構が、前記キューグループ情報を管理する
請求項２に記載の計算機システム。
【請求項８】
前記アダプタ装置は、前記アクセス許否の判定結果がアクセス拒否であった場合、前記Ｉ／Ｏコマンドを前記ストレージサブデバイスへ送信しない
請求項７に記載の計算機システム。
【請求項９】
前記アクセス制御情報は、複数のキューＩＤと複数の論理記憶ユニットＩＤとによって構成されるビットマップであり、１つのキューＩＤと１つの論理記憶ユニットＩＤとによって特定されるビットが、その特定したキューＩＤからその特定した論理記憶ユニットＩＤへのアクセス許否を示す
請求項２に記載の計算機システム。
【請求項１０】
前記キューグループ情報は、複数のグループＩＤと複数のキューＩＤとによって構成されるビットマップであり、１つのグループＩＤによって特定されるビット列が、当該グループＩＤに属するキューＩＤを示す
請求項９に記載の計算機システム。
【請求項１１】
グループＩＤに属する全てのキューＩＤから各論理記憶ユニットＩＤへのアクセス許否を同一の設定に一括で変更するとは、前記キューグループ情報から、設定変更対象のグループＩＤに対応するキューＩＤのビット列を取得し、その取得したキューＩＤのビット列と、設定変更対象の論理記憶ユニットＩＤと、設定変更後のビットとを用いて、前記アクセス制御情報のビット列を一括で置換することである
請求項１０に記載の計算機システム。
【請求項１２】
メモリ及び複数のＣＰＵコアを有する少なくとも１つの計算機において、前記メモリには複数のキューが構成されており、当該複数のキューの各々には複数のＣＰＵコアのうちの少なくとも１つが割り当てられており、
キューに、当該キューの割り当てられたＣＰＵコアから論理記憶ユニットに対して発行されるＩ／Ｏコマンドがエンキューされると、各キューから各論理記憶ユニットへのアクセス許否に関する情報を含むアクセス制御情報に基づいて、当該Ｉ／Ｏコマンドの当該論理記憶ユニットへのアクセス許否を判定する
アクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、計算機システムの技術に関し、特に、アクセス制御の技術に関する。
【背景技術】
【０００２】
Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）などのフラッシュメモリベースのストレージデバイスは、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ（ＨＤＤ）と比較して非常に高いＩ／Ｏ性能を有する。このような比較的Ｉ／Ｏ性能の高いストレージデバイスを接続するためのＩ／Ｆ規格として、Ｎｏｎ−ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）が知られている（非特許文献１）。ＮＶＭｅは、コマンド発行元のデバイスドライバとストレージデバイスとの間に、コマンドを処理するためのキュー（Ｓｕｂｍｉｓｓｉｏｎ  ＱｕｅｕｅとＣｏｍｐｌｅｔｉｏｎ  Ｑｕｅｕｅ）を複数有することができる。これによりＮＶＭｅは、コマンド発行元のデバイスドライバとストレージデバイスとの間の通信速度の向上を図っている。【０００３】
特許文献１には、ＮＶＭｅに準拠するストレージデバイスについて、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バス上に存在する物理機能と、Ｓｉｎｇｌｅ  Ｒｏｏｔ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｖｉｒｔｕａｌｉｚａｔｉｏｎ（ＳＲ−ＩＯＶ）に基づいて生成した仮想機能とを用いて、ストレージデバイスにアクセス制御処理を行わせる方法が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第９００３０７１号
【非特許文献】
【０００５】
【非特許文献１】”NVM Express” Revision 1.1b July 2, 2014
【非特許文献２】Intel Virtualization Technology for Directed I/O, Architecture Specification, October 2014, Rev2.3
【非特許文献３】AMD I/O Virtualization Technology (IOMMU) Specification, Rev2.62, February 2015, Pub#48882
【非特許文献４】http://www.synopsys.com/Japan/today-tomorrow/Pages/tt82_pci_express_part2.aspx
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＳＲ−ＩＯＶを前提としている特許文献１に開示の技術では、アクセス制御機能においてもＳＲ−ＩＯＶに起因する計算機上の制約が生じる。ここで、特に明言しない限り、計算機は、物理計算機及び仮想計算機の両方を含む。この制約の例としては、下記のいずれか一つ以上がある。【０００７】
（制約１）ＰＣＩｅにて指定できるファンクションの数が少ない。ＰＣＩｅ  Ｇｅｎ２では３ｂｉｔ分、Ｇｅｎ３ではＡｌｔｅｒｎａｔｉｖｅ  Ｒｏｕｔｉｎｇ  ＩＤ  Ｉｎｔｅｒｐｒｅｔａｔｉｏｎ（ＡＲＩ）を使用したとしても８ｂｉｔ分のＴｒａｎｓａｃｔｉｏｎ  Ｌａｙｅｒ  Ｐａｃｋｅｔ（ＴＬＰ）ヘッダーのルーティングＩＤフィールドしか用意されていない。したがって、ストレージデバイスが複数のエンドポイントを持たない限り２５６個を超えるファンクションを提供できない。結果として、特許文献１の技術では、ＰＣＩｅ規格の最大ファンクション数を超える独立したアクセス制御の設定は困難であり、仮に可能であったとしても１つのデバイスで複数のエンドポイントを備える必要がある。【０００８】
（制約２）仮想ファンクションは、物理ファンクションと比較して少ないハードウェアリソースで実現できるようになっている。非特許文献４には、仮想ファンクションのゲート実装コストが、物理ファンクションの１０分の１であることが開示されている。しかし、それでも大量の仮想ファンクションを生成するためには、デバイスに多くのハードウェアリソースが必要となる。【０００９】
（制約３）計算機が、ＳＲ−ＩＯＶに対応した、Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ（ＢＩＯＳ）、Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ（ＥＦＩ）、又は、ＮＶＭｅデバイスドライバを必要とする。【００１０】
本発明の目的は、ＳＲ−ＩＯＶに起因する制約が少ないアクセス制御を伴ったＮＶＭｅストレージを提供することである。本発明の他の目的は実施例にて明らかになるであろう。
【課題を解決するための手段】
【００１１】
一実施例に係る計算機システムは、メモリ及び複数のＣＰＵコアを有する少なくとも１つの計算機と、記憶デバイスを用いて構成される複数の論理記憶ユニットを有するストレージサブデバイスと、を含む。計算機において、メモリには複数のキューが構成されており、当該複数のキューの各々には複数のＣＰＵコアのうちの少なくとも１つが割り当てられている。キューは、当該キューの割り当てられたＣＰＵコアから論理記憶ユニットに対して発行されるＩ／Ｏコマンドがエンキューされるものである。計算機システムは、各キューから各論理記憶ユニットへのアクセス許否に関する情報を含むアクセス制御情報を有する。
【発明の効果】
【００１２】
本発明によれば、ＳＲ−ＩＯＶに起因する制約が少ないアクセス制御を伴ったＮＶＭｅストレージを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】計算機システムの論理構成の例を示す。
【図２】キューグループ操作コマンド、アクセス権操作コマンドの構成例を示す。
【図３】キュー割当要求、キュー割当応答、キュー解放要求の構成の例を示す。
【図４】第１のキュー作成要求、第１のキュー作成応答、キュー削除要求の構成例を示す。
【図５】Ｉ／Ｏ要求、Ｉ／Ｏ応答の構成の例を示す。
【図６】実施例１に係る計算機システムのハードウェア構成の例を示す。
【図７】実施例１に係る計算機システムの論理構成の例を示す。
【図８】ＡＣＬの構成の例を示す。
【図９】キューグループテーブルの構成例を示す。
【図１０】アクセス違反ログの構成例を示す。
【図１１】第２のキュー作成要求、第２のキュー作成応答の構成例を示す。
【図１２】キュー割当管理画面の例を示す。
【図１３】アクセス違反表示画面の例を示す。
【図１４】デバイスドライバがロードされる際の動作例を示すフローチャートである。
【図１５】デバイスドライバがアンロードされる際の動作例を示すフローチャートである。
【図１６】キュー管理機構の動作例を示すフローチャートである。
【図１７】ストレージサブコントローラの動作例を示すフローチャートである。
【図１８】実施例２に係る計算機システムのハードウェア構成の例を示す。
【図１９】実施例２に係る計算機システムの論理構成の例を示す。
【図２０】ＧＰＡ−ＨＰＡ操作コマンドの構成例を示す。
【図２１】ＧＰＡ―ＨＰＡ変換テーブルリストの構成例を示す。
【図２２】実施例３に係る計算機システムのハードウェア構成の例を示す。
【図２３】実施例３に係る計算機システムの論理構成の例を示す。
【発明を実施するための形態】
【００１４】
以下、幾つかの実施例を説明する。なお、以後の説明では「ａａａテーブル」、「ａａａリスト」、「ａａａキュー」等の表現にて本発明の情報を説明するが、これらの情報は、テーブル、リスト、キュー、等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」、「ａａａリスト」、「ａａａキュー」等について「ａａａ情報」と呼ぶことがある。さらに、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることがあるが、これらについてはお互いに置換が可能である。
【００１５】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御デバイス）を用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。
【００１６】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。この場合、プログラム配布サーバはＣＰＵと記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムを記憶している。そして、配布プログラムをＣＰＵが実行することで、プログラム配布サーバのＣＰＵは配布対象のプログラムを他の計算機に配布する。
【００１７】
なお、管理計算機は入出力デバイスを有する。入出力デバイスの例としてはディスプレイとキーボードとポインタデバイスとが考えられるが、これ以外のデバイスであってもよい。また、入出力デバイスの代替としてシリアルインターフェースやイーサーネットインターフェースを入出力デバイスとし、当該インターフェースにディスプレイ又はキーボード又はポインタデバイスを有する表示用計算機を接続し、表示用情報を表示用計算機に送信したり、入力用情報を表示用計算機から受信することで、表示用計算機で表示を行ったり、入力を受け付けることで入出力デバイスでの入力及び表示を代替してもよい。
【００１８】
以後、情報処理システムを管理し、本願発明の表示用情報を表示する一つ以上の計算機の集合を管理システムと呼ぶことがある。管理計算機が表示用情報を表示する場合は管理計算機が管理システムである、また、管理計算機と表示用計算機の組み合わせも管理システムである。また、管理処理の高速化や高信頼化のために複数の計算機で管理計算機と同等の処理を実現してもよく、この場合は当該複数の計算機（表示を表示用計算機が行う場合は表示用計算機も含め）が管理システムである。
【００１９】
図１は、計算機システム１の論理構成例を示す。
【００２０】
計算機システム１は、１つ以上のサーバ装置２００と、ストレージサブデバイス３００とを含む。
【００２１】
ストレージサブデバイス３００は、記憶メディアと、ストレージサブコントローラ３１０と、アクセスコントローラ４００とを有する。記憶メディアは、データのリード／ライトが可能な不揮発性記憶媒体から構成されており、例えば、フラッシュメモリチップである。ストレージサブコントローラ３１０は、ストレージサブデバイス３００の全体を制御し、当該ストレージサブデバイス３００の有する各種機能を実現する。ストレージサブコントローラ３１０は、記憶メディアの記憶領域を１つ以上の論理的なユニット（「ＬＵ」という）３２０に分割して管理してよい。各ＬＵ３２０にはＩＤが付与されてよい。
【００２２】
アクセスコントローラ４００は、各ＬＵ３２０に対するアクセス権を管理及び制御する。ストレージサブデバイス３００がＮＶＭｅに対応している場合、アクセス先のＬＵ３２０の指定にはＮａｍｅＳｐａｃｅ（ＮＳ）が用いられてよい。アクセスコントローラ４００は、ストレージサブコントローラ３１０で実行されるプログラムあってもよいし、ストレージサブデバイス３００に搭載される専用回路であってもよい。アクセスコントローラ４００の機能の詳細については後述する。
【００２３】
サーバ装置２００は、１つ以上のＣＰＵコア２１０と、メモリ２２０とを有する。メモリ２２０には、ストレージサブコントローラ３１０からアクセスが可能なＩ／Ｏキュー５００が構築されてよい。また、メモリ２２０には、プログラムの一種であるデバイスドライバ２３０が格納されてよい。デバイスドライバ２３０は、ＣＰＵコア２１０に実行され、Ｉ／Ｏキュー５００の生成及び削除などを行ってよい。
【００２４】
計算機システム１は、キュー管理機構１１０を有する。キュー管理機構１１０は、それぞれのサーバ装置２００に割り当てた複数のＩ／Ｏキュー５００を、キューグループとして管理する。キュー管理機構１１０の機能の詳細については後述する。キュー管理機構１１０は、何れかのサーバ装置２００で実行されるプログラム又は当該サーバ装置２００に搭載される専用回路であってもよい。又は、キュー管理機構１１０は、各サーバ装置２００及びストレージサブデバイス３００と双方向通信可能な所定の管理計算機で実行されるプログラム又は当該管理計算機に搭載される専用回路であってもよい。又は、キュー管理機構１１０は、サーバ装置２００とストレージサブデバイス３００とを結ぶネットワーク上に存在するスイッチ装置で実行されるプログラム又は当該スイッチ装置に搭載される専用回路であってもよい。
【００２５】
サーバ装置２００のＣＰＵコア２１０は、当該ＣＰＵコア２１０に静的（固定的）に割り当てられたＩ／Ｏキュー５００に、Ｉ／Ｏコマンドの一種であるＩ／Ｏ要求７００をエンキューすることにより、ストレージサブデバイス３００に対してＩ／Ｏを要求することができる。Ｉ／Ｏキュー５００が未割当のＣＰＵコア２１０は、ストレージサブデバイス３００に対してＩ／Ｏを要求することができない。ここで、「静的」とは、ＣＰＵコア２１０とＩ／Ｏキュー５００との割り当て関係が途中で動的に変更されないという意味である。
【００２６】
ストレージサブデバイス３００は、複数のＩ／Ｏキュー５００にそれぞれ対応する複数のキューリソース３１１を有する。Ｉ／Ｏキュー５００とそれに対応するキューリソース３１１のセットは、それぞれにキューＩＤが付与されてよい。
【００２７】
ストレージサブデバイス３００は、Ｉ／Ｏキュー５００にエンキューされたＩ／Ｏ要求７００を、そのＩ／Ｏキュー５００に対応するキューリソース３１１にデキューし、そのＩ／Ｏキュー５００に付与されたキューＩＤを特定することができる。
【００２８】
アクセスコントローラ４００は、各ＬＵ  ＩＤに対する各キューＩＤのアクセス権の設定（例えばアクセス許否の設定）を含むＡＣＬ４１０を用いて、キューＩＤ５１０の単位で各ＬＵ  ＩＤに対するアクセス権を制御してよい。又は、アクセスコントローラ４００は、各キューグループＩＤに属するキューＩＤの情報を含むキューキューグループ４２０と上記ＡＣＬ４１０とを用いて、キューグループＩＤの単位で各ＬＵ  ＩＤに対するアクセス権を制御してよい。
【００２９】
キュー管理機構１１０とサーバ装置２００のデバイスドライバ２３０とは、キューの割当に関する管理コマンド６２０、６３０、６４０を送受信する。また、キュー管理機構１１０とデバイスドライバ２３０とは、キューの生成に関する管理コマンド６５０、６６０、６７０を送受信する。これらの管理コマンド６２０、６３０、６４０、６５０、６６０、６７０の詳細については後述する。キュー管理機構１１０とストレージサブデバイス３００のアクセスコントローラ４００とは、キューグループの操作に関する管理コマンド６００、６１０を送受信する。これらの管理コマンド６００、６１０の詳細については後述する。
【００３０】
次に、サーバ装置２００に割り当てるキューの数を決定する処理の一例を述べる（ステップＳ１１乃至Ｓ１３）。
【００３１】
（Ｓ１１）サーバ装置２００のデバイスドライバ２３０は、キュー割当要求６２０（図３参照）を、キュー管理機構１１０へ送信する。キュー割当要求６２０には、サーバ装置２００が要求するキューの数が含まれてよい。この要求キュー数は、サーバ装置２００に搭載されているＣＰＵコア２１０の数であってよい。
【００３２】
（Ｓ１２）キュー管理機構１１０は、キュー割当要求６２０を受領し、そのキュー割当要求６２０の発行元のサーバ装置２００に割り当てるキューの数を決定する。キュー管理機構１１０は、ストレージサブデバイス３００の空きキュー数を管理しておき、その空きキュー数が要求キュー数以上である場合、要求キュー数の分をそのサーバ装置２００に割り当てると決定してもよい。キュー管理機構１１０は、空きキュー数が要求キュー数未満である場合、その空きキュー数の分をそのサーバ装置２００に割り当てると決定してもよい。そして、キュー管理機構１１０は、その決定した割当キュー数とそれら割り当てるキューのＩＤとを含むキュー割当応答６３０（図３参照）を、デバイスドライバ２３０へ送信する。
【００３３】
（Ｓ１３）デバイスドライバ２３０は、キュー割当応答６３０を受領すると、そのキュー割当応答６３０に含まれるキューＩＤのキューを、それぞれ、ＣＰＵコア２１０に割り当てる。デバイスドライバ２３０は、割当キュー数がサーバ装置２００の有するＣＰＵコア２１０の数以上である場合、１つのキューＩＤを１つのＣＰＵコア２１０に割り当ててよい。デバイスドライバ２３０は、割当キュー数がサーバ装置２００の有するＣＰＵコア２１０の数未満である場合、１つのキューＩＤを２つ以上のＣＰＵコア２１０に割り当ててもよい。この場合、これら２つ以上のＣＰＵコア２１０は、その１つのキューＩＤを共有する。
【００３４】
以上の処理により、それぞれのサーバ装置２００に割り当てるキューの数が決定される。
【００３５】
次に、サーバ装置２００とストレージサブデバイス３００との間にキューのセットを作成する処理の一例を述べる（ステップＳ２１乃至Ｓ２５）。サーバ装置２００は、上記のステップＳ１１乃至Ｓ１３によって自分に割り当てられた数の分のキューを作成する。以下は、そのうちの１つのキューを作成する処理である。
【００３６】
（Ｓ２１）デバイスドライバ２３０は、上記ステップＳ１３で受領したキュー割当応答６３０に含まれるキューＩＤのうちの１つを選択する。そして、デバイスドライバ２３０は、その選択したキューＩＤを含むキュー作成要求６５０（図４参照）を、キュー管理機構１１０へ送信する。
【００３７】
（Ｓ２２）キュー管理機構１１０は、そのキュー作成要求６５０を受領し、ストレージサブデバイス３００へ転送する。
【００３８】
（Ｓ２３）ストレージサブデバイス３００は、そのキュー作成要求６５０を受領し、そのキュー作成要求６５０に含まれるキューＩＤ６５１に対応するキュー５００及びキューリソース３１１のセットを生成する。そして、ストレージサブデバイス３００は、キュー作成応答６６０（図４参照）を、キュー管理機構１１０へ送信する。
【００３９】
（Ｓ２４）キュー管理機構１１０は、そのキュー作成応答６６０を受領し、デバイスドライバ２３０へ転送する。
【００４０】
（Ｓ２５）デバイスドライバ２３０は、そのキュー作成応答６６０を受領する。
【００４１】
以上の処理により、サーバ装置２００とストレージサブデバイス３００との間にキューのセットが作成される。
【００４２】
次に、キューグループに新規にキューを所属させる処理の一例を述べる（ステップＳ３１乃至Ｓ３２）。
【００４３】
（Ｓ３１）キュー管理機構１１０は、管理コマンドの一種であるキューグループ操作コマンド６００（図２参照）を、ストレージサブデバイス３００へ送信する。キューグループ操作コマンド６００には、キューグループＩＤ６０１と、キューの「追加」を示す操作タイプ６０２と、そのキューグループＩＤ６０１に所属させる１つ以上のキューＩＤ６０４とが含まれてよい。
【００４４】
（Ｓ３２）そのキューグループ操作コマンド６００を受領したアクセスコントローラ４００は、キューグループＩＤ６０１にキューＩＤ６０４が所属するように、キューグループテーブル４２０を変更する。
【００４５】
以上の処理により、キューグループＩＤとキューＩＤとの所属関係が、キューグループテーブル４２０に反映される。
【００４６】
次に、ＬＵ３２０に対するアクセス権を変更する処理の一例を述べる。
【００４７】
（Ｓ４１）キュー管理機構１１０は、管理コマンドの一種であるアクセス権操作コマンド６１０を（図２参照）、ストレージサブデバイス３００へ送信する。アクセス権操作コマンド６１０には、変更対象のキューグループＩＤ６１１と、変更後のアクセス権（例えばアクセス「許可」又は「拒否」）を示す操作タイプ６１２と、変更対象の１つ以上のＬＵ  ＩＤ６１４とが含まれてよい。
【００４８】
（Ｓ４２）そのアクセス権操作コマンド６１０を受領したアクセスコントローラ４００は、ＡＣＬ４１０を操作し、変更対象のキューグループＩＤ６１１に属する各キューＩＤから変更対象のＬＵ  ＩＤ６１４へのアクセス権を、変更後のアクセス権に変更する。
【００４９】
以上の処理により、キューグループの単位でアクセス権を設定及び変更することができる。
【００５０】
図２は、キューグループ操作コマンド６００、アクセス権操作コマンド６１０の構成例を示す。
【００５１】
キューグループ操作コマンド６００は、キュー管理機構１１０が、キューグループを操作するための管理コマンドである。キューグループ操作コマンド６００は、項目値（フィールド値）として、キューグループＩＤ６０１と、操作タイプ６０２と、１つ以上のキューＩＤ６０４を含むキューＩＤリスト６０３と、を含んでよい。キューグループＩＤ６０１は、操作対象とするキューグループのＩＤである。
【００５２】
操作タイプ６０２は、ＩＤ６０１のキューグループをどのように操作するかを示す情報である。操作タイプ６０２「追加」は、キューグループＩＤ６０１に、キューＩＤリスト６０３に含まれるキューＩＤ６０４を追加する操作を示してよい。操作タイプ６０２「削除」は、キューグループＩＤ６０１から、キューＩＤリスト６０３に含まれるキューＩＤ６０４を削除する操作を示してよい。
【００５３】
アクセス権操作コマンド６１０は、キュー管理機構１１０が、各ＬＵ３２０に対するキューグループからのアクセス権を操作するための管理コマンドである。アクセス権操作コマンド６１０は、項目値（フィールド値）として、キューグループＩＤ６１１と、操作タイプ６１２と、１つ以上のＬＵ  ＩＤ６１４を含むＬＵ  ＩＤリスト６１３とを含んでよい。キューグループＩＤ６１１は、当該アクセス権操作コマンド６１０が操作対象とするキューグループのＩＤである。
【００５４】
操作タイプ６１２は、ＩＤ６１１のキューグループにどのようなアクセス権を設定するかを示す情報である。操作タイプ６１２「許可」は、キューグループＩＤ６１１に属するキューＩＤから、ＬＵ  ＩＤリスト６１３に含まれるＬＵ  ＩＤ６１４へのアクセスを許可に設定する操作を示してよい。操作タイプ６１２「拒否」は、キューグループＩＤ６１１に属するキューＩＤから、ＬＵ  ＩＤリスト６１３に含まれるＬＵ  ＩＤ６１４へのアクセスを拒否に設定する操作を示してよい。
【００５５】
図３は、キュー割当要求６２０、キュー割当応答６３０、キュー解放要求６４０の構成例を示す。
【００５６】
キュー割当要求６２０は、デバイスドライバ２３０が、キュー管理機構１１０に対して、キューの割り当てを要求するための管理コマンドである。キュー割当要求６２０は、項目値（フィールド値）として、要求キュー数６２１を含んでよい。
【００５７】
要求キュー数６２１は、デバイスドライバ２３０（サーバ装置２００）が要求するキューの数である。典型的には、要求キュー数６２１は、デバイスドライバ２３０を含むサーバ装置２００に搭載されているＣＰＵコア２１０の数と同数以上であってよい。複数のＣＰＵコア２１０が１つのキュー５００を取り合い、競合が発生することを防止するためである。しかし、要求キュー数６２１は、サーバ装置２００に搭載されているＣＰＵコア２１０の数よりも少なくてもよい。この場合、複数のＣＰＵコア２１０が１つのキュー５００を共有してよい。
【００５８】
キュー割当応答６３０は、キュー管理機構１１０が、デバイスドライバ２３０に対して、キュー割当要求６２０の実行結果を応答するための管理コマンドである。キュー割当応答６３０は、項目値（フィールド値）として、割当キュー数６３１、ストレージサブデバイス情報６３２、キューＩＤリスト６３３を含んでよい。
【００５９】
割当キュー数６３１は、デバイスドライバ２３０に割り当てるキューの数である。キュー管理機構１１０は、空き（未割当の）キュー数が要求キュー数６２１以上である場合、割当キュー数６３１を要求キュー数６２１と同じにしてよい。キュー管理機構１１０は、空きキュー数が要求キュー数６２１未満である場合、割当キュー数６３１を要求キュー数６２１よりも小さく（例えば空きキュー数と）してよい。
【００６０】
ストレージサブデバイス情報６３２は、ストレージサブデバイス３００へアクセスするために必要な情報である。ストレージサブデバイス情報６３２の例は、ストレージサブデバイス３００のＩＰアドレスである。キューＩＤリスト６３３に含まれるキューＩＤ６３４は、デバイスドライバ２３０に割り当てられるキューのＩＤである。
【００６１】
キュー解放要求６４０は、デバイスドライバ２３０が、キュー管理機構１１０に対して、自分のサーバ装置２００に割り当てられているキューの解放を要求するための管理コマンドである。
【００６２】
図４は、第１のキュー作成要求６５０、第１のキュー作成応答６６０、キュー削除要求６７０の構成例を示す。
【００６３】
第１のキュー作成要求６５０は、キュー管理機構１１０が、ストレージサブデバイス３００に対して、キューの作成を要求するための管理コマンドである。キュー管理機構１１０は、デバイスドライバ２３０から例えば図１１に示すような第２のキュー作成要求６８０を受領した場合、その第２のキュー作成要求６８０に基づいて第１のキュー生成要求６５０を生成し、それをストレージサブデバイス３００へ送信してよい。
【００６４】
第１のキュー作成要求６５０は、項目値（フィールド値）として、キューＩＤ６５１と、ベースアドレス６５２と、エントリ数６５３とを含んでよい。キューＩＤ６５１は、作成を要求するキューのＩＤである。ベースアドレス６５２は、サーバ装置２００のメモリ２２０における、ＩＤ６５１のキューを作成するアドレスである。エントリ数６５３は、ＩＤ６５１のキューにエントリ可能な数である。
【００６５】
第１のキュー作成要求６５０を送出するデバイスドライバ２３０は、その要求６５０に含まれるメモリ２２０のベースアドレス６５２に、エントリ数６５１から算出したサイズのメモリ領域をメモリ２２０上に確保し、キューＩＤ６５１に対応するＩ／Ｏキュー５００を作成してよい。
【００６６】
第１のキュー作成要求６５０の内容を受領したストレージコントローラ３１０は、その要求６５０に含まれるキューＩＤ６５１に対応するキューリソース３１１を作成してもよい。
【００６７】
第１のキュー作成応答６６０は、デバイスドライバ２３０が、キュー管理機構１１０に対して、第１のキュー作成要求６５０の実行結果を応答するための管理コマンドである。ストレージコントローラ３１０は、第１のキュー作成要求６５０の実行結果を含む第１のキュー作成応答６６０を生成し、それをキュー管理機構１１０へ送信してよい。第１のキュー作成応答６６０を受領したキュー管理機構１１０は、その第１のキュー作成応答６６０に基づいて、例えば図１１に示すような第２のキュー作成応答６９０を生成し、それをデバイスドライバ２３０へ送信してよい。
【００６８】
第１のキュー作成応答６６０は、項目値（フィールド値）として、ステータス６６１を含んでよい。ステータス６６１は、キュー作成要求６５０の実行結果を示す情報である。ステータス６６１の例は、キュー作成の「成功」、「失敗」などである。
【００６９】
キュー削除要求６７０は、デバイスドライバ２３０が、キュー管理機構１１０に対して、キューの削除を要求するための管理コマンドである。キュー作成削除６７０を受領したキュー管理機構１１０は、このキュー削除要求６７０を、そのままストレージサブデバイス３００に転送してもよいし、所定の方式に変換してから転送してもよい。
【００７０】
キュー削除要求は、項目値（フィールド値）として、キューＩＤ６７１を含んでよい。キューＩＤ６７１は、削除を要求するキューのＩＤである。
【００７１】
キュー削除要求６７０を受領したストレージコントローラ３１０は、その要求６７０に含まれるキューＩＤ６７１に対応するキューリソース３１１を削除する。また、デバイスドライバ２３０はキューＩＤ６７１に対応するＩ／Ｏキュー５００を削除し、メインメモリ２２０上のメモリ領域を開放する。
【００７２】
図５は、Ｉ／Ｏ要求７００、Ｉ／Ｏ応答７１０の構成例を示す。
【００７３】
Ｉ／Ｏ要求７００は、サーバ装置２００のＣＰＵコア２１０が、ストレージサブデバイス３００のＬＵ３２０に対して、データのライト／リードなどを要求するためのＩ／Ｏコマンドである。ＣＰＵコア２１０は、自分に静的に割り当てられたキューＩＤに対応するＩ／Ｏキュー５００に、Ｉ／Ｏ要求７００をエンキューすることにより、ストレージサブデバイス３００に対してＩ／Ｏ要求７００を送信することができる。Ｉ／Ｏ要求７００は、項目値（フィールド値）として、ＬＵ  ＩＤ７０５、操作タイプ７０１、論理ブロックアドレス７０２、サイズ７０３、バッファアドレス７０４を含んでよい。
【００７４】
ＬＵ  ＩＤ７０５は、アクセス先のＬＵ３２０のＩＤである。
【００７５】
操作タイプ７０１は、ＩＤ７０５のＬＵ３２０にどのようなＩ／Ｏ操作を行うのかを示す情報である。操作タイプ７０１の例は、「ライト」、「リード」、「削除」なとである。
【００７６】
論理ブロックアドレス７０２は、ＩＤ７０５のＬＵ３２０における、アクセス先の論理ブロックのアドレスである。
【００７７】
サイズ７０３は、操作タイプ７０１が「ライト」の場合、ライトデータのサイズである。操作タイプ７０１が「リード」の場合、リードデータのサイズである。
【００７８】
バッファアドレス７０４は、操作タイプ７０１が「ライト」の場合、ライトデータが格納されているメモリ２２０のアドレスである。バッファアドレス７０４は、操作タイプ７０１が「リード」の場合、リードデータを格納するためのメモリ２２０のアドレスである。
【００７９】
Ｉ／Ｏ応答７１０は、ストレージサブコントローラ３１０が、サーバ装置２００のＣＰＵコア２１０に対して、Ｉ／Ｏ要求７００の実行結果を応答するためのＩ／Ｏコマンドである。ストレージサブコントローラ３１０は、送信先のＣＰＵコア２１０に静的に割り当てられたキューＩＤに対応するＩ／Ｏキュー５００に、Ｉ／Ｏ応答７１０をエンキューすることにより、ＣＰＵコア２１０に対してＩ／Ｏ応答７１０を送信ことができる。Ｉ／Ｏ応答７１０は、項目値（フィールド値）として、ステータス７１１と、（必要ならば）エラー情報７１２とを含んでよい。
【００８０】
ステータス７１１は、Ｉ／Ｏ要求７００の実行結果を示す情報である。ステータス７１１の例は、Ｉ／Ｏの「成功」、「失敗」などである。
【００８１】
エラー情報７１２は、ステータス７１１が「失敗」の場合、その失敗の理由を示す情報である。
【００８２】
上記のこれらのコマンドは、項目値を、当該コマンドのデータ構造に直接含んでよい。又は、サーバ装置２００、キュー管理機構１１０、及び、ストレージサブデバイス３００からアクセス可能な所定の記憶領域に上記の項目値を格納し、コマンドには、その記憶領域へのアドレス（ポインタ）のみを含めてもよい。コマンドは、要求と応答とを関連付けるためのＩＤなど、ストレージサブデバイス３００が動作するために必要な情報をさらに含んでもよい。
【実施例１】
【００８３】
図６は、実施例１に係る計算機システム１ａのハードウェア構成例を示す。図７は、実施例１に係る計算機システム１ａの論理構成例を示す。【００８４】
計算機システム１ａは、第１のサーバ装置２００ａと、１つ以上の第２のサーバ装置２００ｂとを有する。第１のサーバ装置２００ａは、ＣＰＵ２１０ａ、メモリ２２０ａ、ＮＩＣ、及び、ストレージサブデバイス３００を有してよい。これらの要素は、例えばＰＣＩｅバス２４０を介して双方向通信可能に接続されてよい。第２のサーバ装置２００ｂは、ＣＰＵ２１０ｂ、メモリ２２０ｂ、ＮＩＣを有してよい。これらの要素は、例えばＰＣＩｅバスを介して双方向通信可能に接続されてよい。第１のサーバ装置２００ａと第２のサーバ装置２００ｂとは、ネットワーク２５０を介して双方向通信可能に接続されてよい。ネットワーク２５０の例は、Ｅｔｈｅｒｎｅｔ（登録商標）、ＩｎｆｉｎｉＢａｎｄ、及び、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌである。【００８５】
第１のサーバ装置２００ａのメモリ２２０ａには、キュー管理機構１１０ａを実現するためのプログラムと、デバイスドライバ２３０ａを実現するためのプログラムとが格納されてよい。メモリ２２０ａには、第１のサーバ装置２００ａのＣＰＵコア２１０ａとストレージサブデバイス３００との間でやり取りされるＩ／Ｏコマンド７００、７１０を格納するためのＩ／Ｏキュー５００ａが設けられてよい。メモリ２２０ａには、第２のサーバ装置２００ｂのＣＰＵコア２１０ｂとストレージサブデバイス３００との間でやり取りされるＩ／Ｏコマンド７００、７１０を格納するためのＩ／Ｏキュー５００ｂが設けられてよい。この場合、第２のサーバ装置２００ｂのＣＰＵコア２１０ｂは、第１のサーバ装置２２０ａのメモリ２２０ａのＩ／Ｏキュー５００ｂに対して、Ｒｅｍｏｔｅ  Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ（ＲＤＭＡ）によってＩ／Ｏコマンドを送信してよい。【００８６】
メモリ２２０ａには、キュー管理機構１１０ａとストレージサブデバイス３００との間でやり取りされる管理コマンド６００、６１０、６４０、６５０、６６０を格納するための管理キュー５０１が設けられてよい。【００８７】
メモリ２２０ａには、第１のサーバ装置２００ａに係るＣＰＵコア２１０ａとＩ／Ｏキュー５００ａとを対応付けるデバイスドライバ２３０ａが格納されてよい。この場合、デバイスドライバ２３０ａとキュー管理機構１１０ａとは、同一の第１のサーバ装置２２０ａに存在しているので、ローカルループバックによって管理コマンドを送受信してよい。【００８８】
第２のサーバ装置２００ｂのメモリ２２０ｂには、第２のサーバ装置２００ｂに係るＣＰＵコア２１０ｂとＩ／Ｏキュー５００ｂとを対応付けるデバイスドライバ２３０ｂが格納されてよい。この場合、デバイスドライバ２３０ｂとキュー管理機構１１０ａとは、ネットワーク２５０を介して管理コマンドを送受信してよい。【００８９】
ストレージサブデバイス３００は、記憶メディアと、ストレージサブコントローラ３１０ａと、アクセスコントローラ４００とを有する。これらの要素が有する機能は、上記で説明したとおりである。アクセスコントローラ４００は、ＡＣＬ４１０と、キューグループテーブル４２０と、アクセス違反ログ４３０とを管理する。【００９０】
図８は、ＡＣＬ４１０の構成例である。【００９１】
ＡＣＬ４１０は、各ＬＵ  ＩＤに対する各キューＩＤのアクセス権（アクセス許否）の設定情報である。ＡＣＬ４１０は、図８に示すように、複数のキューＩＤと複数のＬＵ  ＩＤとによって構成される二次元のビットマップであってよい。【００９２】
アクセスコントローラ４００は、次の（Ａ１）乃至（Ａ３）の処理によって、ＬＵ  ＩＤに対するキューＩＤのアクセス許否を判定してよい。【００９３】
（Ａ１）アクセスコントローラ４００は、Ｉ／Ｏ要求７００をデキューしたキューのＩＤと、そのＩ／Ｏ要求７００内のＬＵ  ＩＤ７０５とを特定する。【００９４】
（Ａ２）アクセス管理プログラム４００は、ＡＣＬ４１０から、その特定したＬＵ  ＩＤとキューＩＤとによって特定されるビット（「アクセス制御ビット」という）を取得する。【００９５】
（Ａ３）アクセスコントローラ４００は、その取得したアクセス制御ビットが「０」である場合、上記（Ａ１）で特定したキューＩＤのキューからデキューしたＩ／Ｏ要求の、上記（Ａ１）で特定したＬＵ  ＩＤのＬＵ３２０に対するアクセスを、「拒否」と判定してよい。アクセスコントローラ４００は、その取得したアクセス制御ビットが「１」である場合、上記（Ａ１）で特定したキューＩＤのキューからデキューしたＩ／Ｏ要求の、上記（Ａ１）で特定したＬＵ  ＩＤのＬＵ３２０に対するアクセスを、「許可」と判定してよい。【００９６】
以上の処理により、アクセスコントローラ４００は、Ｉ／Ｏ要求７００のＬＵ３２０に対するアクセス許否を判定することができる。なお、上述とは反対に、アクセス制御ビット「１」を「拒否」、アクセス制御ビット「０」を「許可」としてもよい。又は、アクセス制御ビットを多値として、「拒否」、「許可」以外の意味を持たせられるようにしてもよい。ＡＣＬ４１０（ビットマップ）のサイズは、ストレージサブデバイス３００が取り得る、最大のキュー数と最大のＬＵ数との積に基づいて決定されてよい。【００９７】
アクセスコントローラ４００は、次の（Ｂ１）乃至（Ｂ４）の処理によって、ＡＣＬ４１０を変更してよい。【００９８】
（Ｂ１）アクセスコントローラ４００は、キュー管理機構１１０ａから受領するアクセス権操作コマンド６１０に基づいて、変更対象とするキューグループＩＤ及びＬＵ  ＩＤと、変更後のアクセス制御ビット（「１」（許可）又は「０」（拒否））とを特定する。【００９９】
（Ｂ２）アクセスコントローラ４００は、キューグループテーブル４２０（図９参照）に基づいて、変更対象のキューグループＩＤに対応するキューＩＤビット列を取得する。キューＩＤビット列は、そのキューグループＩＤに属するキューＩＤのビットが「１」、そのキューグループＩＤに属さないキューＩＤのビットが「０」となっていてよい。【０１００】
（Ｂ３）アクセスコントローラ４００は、上記（Ｂ２）で取得したキューＩＤビット列の各ビットについて、変更後のアクセス制御ビット（「１」（許可）又は「０」（許否）との論理積に変更する。すなわち、アクセス許可「１」に変更する場合、キューＩＤビット列の「１」の部分はそのままとなる。アクセス許否「０」に変更する場合、キューＩＤビット列の「１」の部分は「０」となる。【０１０１】
（Ｂ４）アクセスコントローラ４００は、ＡＣＬ４１０において、変更対象のＬＵ  ＩＤに対応する全てのキューＩＤのアクセス制御ビットを、上記（Ｂ３）で論理積に変更したキューＩＤビット列で置き換える。このとき、アクセスコントローラ４００は、アクセス制御ビットが出力されないように排他制御を行ってもよい。【０１０２】
図９は、キューグループテーブル４２０の構成例である。【０１０３】
キューグループテーブル４２０は、キューグループＩＤに属するキューＩＤを管理するためのテーブルである。キューグループテーブル４２０は、図９に示すように、複数のキューＩＤと複数のキューグループＩＤとによって構成される二次元のピットマップであってよい。【０１０４】
上記（Ｂ２）のキューＩＤビット列を取得することは、キューグループテーブル４２０から、変更対象のキューグループＩＤに対応する各キューＩＤのビットを列として取得することであってよい。【０１０５】
アクセスコントローラ４００は、次の処理によって、キューグループテーブル４２０を変更してよい。【０１０６】
アクセスコントローラ４００は、キューグループＩＤにキューＩＤを追加する場合、キューグループテーブル４２０における、当該キューグループＩＤと当該キューＩＤとによって特定されるビットを「１」に変更する。【０１０７】
アクセスコントローラ４００は、キューグループＩＤからキューＩＤを削除する場合、キューグループテーブル４２０における、当該キューグループＩＤと当該キューＩＤとによって特定されるビットを「０」に変更する。【０１０８】
アクセスコントローラ４００は、図８及び図９を用いて説明した上述の処理により、ＡＣＬ４１０における、キューグループＩＤに属する複数のキューＩＤの、変更対象のＬＵ  ＩＤに対するアクセス権を、一括変更することができる。もし、ＡＣＬ４１０のＬＵ  ＩＤについて、キューグループＩＤに属する各キューＩＤのアクセス制御ビットを１つずつ変更したとすると、その変更途中において、そのキューグループの中に、アクセス許可されているキューと、アクセス拒否されているキューとが混在してしまう。そうすると、１つのサーバ装置２００で稼働しているＯＳが、或るＣＰＵコア２１０を用いるとＬＵ３２０にアクセスできるのに、別のＣＰＵコア２１０を用いるとその同じＬＵ３２０にアクセスできないという現象が発生し得る。つまり、ＯＳが正常に稼働しないという問題が発生し得る。しかし、図８及び図９を用いて説明した上述の処理によれば、１つのサーバ装置２００が搭載するＣＰＵコア２３０に割り当てられているキューＩＤが属するキューグループの単位で、ＬＵ３２０に対するアクセス権を一括変更することができるので、このような問題を防止することができる。【０１０９】
図１０は、アクセス違反ログ４３０の構成例である。【０１１０】
アクセス違反ログ４３０には、キューにエンキューされたＩ／Ｏ要求のうち、アクセス拒否（違反）されたＩ／Ｏ要求の数などが記録される。アクセスコントローラ４００は、そのアクセス拒否されたＩ／Ｏ要求の数をキューグループ毎にカウントして、アクセス違反ログに記録してもよい。【０１１１】
アクセス違反ログ４３０は、項目値（フィールド値）として、キューグループＩＤ１００１と、リード違反数１００２と、ライト違反数１００３とを含んでよい。キューグループＩＤ１００１は、キューグループのＩＤである。このキューグループＩＤ１００１には、アクティブなキューグループＩＤのみが記載されてもよい。リード違反数１００２は、ＩＤ１００１のキューグループに属する何れかのキューにエンキューされ、アクセス拒否されたリード要求の数である。ライト違反数１２０２は、ＩＤ１００３のキューグループに属する何れかのキューにエンキューされ、アクセス拒否されたライト要求の数である。なお、アクセス違反ログ４３０は、他の未許可の操作を記録するための項目値をさらに有してもよい。【０１１２】
このように、キューグループの単位でアクセス違反数をカウントしておくことで、アクセス拒否のＩ／Ｏ要求の発行数が極端に多いサーバ装置を容易に特定することができる。【０１１３】
図１１は、第２のキュー作成要求６８０、第２のキュー作成応答６９０の構成例を示す。【０１１４】
第２のキュー作成要求６８０は、デバイスドライバ２３０が、キュー管理機構１１０ａに対して、キューの作成を要求するための管理コマンドである。キュー管理機構１１０ａは、デバイスドライバ２３０から第２のキュー作成要求６８０を受領した場合、その第２のキュー作成要求６８０に基づいて、例えば図４に示すような第１のキュー作成要求６５０を生成し、それをストレージサブデバイス３００へ送信してよい。【０１１５】
第２のキュー作成要求６８０は、項目値（フィールド値）として、キューＩＤ６８１と、エントリ数６８３とを含んでよい。キューＩＤ６８１は、第１のキュー作成要求６５０のキューＩＤ６５１と同じであってよい。エントリ数６８３は、第１のキュー作成要求６５０のエントリ数６５３と同じであってよい。【０１１６】
第２のキュー作成要求６８０は、第１のキュー作成要求６５０のベースアドレス６５１に相当する項目値を含まなくてよい。なぜなら、図７に示すように、第２のサーバ装置２００ｂに係るＩ／Ｏキュー５００ｂが、第１のサーバ装置２００ａのメモリ２２０ａに設けられているからである。ただし、そのＩ／Ｏキュー５００ｂに関連するバッファが、第２のサーバ装置２００ｂのメモリ２２０ｂに設けられてもよい。【０１１７】
第２のキュー作成応答６９０は、キュー管理機構１１０ａが、デバイスドライバ２３０に対して、第２のキュー作成要求６８０の実行結果を応答するための管理コマンドである。例えばストレージサブデバイス３００から図４に示すような第１のキュー作成応答６６０を受領したキュー管理機構１１０ａは、その第１のキュー作成応答６６０に基づいて第２のキュー作成応答６９０を生成し、それをデバイスドライバ２３０へ送信してよい。【０１１８】
第２のキュー作成応答６９０は、項目値（フィールド値）として、ステータス６９１、ベースアドレス６９２、ドアベルアドレス６９３を含んでよい。ステータス６９１は、第１のキュー作成応答６６０のステータス６６１と同じであってよい。ベースアドレス６９２は、第１のサーバ装置２００ａのメモリ２２０ａに設けられたＩ／Ｏキュー５００ｂのアドレスである。ドアベルアドレス６９３は、Ｉ／Ｏ要求７００がＩ／Ｏキュー５００ｂにエンキューされたことをストレージコントローラ３１０へ伝えるためのレジスタのアドレスである。当該レジスタのアドレスは、第１のサーバ装置２００ａのメモリ２２０ａ上のアドレスであってよい。【０１１９】
図１２は、キュー割当管理画面１０００の例である。【０１２０】
キュー割当管理画面１０００は、キュー割当管理リスト１０１０の内容を表示及び設定するための画面である。キュー割当管理リスト１０１０は、キュー管理機構１１０ａによって管理されてよい。キュー管理機構１１０ａは、キュー割当管理リスト１０１０を用いて、キュー割当管理画面１０００を生成及び表示してよい。【０１２１】
キュー割当管理リスト１０１０は、項目値（フィールド値）として、サーバＩＤ１０１１、最大キュー数１０１２、キューグループＩＤ１０１３、割当キューＩＤ１０１４、アクセス許可ＬＵ  ＩＤ１０１５を有してよい。サーバＩＤ１０１１は、サーバ装置２００のＩＤである。最大キュー数１０１２は、ＩＤ１０１１のサーバ装置２００に割り当て可能な最大のキュー数である。キューグループＩＤ１０１３は、ＩＤ１０１１のサーバ装置２００に対応付けるキューグループのＩＤである。割当キューＩＤ１０１４は、ＩＤ１０１３のキューグループに属するキューのＩＤである。アクセス許可ＬＵ  ＩＤ１０１５は、キューグループＩＤ１０１３に属するキューＩＤ１０１４から、アクセスが許可されているＬＵ３２０のＩＤである。【０１２２】
図１２のキュー割当管理画面１０００の１行目のレコードは、サーバＩＤ１０１１「１」のサーバ装置２００にキューグループＩＤ１０１３「１」が対応付けられており、そのキューグループＩＤ１０１３「１」にはキューＩＤ１０１４「０」乃至「７」が属しており、これらのキューＩＤ１０１４にエンキューされたＩ／Ｏ要求７００は、ＬＵ  ＩＤ１０１０「１」乃至「３」のＬＵ３２０へのアクセスが許可されていることを示す。【０１２３】
管理者は、キュー割当管理画面１０００の操作項目１０１６のボタンを操作して、キュー割当管理リスト１０１０のレコードを削除したり、レコードの各項目値１０１２乃至１０１５を修正したりしてよい。又は、ストレージ管理部１００が、キュー割当管理リスト１０１０の各項目値１０１２乃至１０１５を自動的に設定及び変更してもよい。【０１２４】
図１３は、アクセス違反表示画面１３００の例である。【０１２５】
アクセス違反表示画面１３００は、アクセス違反ログ４３０の内容の表示するための画面である。キュー管理機構１１０ａは、ストレージサブデバイス３００のアクセス違反ログ４３０の内容を、アクセス違反表示画面１３００に表示してよい。又は、キュー管理機構１１０ａは、各Ｉ／Ｏキュー５００をポーリングで確認しながら、Ｉ／Ｏキュー５００にエンキューされたＩ／Ｏ要求７００に対してアクセス拒否のエラーを含むＩ／Ｏ応答５１０が返ってきた数をカウントし、その結果をアクセス違反表示画面１３００に表示してよい。【０１２６】
キュー管理機構１１０ａは、複数のストレージサブデバイス３００を管理している場合、それら複数のストレージサブデバイス３００に対するアクセス違反の数の合計を、アクセス違反表示画面１３００に表示してもよい。アクセス違反ログ４３０は、ＰＣＩｅのアドレス空間に直接マップされてもよい。又は、ストレージコントローラ３１０が、専用の管理コマンドを用いてアクセス違反ログ４３０をキュー管理機構１１０ａへ送信してもよい。【０１２７】
アクセス違反表示画面１３００には、項目値として、サーバＩＤ１３０１、キューグループＩＤ１３０２、アクセス許可ＬＵ  ＩＤ１３０３、違反数１３０４、リード違反数１３０５、ライト違反数１３０６が表示されてよい。サーバＩＤ１３０１、キューグループＩＤ１３０２、アクセス許可ＬＵ  ＩＤ１３０３は、上記で説明したとおりである。アクセス違反数１３０４は、ＩＤ１３０２のキューグループＩＤに属するキューからアクセス違反のＩ／Ｏ要求７００が発行された回数である。リード違反数１３０５は、ＩＤ１３０２のキューグループＩＤに属するキューからアクセス違反のリード要求が発行された回数である。ライト違反数１３０６は、ＩＤ１３０２のキューグループＩＤに属するキューからアクセス違反のライト要求が発行された回数である。【０１２８】
図１４は、デバイスドライバ２３０がサーバ装置２００にロードされた後の動作例を示すフローチャートである。【０１２９】
（Ｓ１００）デバイスドライバ２３０は、キュー管理機構１１０ａとの間に、管理コマンド用の通信路を形成する。そして、ステップＳ１０１へ進む。【０１３０】
（Ｓ１０１）デバイスドライバ２３０は、キュー管理機構１１０ａに対して、キュー割当要求６２０を送信する。そして、ステップＳ１０２へ進む。【０１３１】
（Ｓ１０２）デバイスドライバ２３０は、デバイスドライバ２３０は、キュー管理機構１１０ａからキュー割当応答６３０を受領すると、ステップＳ１０３へ進む。【０１３２】
（Ｓ１０３）デバイスドライバ２３０は、キュー割当応答６３０に含まれるキューＩＤ６３４の中から未作成のキューＩＤを１つ選択し、その選択したキューＩＤとエントリ数６８２とを含む第２のキュー作成要求６８０を生成する。そして、デバイスドライバ２３０は、その第２のキュー作成要求６８０を、キュー管理機構１１０ａへ送信する。そして、ステップＳ１０４へ進む。【０１３３】
（Ｓ１０４）デバイスドライバ２３０は、キュー管理機構１１０ａから第２のキュー作成応答６９０を受領すると、その受領したキュー作成応答６９０から、ベースアドレス６９２とドアベルアドレス６９３とを取得する。そして、ステップＳ１０５へ進む。【０１３４】
（Ｓ１０５）デバイスドライバ２３０は、ステップＳ１０３で選択したキューＩＤのＩ／Ｏキュー５００を、１つ以上のＣＰＵコア２１０に割り当てる。そして、ステップＳ１０６へ進む。【０１３５】
（Ｓ１０６）デバイスドライバ２３０は、キュー割当応答６３０に含まれる全てのキューＩＤについて処理し終えたならば（ＹＥＳ）、ステップＳ１１０へ進み、未処理のキューＩＤが残っているならば（ＮＯ）、ステップＳ１０３に戻る。【０１３６】
（Ｓ１１０）デバイスドライバ２３０は、ＣＰＵコア２１０（又はＯＳ）からＩ／Ｏ要求７００を受領した場合（ＹＥＳ）、ステップＳ１１１へ進み、そうでない場合（ＮＯ）、ステップＳ１１０を繰り返す。【０１３７】
（Ｓ１１１）デバイスドライバ２３０は、ＣＰＵコア２１０から受領したＩ／Ｏ要求７００を、そのＣＰＵコア２１０に割り当てられているキュー５００にエンキューする。それから、デバイスドライバ２３０は、そのキュー５００にＩ／Ｏ要求７００をエンキューしたことを、ドアベルアドレス６９３に書き込む。ストレージサブコントローラ３１０は、このドアベルアドレス６９３の変更によって、Ｉ／Ｏキュー５００にＩ／Ｏ要求７００がエンキューされたことを検知することができる。Ｉ／Ｏキュー５００へのＩ／Ｏ要求７００のエンキューは、通信手段がＩｎｆｉｎｉＢａｎｄの場合、「ＲＤＭＡ  Ｗｒｉｔｅ」によって行われてよい。そして、ステップＳ１１２へ進む。【０１３８】
（Ｓ１１２）デバイスドライバ２３０は、Ｉ／Ｏ応答７１０を受領する。デバイスドライバ２３０は、ポーリングによるＩ／Ｏキュー５００の復路側の状態監視、又は、ストレージ管理部１００からの通知などによって、ストレージサブデバイス３００からそのＩ／Ｏ応答７１０が送信されたことを検知してもよい。上記の状態監視又は通知は、通信手段がＩｎｆｉｎｉＢａｎｄの場合、「ＲＤＭＡ  Ｒｅａｄ」によって行われてよい。そして、ステップＳ１１０へ戻る。【０１３９】
以上の処理により、ストレージ装置２００の各ＣＰＵコア２１０は、ストレージサブデバイス３００に対してＩ／Ｏ要求７００を送信することができる。【０１４０】
図１５は、デバイスドライバ２３０をサーバ装置２００からアンロードする動作例を示すフローチャートである。【０１４１】
（Ｓ２０１）デバイスドライバ２３０は、ＣＰＵコア２１０に割り当て中のキューＩＤの１つについて、割り当てを解除する。そして、ステップＳ２０２へ進む。【０１４２】
（Ｓ２０２）デバイスドライバ２３０は、割り当てを解除したキューＩＤ６７１を含むキュー削除要求６７０を、キュー管理機構１１０ａへ送信する。そして、ステップＳ２０３へ進む。【０１４３】
（Ｓ２０３）デバイスドライバ２３０は、割り当て中であった全てのキューＩＤについて、割り当てを解除し終えた場合（ＹＥＳ）、ステップＳ２０４へ進み、そうでない場合（ＮＯ）、ステップＳ２０１へ戻る。【０１４４】
（Ｓ２０４）デバイスドライバ２３０は、キュー解放要求６４０を、キュー管理機構１１０ａへ送信する。そして、ステップＳ２０５へ進む。【０１４５】
（Ｓ２０５）デバイスドライバ２３０は、キュー管理機構１１０ａとの間の管理コマンド用の通信路を削除する。【０１４６】
以上の処理により、ストレージ装置２００に割り当てられていたＩ／Ｏキュー５００を全て解放することができる。【０１４７】
図１６は、キュー管理機構１１０ａの動作例を示すフローチャートである。【０１４８】
（Ｓ３００）キュー管理機構１１０ａは、キュー割当要求６２０、キュー解放要求６４０、第２のキュー作成要求６８０、キュー削除要求６７０の何れを受領したかを判定する。【０１４９】
＜キュー割当要求６２０を受領した場合＞
（Ｓ３１１）キュー管理機構１１０ａは、事前に設定されたキュー割当管理リストの中から、当該キュー割当要求６２０の送信元のサーバＩＤ１０１１を有するレコードを特定する。そして、キュー管理機構１１０ａは、その特定したレコードの最大キュー数１０１２と、当該キュー割当要求６２０の要求キュー数６２１とを比較し、何れか小さい方を割当キュー数に決定する。そして、ステップＳ３１２へ進む。【０１５０】
（Ｓ３１２）キュー管理機構１１０ａは、ストレージサブデバイス３００における未使用のキューリソース３１１のキューＩＤを特定する。キュー管理機構１１０ａは、割当キュー数６３１の分の未使用のキューＩＤを含むキューＩＤリストを作成する。そして、ステップＳ３１３へ進む。【０１５１】
（Ｓ３１３）キュー管理機構１１０ａは、キューグループＩＤ６０１にキューＩＤの追加対象のキューグループＩＤを、操作タイプ６０２に「追加」を、キューＩＤリスト６０３にステップＳ３１２で作成したキューＩＤリストを設定したキューグループ操作コマンド６００を生成する。そして、キュー管理機構１１０ａは、その生成したキューグループ操作コマンド６００を、ストレージサブデバイス３００へ送信する。これにより、ＩＤ６０１のキューグループに、キューＩＤリスト６０３に含まれるキューＩＤ６０４が追加される。つまり、キューグループＩＤ６０１が生成される。そして、ステップＳ３１４へ進む。【０１５２】
（Ｓ３１４）キュー管理機構１１０ａは、ステップＳ３１１で特定したキュー割当管理リストのレコードから、アクセス許可ＬＵ  ＩＤ１０１５を取得する。そして、キュー管理機構１１０ａは、その取得したアクセス許可ＬＵ  ＩＤを含むＬＵ  ＩＤリストを作成する。そして、ステップＳ３１５へ進む。【０１５３】
（Ｓ３１５）キュー管理機構１１０ａは、キューグループＩＤ６１１にアクセス権の操作対象のキューグループＩＤを、操作タイプ６１２にアクセス「許可」を、ＬＵ  ＩＤリスト６１３にステップＳ３１４で作成したＬＵ  ＩＤリストを設定したアクセス権操作コマンド６１０を生成する。そして、キュー管理機構１１０ａは、その生成したアクセス権操作コマンド６００を、ストレージサブデバイス３００へ送信する。これにより、ＬＵ  ＩＤリスト６１３に含まれるＬＵ  ＩＤ６１４へのキューグループＩＤ６１１からのアクセスが許可される。そして、ステップＳ３１６へ進む。【０１５４】
（Ｓ３１６）キュー管理機構１１０ａは、キューグループＩＤへのキューＩＤの追加、及び、ＬＵ  ＩＤへのキューグループＩＤからのアクセス許可についての変更内容を、キュー割当管理リストに反映する。そして、ステップＳ３１７へ進む。【０１５５】
（Ｓ３１７）キュー管理機構１１０ａは、割当キュー数６３１にステップＳ３１１で決定した割当キュー数を、キューＩＤリスト６３３にステップＳ３１２で作成したキューＩＤリストを設定したキュー割当応答６３０を生成する。そして、キュー管理機構１１０ａは、その生成したキュー割当応答６３０をデバイスドライバ２３０へ送信する。そして、ステップＳ３００に戻る。【０１５６】
以上の処理により、デバイスドライバ２３０は、自分に割当可能なキュー数を知ることができる。【０１５７】
＜キュー解放要求６４０を受領した場合＞
（Ｓ３２１）キュー管理機構１１０ａは、キュー割当管理リストの中から、当該キュー解放要求６４０の送信元のサーバＩＤ１０１１を有するレコードを特定する。そして、キュー管理機構１１０ａは、キューグループＩＤ６０１にその特定したレコードのキューグループＩＤ１０１３を、操作タイプ６０２に「削除」を設定したキューグループ操作コマンド６００を生成する。そして、キュー管理機構１１０ａは、その生成したキューグループ操作コマンド６００を、ストレージサブデバイス３００へ送信する。そして、ステップＳ３２２へ進む。【０１５８】
（Ｓ３２２）キュー管理機構１１０ａは、キュー割当管理リストの中から、当該キュー解放要求６４０の送信元のサーバＩＤ１０１１を有するレコードを特定する。そして、キュー管理機構１１０ａは、その特定したレコードにおける割当済みキューＩＤ１０１４を全削除する。そして、ステップＳ３００に戻る。【０１５９】
以上の処理により、不要となったキューが解放され、再利用が可能となる。【０１６０】
＜第２のキュー作成要求６８０を受領した場合＞
（Ｓ３３１）キュー管理機構１１０ａは、第２のキュー作成要求６８０のエントリ数６８３に基づいて、キューＩＤ６８２のキューのサイズを算出する。そして、キュー管理機構１１０ａは、第１のサーバ装置２００ａのメモリ２２０ａに、その算出したサイズの記憶領域を確保する。そして、ステップＳ３２２へ進む。【０１６１】
（Ｓ３３２）キュー管理機構１１０ａは、キューＩＤ６５４に第２のキュー作成要求６８０のキューＩＤ６８１を、ベースアドレス６５１に上記のメモリ２２０ａに確保した記憶領域のアドレスを、エントリ数６５２に第２のキュー作成要求６８０のエントリ数６５２を設定した第１のキュー作成要求６５０を生成する。そして、ストレージ管理部１００は、その生成した第１のキュー作成要求６５０を、ストレージサブデバイス３００へ送信する。【０１６２】
（Ｓ３３３）キュー管理機構１１０ａは、ストレージサブデバイス３００から第１のキュー作成応答６６０を受領すると（ＹＥＳ）、ステップＳ３３４へ進む。【０１６３】
（Ｓ３３４）キュー管理機構１１０ａは、ステータス６９１に第１のキュー作成応答６６０のステータス６６１を、ベースアドレス６９１にキュー用に確保したベースアドレス６５１を、ドアベルアドレス６９２にドアベル用の記憶領域のアドレスを設定した第２のキュー作成応答６９０を生成する。そして、キュー管理機構１１０ａは、その生成した第２のキュー作成応答６９０を、デバイスドライバ２３０へ送信する。そして、ステップＳ３００に戻る。【０１６４】
以上の処理により、キューが作成される。【０１６５】
＜キュー削除要求６７０を受領した場合＞
（Ｓ３４１）キュー管理機構１１０ａは、当該キュー削除要求６７０を、ストレージサブデバイス３００へ転送する。【０１６６】
（Ｓ３４２）キュー管理機構１１０ａは、ストレージサブデバイス３００からキュー削除応答６６０を受領すると（ＹＥＳ）、ステップＳ３４３へ進む。【０１６７】
（Ｓ３４３）キュー管理機構１１０ａは、その受信したキュー削除応答６６０を、デバイスドライバ２３０へ転送する。そして、ステップＳ３４４へ進む。【０１６８】
（Ｓ３４４）キュー管理機構１１０ａは、キュー削除要求６７０のキューＩＤ６５４のキュー用に確保していた記憶領域を解放する。そして、ステップＳ３００に戻る。【０１６９】
以上の処理により、キューが削除される。【０１７０】
図１７は、ストレージサブコントローラ３１０の動作例を示すフローチャートである。【０１７１】
（Ｓ４０１）ストレージサブコントローラ３１０は、キュー管理機構１１０ａから管理コマンドを受領した場合（ＹＥＳ）、ステップＳ４０２へ進み、そうでない場合（ＮＯ）、ステップＳ４４０へ進む。【０１７２】
（Ｓ４０２）ストレージサブデバイス３００は、ステップＳ４０１で受領した管理コマンドが、「アクセス権操作コマンド」ならばステップＳ４１０へ進み、「キューグループ操作コマンド」ならばステップＳ４２０へ進む。【０１７３】
（Ｓ４４０）ストレージサブコントローラ３１０は、デバイスドライバ２３０からＩ／Ｏ要求７００を受信した場合（ＹＥＳ）、ステップＳ４４１へ進み、そうでない場合（ＮＯ）、ステップＳ４０１に戻る。【０１７４】
＜アクセス権操作コマンドを受領した場合＞
（Ｓ４１０）ストレージサブコントローラ３１０は、キューグループテーブル４２０を用いて、アクセス権操作コマンド６１０のキューグループＩＤ６１１に対応するキューＩＤビット列４２１を取得する。そして、ステップＳ４１１へ進む。【０１７５】
（Ｓ４１１）ストレージサブコントローラ３１０は、アクセス権操作コマンド６１０のＬＵ  ＩＤリスト６１３の中から、アクセス制御ビットの変更処理がまだ行われていないＬＵ  ＩＤ６１４を１つ選択する。そして、ストレージサブデバイス３００は、その選択したＬＵ  ＩＤ６１４と、アクセス権操作コマンド６１０の操作タイプ６１２（「許可」又は「拒否」）と、ステップＳ４１０で取得したキューＩＤビット列４２１とを用いて、その選択したＬＵ  ＩＤ６１４に対応するＡＣＬ４１０の全アクセス制御ビットを一括変更する。そして、ステップＳ４１２へ進む。【０１７６】
（Ｓ４１２）ストレージサブコントローラ３１０は、アクセス権操作コマンド６１０のＬＵ  ＩＤリスト６１３内の全てのＬＵ  ＩＤ６１４について、アクセス制御ビットの変更処理を終えたならばステップＳ４０１に戻り、変更処理がまだ行われていないＬＵ  ＩＤ６１４が残っているならばステップＳ４１１に戻る。【０１７７】
以上の処理により、キューグループに属する複数のキューの、ＬＵに対するアクセス権を一括変更することができる。これにより、アクセス権の変更途中において、キューグループの中に、アクセス許可されているキューと、アクセス拒否されているキューとが混在してしまうという問題を防止することができる。【０１７８】
＜キューグループ操作コマンドを受領した場合＞
（Ｓ４２０）ストレージサブコントローラ３１０は、キューグループ操作コマンド６００の操作タイプ６０２が「追加」ならば（ＹＥＳ）、ステップＳ４２１へ進み、その操作タイプ６０２が「削除」ならば（ＮＯ）、ステップＳ４３０へ進む。【０１７９】
（Ｓ４２１）ストレージサブコントローラ３１０は、キューグループテーブル４２０について、キューグループ操作コマンド６００のキューグループＩＤ６０１に対応する全てのビットを「０」（拒否）に初期化する。そして、ステップＳ４２２へ進む。【０１８０】
（Ｓ４２２）ストレージサブコントローラ３１０は、キューグループテーブル４２０において、キューグループ操作コマンド６００のキューグループＩＤ６０１と、キューＩＤリスト６０３に含まれる各キューＩＤ６０４と、によって特定されるビットを「１」（許可）に変更する。そして、ステップＳ４０１に戻る。【０１８１】
（Ｓ４３０）ストレージサブコントローラ３１０は、キューグループテーブル４２０から、キューグループ操作コマンド６００のキューグループＩＤ６０１に対応するキューＩＤビット列４２１を取得する。そして、ステップＳ４３１へ進む。【０１８２】
（Ｓ４３１）ストレージサブコントローラ３１０は、ＡＣＬ４１０における全てのＬＵ  ＩＤのビット列について、ステップＳ４３０で取得したキューＩＤビット列の「１」に対応する部分のビットを「０」（拒否）に変更する。そして、ステップＳ４３２へ進む。【０１８３】
（Ｓ４３２）ストレージサブコントローラ３１０は、キューグループテーブル４２０における、キューグループ操作コマンド６００のキューグループＩＤ６０１のビット列について、そのキューグループＩＤ６０１に属するキューＩＤの部分のビットを「０」に変更する。また、ストレージサブコントローラ１１０は、アクセス違反ログ４３０から、キューグループＩＤ６０１に対応するレコードを削除する。そして、ステップＳ４０１に戻る。【０１８４】
以上の処理により、キュー管理機構１１０ａからの指示に基づいて、キューグループテーブル４２０が変更される。【０１８５】
＜Ｉ／Ｏ要求を受領した場合＞
（Ｓ４４１）ストレージサブコントローラ３１０は、ＡＣＬ４１０から、Ｉ／Ｏ要求７００がエンキューされたキューのＩＤ５００とＩ／Ｏ要求７００のＬＵ  ＩＤ７０５とによって特定されるアクセス制御ビットを取得する。そして、ステップＳ４４２へ進む。【０１８６】
（Ｓ４４２）ストレージサブコントローラ３１０は、その取得したアクセス制御ビットが、「１」（許可）ならばステップＳ４５０へ進み、「０」（拒否）ならばステップＳ４６０へ進む。【０１８７】
（Ｓ４５０）ストレージサブコントローラ３１０は、Ｉ／Ｏ要求７００の操作タイプ７０１に基づく処理（リード処理、ライト処理など）を実行する。そして、ステップＳ４５１へ進む。【０１８８】
（Ｓ４５１）ストレージサブコントローラ３１０は、ステータス７１１に「成功」を設定したＩ／Ｏ応答７１０を生成し、そのＩ／Ｏ応答７１０をデバイスドライバ２３０へ送信する。そして、ステップＳ４０１へ戻る。【０１８９】
（Ｓ４６０）ストレージサブコントローラ３１０は、ステータス７１１に「失敗」を、エラー情報７１２に「アクセス拒否」を設定したＩ／Ｏ応答７１０を生成し、そのＩ／Ｏ応答７１０をデバイスドライバ２３０へ送信する。そして、ステップＳ４０１へ戻る。【０１９０】
以上の処理により、デバイスドライバ２３０から発行されたＩ／Ｏ要求が実行される。
【実施例２】
【０１９１】
図１８は、実施例２に係る計算機システム１ｂのハードウェア構成例を示す。図１９は、実施例２に係る計算機システム１ｂの論理構成例を示す。【０１９２】
計算機システム１ｂは、サーバ装置２００ｃを有する。サーバ装置２００ｃは、ＣＰＵ２１０と、メモリ２２０と、ストレージサブデバイス３００とを有する。これらの要素は、ＰＣＩｅバス２４０を介して双方向通信可能に接続される。【０１９３】
サーバ装置２００ｃのメモリ２２０には、キュー管理機構１１０ｂを実現するためのプログラム、デバイスドライバ２３０を実現するためのプログラムが格納されてよい。サーバ装置２００ｃは、ＶＭ２０１を実現するための仮想化機構（例えば、ハイパーバイザ）を有してよい。仮想化機構は、プログラムであってもよいし、専用のハードウェアチップであってもよい。サーバ装置２００ｃは、仮想化機構を用いて１つ以上のＶＭ２０１を稼働させることができてよい。各ＶＭ２０１は、仮想的なＣＰＵ２１１、仮想的なメモリ２２１を有し、ゲストＯＳを稼働してよい。【０１９４】
ＶＭ２０１のメモリ２２１には、デバイスドライバ２３１が格納されてよい。このデバイスドライバ２３１は、実施例１のデバイスドライバ２３０と同様の機能を有してよい。各ＶＭ２０１には、Ｉ／Ｏキュー５００が割り当てられてよい。【０１９５】
計算機システム１ｂは、キューグループ５２０に関連付けてＶＭ（ゲストＯＳ）の物理アドレス（Ｇｕｅｓｔ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ（ＧＰＡ））をストレージサブデバイス３００に伝えるための管理コマンド８００を用いることができてよい。ＶＭ２０１を取り扱うからである。【０１９６】
ストレージサブデバイス３００は、Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ（ＩＯＭＭＵ）３３０を有する。ＩＯＭＭＵ３３０は、ＧＰＡ−ＨＰＡ変換テーブルリスト３３１を参照し、ＧＰＡとＨＰＡとを相互に変換する機能を有してよい。【０１９７】
ＶＭ２０１のＣＰＵ２１１は、Ｉ／Ｏ要求７００を、当該ＣＰＵ２１１に割り当てられたキュー５００にエンキューする。ＶＭ２０１のＣＰＵ２１１は、このＩ／Ｏ要求７００のバッファアドレス７０４に、ＶＭ２０１のメモリ２２１のアドレスであるＧＰＡを設定する。ＧＰＡは、サーバ装置２２０ｃのメモリ２２０のアドレスであるＨｏｓｔ  Ｐｈｙｓｉｃａｌ  Ａｄｄｒｅｓｓ（ＨＰＡ）に変換される必要がある。ＩＯＭＭＵ３３０は、このＧＰＡとＨＰＡとを相互に変換する機能を有する。本実施例に係るＩＯＭＭＵ３３０は、ストレージサブデバイス３００に備えられ、キューグループ単位でＧＰＡからＨＰＡへの変換を行う機能を有する。【０１９８】
図２０は、ＧＰＡ−ＨＰＡ操作コマンド８００の構成例を示す。【０１９９】
ＧＰＡ−ＨＰＡ操作コマンド８００は、キューグループ単位によるＧＰＡからＨＰＡへの変換操作を支援するためのコマンドである。ＧＰＡ―ＨＰＡ操作コマンド８００は、項目値（フィールド値）として、キューグループＩＤ８０３と、操作タイプ８０１と、ＧＰＡ―ＨＰＡ変換テーブルアドレス８０２とを含んでよい。【０２００】
キューグループＩＤ８０３は、当該ＧＰＡ―ＨＰＡ操作コマンド８００が操作対象とするキューグループのＩＤである。操作タイプ８０１は、ＩＤ８０３のキューグループに対して、どのような操作を行うのかを示す情報である。ＨＰＡ−ＨＰＡ変換テーブルアドレス８０２は、ＧＰＡ―ＨＰＡ変換テーブル２２１の格納先を示すアドレスである。【０２０１】
次に、図１２を用いて、実施例２に係るキュー割当管理画面の例について説明する。【０２０２】
実施例２に係るキュー割当管理リストは、サーバＩＤ１０１１をＶＭ  ＩＤに代える以外、図１２に示すキュー割当管理リストと同じ項目値（フィールド値）を有してよい。ＶＭ  ＩＤは、ＶＭ２０１のＩＤである。したがって、実施例２に係るキュー割当管理画面は、図１２のサーバＩＤ１０１１をＶＭ  ＩＤに代えた画面であってよい。【０２０３】
次に、図１３を用いて、実施例２に係るアクセス違反表示画面の例について説明する。【０２０４】
実施例２に係るアクセス違反表示画面には、サーバＩＤ１３０１をＶＭ  ＩＤに代える以外、図１３に示すアクセス違反表示画面１３００と同じ項目値が表示されてよい。【０２０５】
図２１は、ＧＰＡ―ＨＰＡ変換テーブルリスト３４０の構成例である。【０２０６】
ＧＰＡ−ＨＰＡ変換テーブルリスト３４０は、キューグループとＧＰＡ−ＨＰＡ変換テーブルとを対応付けるリストである。ＧＰＡ―ＨＰＡ変換テーブルリスト３４０は、項目値（フィールド値）として、キューグループＩＤと、ＧＰＡ−ＨＰＡ変換テーブルの格納されている先頭アドレスとを有してよい。【０２０７】
ＶＭ２０１のＣＰＵ２２１からキュー５００にエンキューされたＩ／Ｏ要求７００に関するバッファアドレス７０４は、ＧＰＡである。したがって、このＩ／Ｏ要求７００を受領したストレージサブコントローラ３１０は、バッファアドレス７０４（ＧＰＡ）を、例えば以下の（Ｃ１）乃至（Ｃ５）の処理によって、ＨＰＡに変換する必要がある。【０２０８】
（Ｃ１）ストレージサブコントローラ３１０は、Ｉ／Ｏ要求７００を取得したキューが属するキューグループＩＤを特定する。【０２０９】
（Ｃ２）ストレージサブコントローラ３１０は、ＧＰＡ―ＨＰＡ変換テーブルリスト３４０から、その特定したキューグループＩＤに対応するＧＰＡ−ＨＰＡ変換テーブルの先頭アドレス６８１を取得する。【０２１０】
（Ｃ３）ストレージサブコントローラ３１０は、バッファアドレス７０４（ＧＰＡ）と、その取得したＧＰＡ−ＨＰＡ変換テーブルの先頭アドレス６８１とを、ＩＯＭＭＵ３３０に入力する。【０２１１】
（Ｃ４）ＩＯＭＭＵ３３０は、この先頭アドレス６８１に格納されているＧＰＡ−ＨＰＡ変換テーブルに基づいて、入力されたＧＰＡをＨＰＡに変換し、ストレージサブコントローラ３１０へ返す。サーバ装置２００ｃがＩｎｔｅｌ社製のＣＰＵ及びチップセットで構成されている場合、非特許文献２に記載されている仕様に基づいてＧＰＡ−ＨＰＡ変換が行われてよい。サーバ装置２００ｃがＡＭＤ社製のＣＰＵ及びチップセットで構成されている場合、非特許文献３に記載されている仕様に基づいてＧＰＡ−ＨＰＡ変換が行われてよい。【０２１２】
（Ｃ５）ストレージサブデバイス３００は、その取得したＨＰＡへアクセスする。【０２１３】
次に、図１４及び図１５を用いて、実施例２における、ＶＭ２０１にデバイスドライバ２３１がロードされる際とそのデバイスドライバ２３１がアンロードされる際の動作例とを説明する。【０２１４】
実施例２の場合、図１４のフローチャートにおいて、ストレージ管理部１００との間に通信路を形成するステップＳ１００が省略される。また、図１５のフローチャートにおいて、その形成した通信路を削除するステップＳ２０５が省略される。なぜなら、デバイスドライバ２３１を有するＶＭ２０１とストレージ管理部１００とは、実質的には同じサーバ装置２００ｃで動作するプログラムであるため、通信路の形成が不要だからである。【０２１５】
次に、図１６を用いて、実施例２に係るキュー管理機構１１０ｂの動作例を説明する。ここでは、図１６に示すフローチャートと異なるステップのみ説明し、同様のステップの説明を省略する。【０２１６】
＜キュー割当要求６２０を受領した場合＞
ステップＳ３１１に代えて、キュー管理機構１１０ｂは、事前に設定されたキュー割当管理リストの中から、当該キュー割当要求６２０の送信元のＶＭ  ＩＤを有するレコードを特定する。そして、キュー管理機構１１０ｂは、その特定したレコードの最大キュー数１０１２と、キュー割当要求６２０の要求キュー数６２１とを比較し、何れか小さい方を割当キュー数に決定する。そして、ステップＳ３１２へ進む。【０２１７】
ステップＳ３１６の後に、キュー管理機構１１０ｂは、キューグループＩＤ８０３にアクセス制御対象のキューグループＩＤを、操作タイプ８０１に「追加」を、ＧＰＡ−ＨＰＡ変換テーブルアドレス８０２にＧＰＡ―ＨＰＡ変換テーブル２２１の格納先の先頭アドレスを設定したＧＰＡ−ＨＰＡ操作コマンド８００を生成する。そして、キュー管理機構１１０ｂは、そのＧＰＡ−ＨＰＡ操作コマンド８００をストレージサブコントローラ３１０へ送信する。そして、ステップＳ３１７へ進む。【０２１８】
＜キュー解放要求６４０を受領した場合＞
ステップＳ３２２に代えて、キュー管理機構１１０ｂは、キュー割当管理リストから、当該キュー解放要求６４０の送信元のＶＭ  ＩＤのレコードを特定する。そして、キュー管理機構１１０ｂは、その特定したレコードの割当済みキューＩＤ１０１４を全削除する。そして、ステップＳ３００に戻る。【０２１９】
＜第２のキュー作成要求６８０を受領した場合＞
キュー管理機構１１０ｂは、ステップＳ３３１を実施しない。【０２２０】
＜キュー削除要求６７０を受領した場合＞
キュー管理機構１１０ｂは、ステップＳ３４４を実施しない。【０２２１】
次に、図１７を用いて、実施例２に係るストレージサブコントローラ３１０ｂの動作例を説明する。ここでは、図１７に示すフローチャートと異なるステップのみ説明し、同様のステップの説明を省略する。【０２２２】
ステップＳ４０２において、ストレージサブコントローラ３１０ｂは、ステップＳ４０１で受領した管理コマンドが、ＧＰＡ−ＨＰＡ操作コマンド８００ならば、以下のステップＳ４７０へ進む。【０２２３】
＜ＧＰＡ−ＨＰＡ操作コマンド８００を受領した場合＞
（Ｓ４７０）ストレージサブコントローラ３１０ｂは、そのＧＰＡ−ＨＰＡ操作コマンド８００から、キューグループＩＤ８０３と、操作タイプ８０１と、ＧＰＡ−ＨＰＡ変換テーブルアドレス８０２とを取得する。そして、ストレージサブコントローラ３１０ｂは、その取得した操作タイプ８０１が「追加」の場合、その取得したキューグループＩＤ８０３とＧＰＡ−ＨＡＰ変換テーブルアドレス８０２とを対応付けて、ＧＰＡ−ＨＰＡ変換テーブルリスト３４０に追加する。そして、ステップＳ４０１へ戻る。
【実施例３】
【０２２４】
図２２は、実施例３に係る計算機システム１ｃのハードウェア構成の例を示す。図２３は、実施例３に係る計算機システム１ｃの論理構成の例を示す。【０２２５】
計算機システム１ｃは、１つ以上のサーバ装置２００ｄと、ストレージサブデバイス３００とを有する。サーバ装置２００ｄは、ＣＰＵ２１０、メモリ２２０、Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｏｒ（ＨＢＡ）３４０を有してよい。これらの要素はは、ＰＣＩｅバス２４０を介して双方向通信可能に接続されてよい。各サーバ装置２００ｄのＨＢＡ３４０と、ストレージサブデバイス３００とは、ネットワーク２５０を介して双方向通信可能に接続されてよい。ネットワーク２５０の例は、Ｅｔｈｅｒｎｅｔ、Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ、ＩｎｆｉｎｉＢａｎｄである。なお、ネットワーク２５０は、ＰＣＩｅバスであってもよい。複数のサーバ装置２００ｄが、１つのストレージサブデバイス３００にアクセスできてよい。また、同一ネットワーク２５０内において、ストレージサブデバイス３００が、複数存在してもよい。サーバ装置２００ｄは、仮想化機構を用いて１つ以上のＶＭ２０１を稼働させることができてよい。ＶＭ２０１の構成は、実施例２の場合と同様であってよい。１つのサーバ装置２００ｄ内の複数のＶＭ２０１は、そのサーバ装置２００ｄのＨＢＡ３４０を共有してよい。【０２２６】
実施例３では、ＨＢＡ３４０がアクセスコントローラ４００を有してよい。すなわち、実施例３では、ＶＭ２０１のＣＰＵ２１１がキュー５００にエンキューしたＩ／Ｏ要求７００についてのアクセス権を、ＨＢＡ３４０のアクスコントローラ４００が判定してよい。そして、ＨＢＡ３４０のアクセスコントローラ４００は、そのＩ／Ｏ要求７００のアクセスを許可すると判定した場合、そのＩ／Ｏ要求７００に対応するＩ／Ｏ要求９００を、ネットワーク２５０を介して、ストレージサブデバイス３００へ転送してよい。ＨＢＡ３４０のアクセスコントローラ４００は、そのＩ／Ｏ要求のアクセスを拒否すると判定した場合、そのＩ／Ｏ要求７００に対応するＩ／Ｏ要求９００を、ストレージサブデバイス３００に転送しなくてもよい。Ｉ／Ｏ要求７００とＩ／Ｏ要求９００とは、同一のＩ／Ｏコマンドであってもよいし、別の方式に変換されたものであってもよい。Ｉ／Ｏ要求７００に係るＩ／ＯコマンドはＮＶＭｅ規格に準拠し、Ｉ／Ｏ要求９００に係るＩ／ＯコマンドはＳＣＳＩ規格に準拠してもよい。【０２２７】
ネットワーク２５０の途中には、経路制御を行うスイッチ装置が存在してもよい。また、このスイッチ装置は、独立したアクセス制御機能を有してもよい。アクセス制御機能は、例えば、ＨＢＡ毎に利用可能なネットワーク帯域を制限する機能や、アクセス可能なストレージサブデバイスを限定する機能（制御経路機構）などであってよい。【０２２８】
ストレージサブデバイス３００は、当該ストレージサブデバイスに特有のアクセス制御機能を有してもよい。このアクセス制御機能は、ネットワークの接続口であるＴａｒｇｅｔ  Ｂｕｓ  Ａｄａｐｔｅｒ（ＴＢＡ）３５０毎にアクセス可能なＬＵ３２０を制限したり、ＨＢＡ３４０が有するＩＤの単位でＬＵ３２０へのアクセスを制限したりする機能であってよい。【０２２９】
これらのアクセス制御機能は、実施例２で述べたキューグループ単位によるアクセス制御機能と連動する構成であってもよい。この場合、キュー管理機構１１０ｃは、上述のスイッチ装置及び／又はストレージサブデバイスに対して、キューグループ操作コマンド６００や、アクセス権操作コマンド６１０を発行してもよい。【０２３０】
次に、図１７を用いて、ＨＢＡ３４０のアクセス制御プログラム４００の動作例を説明する。ここでは、図１７に示すフローチャートと異なるステップのみ説明し、同様のステップの説明を省略する。【０２３１】
Ｓ４５０において、ＨＢＡ３４０のアクセスコントローラ４００は、Ｉ／Ｏ要求７００をＩ／Ｏ要求９００に変換し、ストレージサブデバイス３００へ送信する。【０２３２】
Ｓ４５１において、ＨＢＡ３４０のアクセスコントローラ４００は、Ｉ／Ｏ要求９００に対するＩ／Ｏ応答９１０をストレージサブデバイス３００から受領したら、そのＩ／Ｏ応答９１０をＩ／Ｏ応答７１０に変換する。そして、そのＩ／Ｏ応答７１０を、デバイスドライバ２３１へ送信する。【０２３３】
以上、幾つかの実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実行することが可能である。
【符号の説明】
【０２３４】
１：計算機システム  ２００：サーバ装置  ３００：ストレージサブデバイス  １１０：キュー管理機構  ２３０：デバイスドライバ  ３１０：ストレージサブコントローラ  ４００：アクセスコントローラ  ２１０：ＣＰＵコア  ２０１：ＶＭ  ３２０：ＬＵ
【図１】
2017072827.tif 000003
【図２】
2017072827.tif 000004
【図３】
2017072827.tif 000005
【図４】
2017072827.tif 000006
【図５】
2017072827.tif 000007
【図６】
2017072827.tif 000008
【図７】
2017072827.tif 000009
【図８】
2017072827.tif 000010
【図９】
2017072827.tif 000011
【図１０】
2017072827.tif 000012
【図１１】
2017072827.tif 000013
【図１２】
2017072827.tif 000014
【図１３】
2017072827.tif 000015
【図１４】
2017072827.tif 000016
【図１５】
2017072827.tif 000017
【図１６】
2017072827.tif 000018
【図１７】
2017072827.tif 000019
【図１８】
2017072827.tif 000020
【図１９】
2017072827.tif 000021
【図２０】
2017072827.tif 000022
【図２１】
2017072827.tif 000023
【図２２】
2017072827.tif 000024
【図２３】
2017072827.tif 000025
【国際調査報告】
2017072827.tif 000026
2017072827.tif 000027
2017072827.tif 000028
2017072827.tif 000029