(57)【要約】      （修正有）【課題】１以上のＩ／Ｏ要求に基づく複数のＩ／Ｏコマンドの処理に要する時間を短くする計算機システムを提供する。【解決手段】計算機システムは、複数のＩ／Ｏコマンドのうちの２以上のＩ／Ｏコマンドの発行先が複数の記憶デバイスのうちの非起動状態の２以上の記憶デバイスである場合、その２以上の記憶デバイスの起動順序を、その２以上の記憶デバイスにそれぞれ対応した２以上のＩ／Ｏ量に基づいて決定する。２以上の記憶デバイスの各々のＩ／Ｏ量は、２以上のＩ／Ｏコマンドのうちその記憶デバイスに対する１以上のＩ／Ｏコマンドに従うＩ／Ｏの量である。計算機システムは、決定した起動順序で、２以上の記憶デバイスを起動する。【選択図】図１３
2018085011.tif 000002
【特許請求の範囲】
【請求項１】
複数のＩ／Ｏコマンドのうちの２以上のＩ／Ｏコマンドの発行先が複数の記憶デバイスのうちの非起動状態の２以上の記憶デバイスである場合、前記２以上の記憶デバイスの起動順序を、前記２以上の記憶デバイスにそれぞれ対応した２以上のＩ／Ｏ量に基づいて決定する手段であるデバイス制御手段と、
前記２以上の記憶デバイスの各々のＩ／Ｏ量は、前記２以上のＩ／Ｏコマンドのうちその記憶デバイスに対する１以上のＩ／Ｏコマンドに従うＩ／Ｏの量であり、
前記決定した起動順序で前記２以上の記憶デバイスを起動する手段である起動制御手段と
を備える計算機システム。
【請求項２】
前記デバイス制御手段は、前記起動順序として、Ｉ／Ｏ量が大きい記憶デバイスほど起動順番が早い起動順序を決定する、
請求項１記載の計算機システム。
【請求項３】
前記２以上の記憶デバイスの各々ついて、前記Ｉ／Ｏ量は、
その記憶デバイスに対するＩ／Ｏコマンドの数であるＩ／Ｏ数と、
その記憶デバイスに対する１以上のＩ／Ｏコマンドに従うＩ／Ｏ対象データのサイズであるＩ／Ｏサイズと
のうちのいずれか又は両方である、
請求項１又は２記載の計算機システム。
【請求項４】
前記起動順序において、ランダムＩ／Ｏがされる記憶デバイスについては、Ｉ／Ｏ数が大きいほど起動順番が早い、
請求項１乃至３のうちのいずれか１項に記載の計算機システム。
【請求項５】
前記起動順序において、シーケンシャルＩ／Ｏがされる記憶デバイスについては、Ｉ／Ｏサイズが大きいほど起動順番が早い、
請求項１乃至４のうちのいずれか１項に記載の計算機システム。
【請求項６】
前記デバイス制御手段は、前記２以上の記憶デバイスのうち未だ起動されない記憶デバイスである待ち記憶デバイスに対するＩ／Ｏコマンドがその待ち記憶デバイスへ発行されることを抑止することであるＩ／Ｏブロックを行い、
前記２以上のＩ／Ｏコマンドの各々は、抑止中のＩ／Ｏコマンドである、
請求項１乃至５のうちのいずれか１項に記載の計算機システム。
【請求項７】
前記待ち記憶デバイスの起動順番は、前記Ｉ／Ｏブロックを行ってからの経過時間を所定のデッドライン時間から引いた時間が、前記待ち記憶デバイスの起動に要する時間に等しくなったか否かに基づく、
請求項６記載の計算機システム。
【請求項８】
前記２以上のＩ／Ｏコマンド以外のうちの少なくとも１つのＩ／Ｏコマンドの送信先が起動状態の１以上の記憶デバイスであり、
前記デバイス制御手段は、前記起動順序を決定すること無しに、前記少なくとも１つのＩ／Ｏコマンドを前記起動状態の１以上の記憶デバイスに発行する、
請求項１乃至７のうちのいずれか１項に記載の計算機システム。
【請求項９】
同時に起動可能な記憶デバイスの数の制限に関する情報である制限情報を基に、前記２以上の記憶デバイスを同時に起動できないと判断された場合に、前記デバイス制御手段が前記起動順序を決定する、又は、前記決定した起動順序で前記起動制御手段が前記２以上の記憶デバイスを起動する、
請求項１乃至８のうちのいずれか１項に記載の計算機システム。
【請求項１０】
前記複数のＩ／Ｏコマンドの発行先である前記１以上の記憶デバイスと、前記１以上の記憶デバイスにそれぞれ対応した１以上のＩ／Ｏ優先順位とを表す情報であるデバイス制御プランを生成する手段であるデバイス制御プラン生成手段を更に有し、
前記デバイス制御手段は、前記デバイス制御プランが表すＩ／Ｏ優先順位が同じである前記２以上の記憶デバイスについて、前記起動順序を決定する、
請求項１乃至９のうちのいずれか１項に記載の計算機システム。
【請求項１１】
Ｉ／Ｏ対象データとＩ／Ｏ優先順位との関係を表す情報であるＩ／Ｏ制御プランを生成する手段であるＩ／Ｏ制御プラン生成手段を更に有し、
前記デバイス制御プラン生成手段は、前記Ｉ／Ｏ制御プランを基に前記デバイス制御プランを生成し、
前記デバイス制御プランにおいて、前記Ｉ／Ｏ制御プランが表すＩ／Ｏ対象データを格納している記憶デバイスのＩ／Ｏ優先順位は、前記Ｉ／Ｏ制御プランにおいてそのＩ／Ｏ対象データに対応したＩ／Ｏ優先順位に従う、
請求項１０記載の計算機システム。
【請求項１２】
前記起動制御手段は、Ｉ／Ｏが将来発生する見込みが無い記憶デバイスがデバイス制御プランから特定された場合、その記憶デバイスを非起動状態に遷移させる、
請求項１０又は１１記載の計算機システム。
【請求項１３】
前記非起動状態の２以上の記憶デバイスの各々は、低消費電力状態の記憶デバイスであり、
前記非起動状態の２以上の記憶デバイスの各々について、起動は、その記憶デバイスの低消費電力状態を解除することである、
請求項１乃至１２のうちのいずれか１項に記載の計算機システム。
【請求項１４】
前記非起動状態の２以上の記憶デバイスの各々は、記憶デバイスよりも少ないいずれの記憶デバイスリーダにもセットされていない記憶デバイスであり、
前記非起動状態の２以上の記憶デバイスの各々について、起動は、その記憶デバイスをいずれかの記憶デバイスリーダにセットすることである、
請求項１乃至１２のうちのいずれか１項に記載の計算機システム。
【請求項１５】
複数のＩ／Ｏコマンドのうちの２以上のＩ／Ｏコマンドの発行先が複数の記憶デバイスのうちの非起動状態の２以上の記憶デバイスである場合、前記２以上の記憶デバイスの起動順序を、前記２以上の記憶デバイスにそれぞれ対応した２以上のＩ／Ｏ量に基づいて決定し、前記２以上の記憶デバイスの各々のＩ／Ｏ量は、前記２以上のＩ／Ｏコマンドのうちその記憶デバイスに対する１以上のＩ／Ｏコマンドに従うＩ／Ｏの量であり、
前記決定した起動順序で、前記２以上の記憶デバイスを起動する、
記憶デバイス起動制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶デバイスの起動制御に関する。
【背景技術】
【０００２】
近年、流通業や金融業などでは、取り扱うデータ量が日々増加している。データ量の増加により、記憶デバイス群（１以上の記憶デバイス）の大規模化が進み、記憶デバイス群の消費電力が上昇している。このため、ビッグデータの蓄積や分析などを低消費電力で実現する技術が求められている。
【０００３】
記憶デバイス群の低消費電力技術として、ハードディスクドライブ（以下、ＨＤＤ）のスピンダウン技術がある。スピンダウン技術は、ディスクの回転を低速にする又は停止することで消費電力を削減する技術である。しかし、スピンダウン状態のＨＤＤをスピンアップするとＨＤＤの消費電力が一時的に大きく増加する。このとき、一定数を超えるＨＤＤを同時にスピンアップさせると、消費電力の上限を超える可能性がある。
【０００４】
この問題に関して、例えば、特許文献１及び２に開示の技術がある。特許文献１は、ＨＤＤの起動順序をずらす技術を開示している。特許文献２は、或るＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループのＨＤＤを起動する際に、起動時の消費電力を算出し、必要に応じてＨＤＤの起動順序をずらす技術を開示している。
【０００５】
また、ＨＤＤのスピンアップの開始から完了までには時間がかかるため、低消費電力状態のＨＤＤに対するＩ／Ｏ（Input/Output）には時間がかかる。この問題に関して、特許文献３に開示の技術がある。特許文献３は、ＨＤＤに対するＩ／Ｏの履歴に基づいて低消費電力状態のＨＤＤを事前に起動する技術を開示している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４６４２３４７号公報
【特許文献２】特開２０１０−００３１４９号公報
【特許文献３】特開２００９−０８０６０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、これらの技術では、１以上のＩ／Ｏ要求に基づく複数のＩ／Ｏコマンドの処理（例えばビッグデータ分析）に要する時間が長くなり得る。なぜなら、Ｉ／Ｏコマンドの状況に関わらず、Ｉ／Ｏコマンドの発行順序にＨＤＤが起動（スピンアップ）するためである。例えば、Ｉ／Ｏコマンド１の発行先となるＨＤＤ１と、Ｉ／Ｏコマンド２〜９の発行先となるＨＤＤ２があるとし、同時に起動可能なＨＤＤの数が１であるとする。Ｉ／Ｏコマンド１が最初に発行されると、ＨＤＤ１が先に起動開始する。ＨＤＤ１の起動時間（起動の開始から終了までの時間）経過後にＩ／Ｏコマンド１の応答１が返る。その後、ＨＤＤ２の起動時間経過後にＩ／Ｏコマンド２〜９の応答２〜９が返る。ＨＤＤ２の起動時間において、処理対象として存在する応答は、応答１のみである。
【０００８】
以上のような問題は、ＨＤＤ以外の記憶デバイス、例えばＳＳＤ（Solid State Drive）についても存在し得る。
【０００９】
また、以上のような問題は、同時に起動可能な記憶デバイスの数の制限が、消費電力の上限以外の制限であるケース、例えば、記憶デバイスリーダ（例えば、磁気テープリーダ）の数が記憶デバイス（例えば磁気テープ）の数よりも少ないケースについてもあり得る。なお、このケースでは、記憶デバイスの起動とは、その記憶デバイスに対するＩ／Ｏのために記憶デバイスを記憶デバイスリーダにセットすることである。
【課題を解決するための手段】
【００１０】
計算機システムは、複数のＩ／Ｏコマンドのうちの２以上のＩ／Ｏコマンドの発行先が複数の記憶デバイスのうちの非起動状態の２以上の記憶デバイスである場合、その２以上の記憶デバイスの起動順序を、その２以上の記憶デバイスにそれぞれ対応した２以上のＩ／Ｏ量に基づいて決定する。２以上の記憶デバイスの各々のＩ／Ｏ量は、２以上のＩ／Ｏコマンドのうちその記憶デバイスに対する１以上のＩ／Ｏコマンドに従うＩ／Ｏの量である。計算機システムは、決定した起動順序で、２以上の記憶デバイスを起動する。
【発明の効果】
【００１１】
１以上のＩ／Ｏ要求に基づく複数のＩ／Ｏコマンドの処理に要する時間を短くすることが期待できる。
【図面の簡単な説明】
【００１２】
【図１】実施例１に係るデータ管理システムの構成を示す。
【図２】デバイス制御システムの構成を示す。
【図３】クエリの一例を示す。
【図４】クエリ実行プランの一例を示す。
【図５】Ｉ／Ｏ制御プランの一例を示す。
【図６】デバイス制御プランの一例を示す。
【図７】データ格納テーブルの一例を示す。
【図８】Ｉ／Ｏ管理テーブルの一例を示す。
【図９】デバイスＩ／Ｏ管理テーブルの一例を示す。
【図１０】システム管理テーブルの一例を示す。
【図１１】デバイス電力管理テーブルの一例を示す。
【図１２】ＨＤＤ（Hard Disk Drive）の電力推移の一例を示す。
【図１３】クエリの受付から応答までの全体の流れを示す。
【図１４】デバイス制御プラン生成（図１３のＳ１３１２）の流れを示す。
【図１５】Ｉ／Ｏ制御（図１３のＳ１３１３）の流れを示す。
【図１６】電源制御の流れを示す。
【図１７】複数のＩ／Ｏコマンドの処理に要する時間の短縮の一例を示す模式図である。
【図１８】実施例２に係るデータ管理システムの構成を示す。
【図１９】実施例３に係るデータ管理システムの構成を示す。
【図２０】実施例４に係るストレージ装置の構成例を示す。
【図２１】実施例５に係る論理デバイスの一例を示す。
【図２２】実施例５に係るデータ格納テーブルの一例を示す。
【図２３】デバイスＩＤ変換テーブルの一例を示す。
【図２４】実施例６に係るストレージ装置の構成例を示す。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、幾つかの実施例を説明する。
【００１４】
以下の説明では、「インターフェース部」は、１以上のインターフェースである。１以上のインターフェースは、１以上の同種のインターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種のインターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１５】
また、以下の説明では、「メモリ部」は、１以上のメモリである。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。
【００１６】
また、以下の説明では、「プロセッサ部」は、１以上のプロセッサである。少なくとも１つのプロセッサは、典型的には、ＣＰＵ（Central Processing Unit）である。プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでもよい。
【００１７】
また、以下の説明では、「記憶デバイス」は、物理的な記憶デバイスを意味し、典型的には、不揮発性の記憶デバイス（例えば補助記憶デバイス）でよい。
【００１８】
また、以下の説明では、「ＲＡＩＤ」は、Redundant Array of Independent (or Inexpensive) Disksの略である。ＲＡＩＤグループは、複数の記憶デバイス（又は、複数の記憶デバイスに基づく複数の記憶領域）で構成され、そのＲＡＩＤグループに関連付けられたＲＡＩＤレベルに従いデータを記憶する。
【００１９】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ部によって実行されることで、定められた処理を、適宜にメモリ部及びインターフェース部のうちの少なくとも１つを用いながら行うため、処理の主語が、プロセッサ部とされてもよい。プログラムは、プログラムソースから計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ又は計算機が読み取り可能な記憶メディアであってもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２０】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例である。少なくとも１つのテーブルについて、全ての情報項目（例えば行又は列）が必須でなくてもよく、更なる情報項目があってもよいし、少なくとも１つの情報項目がなくてもよい。また、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００２１】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号（又は参照符号における共通部分）を使用し、同種の要素を区別して説明する場合は、要素のＩＤ（又は要素の参照符号）を使用することがある。例えば、ＨＤＤを特に区別しないで説明する場合には、「ＨＤＤ１０４０Ｈ」と記載し、個々のＨＤＤを区別して説明する場合には、「ＨＤＤ１」、「ＨＤＤ２」のように記載することがある。
【００２２】
また、以下の説明では、「計算機システム」は、サーバシステムとストレージシステムのうちの少なくとも１つでよい。「サーバシステム」は、１以上の物理的なサーバ（例えばサーバのクラスタ）であってもよいし、少なくとも１つの仮想的なサーバ（例えばＶＭ（Virtual Machine））を含んでもよい。また、「ストレージシステム」は、１以上の物理的なストレージ装置であってもよいし、少なくとも１つの仮想的なストレージ装置（例えばＳＤＳ（Software Defined Storage））を含んでもよい。
【実施例１】
【００２３】
図１は、実施例１に係るデータ管理システムの構成を示す。
【００２４】
サーバ１０００は、計算機システムの一例である。サーバ１０００は、例えば、パーソナルコンピュータ、ワークステーション又はメインフレームであってよく、もしくは、これらの計算機において仮想化プログラムによって構成された仮想的な計算機であってよい。サーバ１０００は、ネットワークカード１０１４、メモリ１０１０、ストレージ装置１０１６及びそれらに接続されたプロセッサ１０１５を有する。ネットワークカード１０１４、メモリ１０１０、ストレージ装置１０１６は、例えば、内部ネットワーク（例えばバス）１０７０経由でプロセッサ１０１５に接続される。サーバ１０００は、キーボードやポインティングデバイス等の入力デバイス（図示しない）と液晶ディスプレイ等の出力デバイス（図示しない）を有してもよい。入力デバイス及び出力デバイスは、プロセッサ１０１５に接続されていてよい。入力デバイスと出力デバイスは一体であってもよい。
【００２５】
プロセッサ１０１５は、プロセッサ部の一例である。プロセッサ１０１５は、例えば、マイクロプロセッサであり、コンピュータプログラムを実行する。プロセッサ１０１５により実行されるコンピュータプログラムは、例えば、ＯＳ（Operating System）１０１３、ＤＢＭＳ（Database management system）１０１１及びデバイス制御システム１０１２である。
【００２６】
メモリ１０１０は、メモリ部の一例である。メモリ１０１０は、例えば、揮発性のＤＲＡＭ（Dynamic Random Access Memory）等であり、プロセッサ１０１５によって実行されるプログラムと、プログラムが使用する情報（データ）を一時的に記憶する。プログラムは、上述したＯＳ１０１３、ＤＢＭＳ１０１１及びデバイス制御システム１０１２である。
【００２７】
ストレージ装置１０１６は、複数の記憶デバイス１０４０である。ストレージ装置１０１６は、例えば、複数のＨＤＤ（Hard Disk Drive）１０４０Ｈである。ストレージ装置１０１６は、１以上のＲＡＩＤグループであってもよい。ストレージ装置１０１６は、データベースを格納する。データベースは、例えば、１以上のＤＢテーブル（説明の混同を避けるために、データベース内のテーブルを「ＤＢテーブル」と呼ぶ）と、１以上の索引とを含む。データベースの一部はメモリ１０１０に格納されてもよい。
【００２８】
ネットワークカード１０１４は、インターフェース部の一例である。ネットワークカード１０１４は、外部ネットワーク（例えば、ＩＰ（Internet Protocol）ネットワーク、ＦＣ（Fibre Channel）ネットワーク）１０６０を介してクライアント１０３０に接続される。
【００２９】
クライアント１０３０は、例えば計算機である。クライアント１０３０は、ＤＢＭＳ１０１１に対するクエリの発行元の一例である。クエリ発行元は、クライアント１０３０に限らない。例えば、クエリ発行元は、代えて又は加えて、プロセッサ１０１５によって実行されるアプリケーションプログラム（図示せず）でもよい。
【００３０】
サーバ１０００は、性能や冗長性を高めるために、プロセッサ１０１５、メモリ１０１０、ストレージ装置１０１６及びネットワークカード１０１４のいずれか１つの要素を複数有してもよい。
【００３１】
サーバ１０００では、ＤＢＭＳ１０１１がクライアント１０３０から発行されたクエリを実行し、そのクエリの実行において、データベースからデータを読み出すために、又は、そのデータベースにデータを書き込むために、そのデータベースを格納するストレージ装置１０１６に対するＩ／ＯコマンドをＯＳ１０１３に発行する。ＯＳ１０１３は、そのＩ／Ｏコマンドを受け付け、ストレージ装置１０１６へＩ／Ｏコマンドを発行する。ストレージ装置１０１６内の各ＨＤＤ１０４０Ｈは、Ｉ／Ｏコマンドを受け付け、そのＩ／Ｏコマンドに従いデータの読み書きを行い、その結果を含んだ応答を返す。
【００３２】
ＤＢＭＳ１０１１は、クエリ受付部１０２１、実行プラン生成部１０２２及びクエリ実行部１０２３を含む。
【００３３】
クエリ受付部１０２１は、クライアント１０３０が発行するクエリを受け付ける。クエリは、Ｉ／Ｏ要求の一例である。クエリは、例えば、構造化問合せ言語（ＳＱＬ、Structured Query Language）によって記述される。
【００３４】
実行プラン生成部１０２２は、クエリ受付部１０２１が受け付けたクエリから、そのクエリを実行するために必要な１以上のデータベースオペレーションを含むクエリ実行プランを生成する。クエリ実行プランは、例えば、１以上のデータベースオペレーションと、データベースオペレーションの実行順序の関係を含む情報であり、メモリ１０１０に格納される。クエリ実行プランは、データベースオペレーションをノード、データベースオペレーションの実行順序の関係をエッジとする木構造で表されることがある。
【００３５】
クエリ実行部１０２３は、実行プラン生成部１０２２が生成したクエリ実行プランに従って、クエリ受付部１０２１が受け付けたクエリを実行し、その実行結果をクライアント１０３０に返す。この際、クエリ実行部１０２３は、クエリ実行プランにおけるデータベースオペレーションを所定の順序に従って実行し、クエリの実行結果をクエリ発行元であるクライアント１０３０に返すようになっている。
【００３６】
クエリ実行部１０２３は、１以上のクエリに基づき生成される複数のタスクを並列に実行できる。クエリ実行部１０２３は、少なくとも１つのタスクの実行の際に、データベースに対するデータの書込み又は読出しのために複数のＩ／Ｏコマンドをストレージ装置１０１６に対して発行する。
【００３７】
クエリ実行部１０２３は、複数のクエリを並列に処理してもよい。
【００３８】
また、ＤＢＭＳ１０１１は、特許４６１１８３０に開示の技術が適用されたＤＢＭＳでもよい。具体的には、例えば、クエリ実行部１０２３は、１つのクエリについて、（ａ）データベースオペレーションを実行するためのタスクを生成し、（ｂ）生成されたタスクを実行することで、そのタスクに対応したデータベースオペレーションに必要なデータの読出しコマンドを発行し、（ｃ）（ｂ）で実行されたタスクに対応したデータベースオペレーションの実行結果に基づき別のデータベースオペレーションを実行する必要がある場合には、その別のデータベースオペレーションをそれぞれ実行する１以上のタスクを新たに生成し、（ｄ）その新たに生成した１以上のタスクのそれぞれについて（ｂ）及び（ｃ）を行ってもよい。この場合、クエリ実行部１０２３は、このようにして生成された１以上のタスクを並行して実行してよい。クエリ実行部１０２３は、２以上の実行可能なタスクが存在する場合には、それら２以上のタスクのうちの少なくとも２つのタスクを並列に実行してよい。なお、上記において、クエリ実行部１０２３は、１のタスクで複数のデータベースオペレーションを実行してもよい。また、クエリ実行部１０２３は、都度に新たにタスクを生成することはせず、同じタスクにおいて次のデータベースオペレーションを実行してもよい。タスクの実装としては、例えば、ＯＳ１０１３が実現するプロセスやカーネルスレッド等のほか、ライブラリ等が実現するユーザスレッドを用いてよい。
【００３９】
デバイス制御システム１０１２は、２以上のＨＤＤ１０４０Ｈの起動順序を決定し、決定した起動順序で２以上のＨＤＤ１０４０Ｈを起動する。具体的には、例えば、デバイス制御システム１０１２は、ＤＢＭＳ１０１１により生成されたクエリ実行プランを基にＩ／Ｏ制御プランを生成し、そのＩ／Ｏ制御プランを基にデバイス制御プランを生成する。そして、デバイス制御システム１０１２は、デバイス制御プランに基づいてＨＤＤ１０４０Ｈの電源制御を行う。
【００４０】
図２は、デバイス制御システム１０１２の構成を示す。
【００４１】
デバイス制御システム１０１２は、Ｉ／Ｏ制御プラン生成部２００１、デバイス制御プラン生成部２００２、デバイス制御部２００３、電源制御部２００４及び電力測定部２００５を含む。
【００４２】
Ｉ／Ｏ制御プラン生成部２００１は、ＤＢＭＳ１０１１により生成されたクエリ実行プランに基づきＩ／Ｏ制御プランを生成する。Ｉ／Ｏ制御プラン５０００は、Ｉ／Ｏ対象データ（例えば索引又はＤＢテーブル）とＩ／Ｏ優先順位との関係を表す情報である。Ｉ／Ｏ優先順位が高いＩ／Ｏ対象データほど早くにＩ／Ｏがされることが望ましい。
【００４３】
デバイス制御プラン生成部２００２は、Ｉ／Ｏ制御プラン生成部２００１により生成されたＩ／Ｏ制御プランに基づきデバイス制御プランを生成する。デバイス制御プランは、複数のＩ／Ｏコマンドの発行先である１以上のＨＤＤ１０４０Ｈと、１以上のＨＤＤ１０４０Ｈにそれぞれ対応した１以上のＩ／Ｏ優先順位とを表す情報である。
【００４４】
デバイス制御部２００３は、デバイス制御プラン生成部２００２により生成されたデバイス制御プラン６０００に基づいて電源制御部２００４経由でＨＤＤ１０４０Ｈを起動する。デバイス制御部２００３は、Ｉ／Ｏブロック部２０１１、デバイスＩ／Ｏ測定部２０１２及びデバイスＩ／Ｏ比較部２０１３を含む。Ｉ／Ｏブロック部２０１１、デバイスＩ／Ｏ測定部２０１２及びデバイスＩ／Ｏ比較部２０１３は、それぞれ独立に動作可能である。
【００４５】
Ｉ／Ｏブロック部２０１１は、デバイス制御プランが表すＨＤＤ１０４０Ｈに対するＩ／Ｏを制御する。Ｉ／Ｏブロック部２０１１は、未だ起動されないＨＤＤ１０４０Ｈに対してはＩ／Ｏコマンド発行を抑止（ブロック）し、起動対象又は起動状態のＨＤＤ１０４０Ｈに対してはＩ／Ｏコマンドを発行する。「未だ起動されないＨＤＤ」とは、スタンバイ状態（低消費電力状態）のＨＤＤであり、いずれ起動対象となるが未だ起動の順番が来ていないＨＤＤである。「スタンバイ状態」とは、非起動状態の一例であり、消費電力が所定値未満の状態（具体的には、例えば、ディスクの回転が低速である又は停止している状態）である。「起動対象のＨＤＤ」とは、スタンバイ状態のＨＤＤであり、起動の順番が来たＨＤＤである。「起動状態のＨＤＤ」とは、起動完了後のＨＤＤ、例えば、後述のアクティブ状態及びアイドル状態のいずれかの状態である。
【００４６】
デバイスＩ／Ｏ測定部２０１２は、Ｉ／Ｏコマンド発行が抑止されているＨＤＤ１０４０Ｈ毎に、Ｉ／Ｏ量及び経過時間を測定する。以下、Ｉ／Ｏコマンド発行が抑止されているＨＤＤを「待ちＨＤＤ」と呼び、発行が抑止されているＩ／Ｏコマンドを「抑止Ｉ／Ｏコマンド」と呼ぶ。ＨＤＤ１０４０Ｈの「Ｉ／Ｏ量」は、そのＨＤＤ１０４０Ｈに対する１以上のＩ／Ｏコマンド（具体的には、そのＨＤＤ１０４０Ｈに対する全ての抑止Ｉ／Ｏコマンド）に従うＩ／Ｏの量である。本実施例では、「Ｉ／Ｏ量」として、「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」の少なくとも１つを採用することができる。ＨＤＤ１０４０Ｈの「Ｉ／Ｏ数」は、そのＨＤＤ１０４０Ｈに対する抑止Ｉ／Ｏコマンドの数である。ＨＤＤ１０４０Ｈの「Ｉ／Ｏサイズ」は、そのＨＤＤ１０４０Ｈに対する抑止Ｉ／Ｏコマンドに従うＩ／Ｏ対象のデータの合計サイズである。ＨＤＤ１０４０Ｈの「経過時間」は、そのＨＤＤ１０４０Ｈに対して最初にＩ／Ｏコマンドが抑止（ブロック）されてから経過した時間（つまり、抑止のＩ／Ｏコマンドのうち最初のＩ／Ｏコマンドが抑止されてから経過した時間）である。
【００４７】
デバイスＩ／Ｏ比較部２０１３は、２以上のＨＤＤ１０４０ＨのＩ／Ｏ量（Ｉ／Ｏ数及びＩ／Ｏサイズの少なくとも１つ）を比較し、比較の結果を基に、その２以上のＨＤＤ１０４０Ｈの起動順序を決定し、決定した起動順序で２以上のＨＤＤ１０４０Ｈの起動指示を電源制御部２００４に出す。
【００４８】
電源制御部２００４は、起動制御部の一例である。電源制御部２００４は、デバイス制御部２００３からの指示と、デバイス制御プラン生成部２００２により生成されたデバイス制御プランとのうちの少なくとも１つに基づいて、ＨＤＤ１０４０Ｈの起動制御を含む電源制御を行う。電源制御では、電力測定部２００５による電力測定結果が参照される。
【００４９】
電力測定部２００５は、サーバ１０００やストレージ装置１０１６の電力を測定する。
【００５０】
上述したクエリ受付部１０２１、実行プラン生成部１０２２、クエリ実行部１０２３、Ｉ／Ｏ制御プラン生成部２００１、デバイス制御プラン生成部２００２、デバイス制御部２００３（Ｉ／Ｏブロック部２０１１、デバイスＩ／Ｏ測定部２０１２、デバイスＩ／Ｏ比較部２０１３）、電源制御部２００４及び電力測定部２００５は、コンピュータプログラムがプロセッサ１０１５で実行されることによって実現されるが、これらのうち少なくとも１つの構成要素が行う処理の少なくとも一部が、ハードウェアによって実現されていてもよい。
【００５１】
また、図１に示したＤＢＭＳ１０１１の構成、及び、図２に示したデバイス制御システム１０１２の構成は、一例に過ぎない。例えば、ある構成要素は複数の構成要素に分割されていてもよく、複数の構成要素が１つの構成要素に統合されていてもよい。
【００５２】
以下、デバイス制御システム１０１２をより詳細に説明する。
【００５３】
図３は、クエリの一例を示す。図４は、クエリ実行プランの一例を示す。図５は、Ｉ／Ｏ制御プランの一例を示す。
【００５４】
クエリ受付部１０２１が、図３に示すクエリ３０００を受け付けた場合、実行プラン生成部１０２２が、図４に示すクエリ実行プラン４０００を生成する。Ｉ／Ｏ制御プラン生成部２００１は、図４に示すクエリ実行プラン４０００に基づき、図５に示すＩ／Ｏ制御プラン５０００を生成する。Ｉ／Ｏ制御プラン５０００は、クエリ実行プラン４０００から特定された索引やＤＢテーブルのＩ／Ｏ順序に従い定まる。図４に例示のクエリ実行プラン４０００によれば、階層が深い順に索引やＤＢテーブルに対してＩ／Ｏが行われる。そのクエリ実行プラン４０００では、６行目及び７行目が最も深いため初めにＩ／Ｏされる。しかし、５行目がＨＡＳＨ  ＪＯＩＮと記載されているため、ＨＡＳＨ  ＪＯＩＮ処理で最初に実行されるビルド処理に該当する６行目が最も初めにＩ／Ｏされる。次に、プローブ処理に該当する７行目が実行される。このようなクエリ実行プラン４０００に基づき、Ｉ／Ｏ制御プラン生成部２００１は、図５に例示のＩ／Ｏ制御プラン５０００を生成する。Ｉ／Ｏ制御プラン５０００は、Ｉ／Ｏ種別（例えば“Random Read I/O”）とＩ／Ｏ対象データ（例えば“ADBUSER01.Index.PART”のようなＤＢ要素名）とＩ／Ｏ優先順位（例えば“1-1”）との関係を表す。クエリ実行プラン４０００に複数の谷が存在する可能性があるため、Ｉ／Ｏ制御プラン５０００では、Ｉ／Ｏ優先順位として、“１−１”、“１−１”、“１−２”及び“１−３”のように、谷の存在を考慮することが望ましい。数字が小さいほどＩ／Ｏ優先順位が高い。
【００５５】
なお、クエリ実行プラン４０００及びＩ／Ｏ制御プラン５０００は、メモリ１０１０に格納されてよい。
【００５６】
図６は、デバイス制御プランの一例を示す。図７は、データ格納テーブルの一例を示す。
【００５７】
デバイス制御プラン生成部２００２は、図５に示したＩ／Ｏ制御プラン５０００に基づき、図６に示すデバイス制御プラン６０００を生成する。Ｉ／Ｏ制御プラン５０００は、Ｉ／Ｏ対象の索引及びＤＢテーブルを表している。また、図７に示すデータ格納テーブル７０００は、ＤＢ要素（索引やＤＢテーブル）毎に「ＤＢ要素名」（ＤＢ要素の名称）と「デバイスＩＤ」（ＤＢ要素が格納されているＨＤＤ１０４０ＨのＩＤ）とを表す。デバイス制御プラン生成部２００２は、Ｉ／Ｏ制御プラン５０００が表すＤＢ要素毎に、そのＤＢ要素が格納されているＨＤＤ１０４０Ｈを、データ格納テーブル７０００から特定し、そのＤＢ要素のＩ／Ｏ優先順位とそのＤＢ要素が格納されているＨＤＤ１０４０ＨのＩＤとを含んだデバイス制御プラン６０００を生成する。デバイス制御プラン６０００は、複数のＩ／Ｏコマンドの発行先である１以上のＨＤＤ１０４０Ｈと、１以上のＨＤＤ１０４０Ｈにそれぞれ対応した１以上のＩ／Ｏ優先順位とを表す情報である。デバイス制御プラン生成部２００２は、デバイス制御プラン６０００をデバイス制御部２００３と電源制御部２００４に送信する。
【００５８】
なお、デバイス制御プラン６０００及びデータ格納テーブル７０００は、例えばメモリ１０１０に格納される。
【００５９】
また、デバイス制御プラン６０００は、ローデバイスレベルのプラン（情報）である。このようなプランから、起動順序の制御対象のＨＤＤを特定することができ、特定されたＨＤＤ１０４０ＨのＩ／Ｏ量の比較結果に基づき、Ｉ／Ｏ順序と異なる順序でＨＤＤ１０４０Ｈを起動することができる。
【００６０】
そして、このようなデバイス制御プラン６０００（及び上述のＩ／Ｏ制御プラン５０００）（或いはこのようなプラン６０００（及び５０００）に基づく情報）は、性能解析等のために、管理者が使用する計算機（図示せず）に出力され表示されてもよい。つまり、デバイス制御プラン６０００は、ＨＤＤ１０４０Ｈの起動制御のための情報と、性能解析等のための情報とを兼ねることができる。
【００６１】
図８は、Ｉ／Ｏ管理テーブルの一例を示す。図９は、デバイスＩ／Ｏ管理テーブルの一例を示す。
【００６２】
クエリ実行部１０２３により生成されＩ／Ｏコマンド毎にＩ／Ｏ管理テーブル８０００が用意される。Ｉ／Ｏ管理テーブル８０００は、クエリ実行部１０２３、ＯＳ１０１３又はＩ／Ｏブロック部２０１１により作成されてよい。Ｉ／Ｏコマンド毎に、Ｉ／Ｏ管理テーブル８０００は、そのＩ／Ｏコマンドの発行先ＨＤＤのＩＤと、そのＩ／Ｏコマンドで指定される開始アドレスと、そのＩ／Ｏコマンドに従いＩ／Ｏされるデータのサイズとを表す。
【００６３】
Ｉ／Ｏブロック部２０１１は、抑止Ｉ／Ｏコマンドに対応したＩ／Ｏ管理テーブル８０００を基に、デバイスＩ／Ｏ管理テーブル９０００を生成する。図９の例によれば、デバイスＩ／Ｏ管理テーブル９０００は、起動単位毎に生成される。「起動単位」は、起動順番が付与される単位であり、本実施例は、ＨＤＤ１０４０Ｈである（起動単位は、ＨＤＤに代えて、ＲＡＩＤグループ単位のように他の単位でもよい）。
【００６４】
デバイスＩ／Ｏ管理テーブル９０００は、「デバイスＩＤ」（対応するＨＤＤ１０４０ＨのＩＤ）と、「状態」（そのＨＤＤ１０４０Ｈの状態）、「Ｉ／Ｏ数」（そのＨＤＤ１０４０Ｈを発行先とした抑止Ｉ／Ｏコマンドの数）、「Ｉ／Ｏサイズ」（そのＨＤＤ１０４０Ｈに対する全ての抑止Ｉ／Ｏコマンドに対応した「サイズ」の合計）、「経過時間」（そのＨＤＤ１０４０Ｈに対して最初にＩ／Ｏコマンドが抑止（ブロック）されてから経過した時間（つまり、抑止のＩ／Ｏコマンドのうち最初のＩ／Ｏコマンドが抑止されてから経過した時間））とを表す。「Ｉ／Ｏ数」、「Ｉ／Ｏサイズ」及び「経過時間」は、デバイスＩ／Ｏ測定部２０１２により測定された値である。
【００６５】
デバイスＩ／Ｏ比較部２０１３は、デバイス制御プラン６０００に記載のデバイスＩＤに対応したＨＤＤ１０４０ＨのデバイスＩ／Ｏ管理テーブル９０００を参照し、２以上のＨＤＤ１０４０ＨのＩ／Ｏ数（又はＩ／Ｏサイズ）を比較する。デバイスＩ／Ｏ比較部２０１３は、比較対象のＩ／Ｏ量がＩ／Ｏ数の場合、未出力のデバイスＩ／Ｏ管理テーブル９０００のうち、Ｉ／Ｏ数の最も大きいデバイスＩ／Ｏ管理テーブルを出力する。デバイスＩ／Ｏ比較部２０１３は、比較対象のＩ／Ｏ量がＩ／Ｏサイズの場合、未出力のデバイスＩ／Ｏ管理テーブル９０００のうち、Ｉ／Ｏサイズの最も大きいデバイスＩ／Ｏ管理テーブルを出力する。出力されたデバイスＩ／Ｏ管理テーブルに記載のデバイスＩＤに対応したＨＤＤ１０４０Ｈの起動を、デバイスＩ／Ｏ比較部２０１３は、電源制御部２００４に通知する。このような出力及び通知は、未出力のデバイスＩ／Ｏ管理テーブル９０００が無くなるまで繰り返される。結果として、起動順序が決定されたことになり、且つ、その起動順序が電源制御部２００４に通知されたことになる。なお、これに代えて、デバイスＩ／Ｏ比較部２０１３は、下記（Ａ）乃至（Ｄ）のうちの少なくとも（Ａ）及び（Ｂ）（更に（Ｃ）及び（Ｄ）のうちの少なくとも１つ）に該当する２以上のＨＤＤ１０４０Ｈ（スタンバイ状態のＨＤＤ１０４０Ｈ）のＩ／Ｏ量を比較してもよい。デバイスＩ／Ｏ比較部２０１３は、その比較の結果を基に、その２以上のＨＤＤ１０４０Ｈの起動順序を決定し、決定した起動順序で２以上のＨＤＤ１０４０Ｈを起動することを電源制御部２００４に依頼してよい。
（Ａ）抑止Ｉ／Ｏコマンドの発行先ＨＤＤである。
（Ｂ）抑止Ｉ／Ｏコマンドが並行されて発行されてよいＨＤＤである。
（Ｃ）デバイス制御プランに書かれているＩ／Ｏ優先順位が同じＨＤＤである。
（Ｄ）同時に起動することができない（同時に起動すると後述の電力限界を超えることになる）ＨＤＤである。
【００６６】
図６及び図９の例によれば、スタンバイ状態のＨＤＤ１及びＨＤＤ２のＩ／Ｏ優先順位は同一である。また、ＨＤＤ１及びＨＤＤ２を同時に起動すると（例えば、同時にピーク電力に達すると）、後述の電力限界を超えるとする。デバイスＩ／Ｏ比較部２０１３は、ＨＤＤ１のＩ／Ｏ数“２０”とＨＤＤ２のＩ／Ｏ数“３”とを比較した場合、ＨＤＤ２よりもＨＤＤ１の起動順番を先とする。ＨＤＤ２よりもＨＤＤ１の方がＩ／Ｏ数が大きいためである。また、デバイスＩ／Ｏ比較部２０１３は、ＨＤＤ１のＩ／Ｏサイズ“８０ＫＢ”とＨＤＤ２のＩ／Ｏサイズ“１２ＫＢ”とを比較した場合、ＨＤＤ２よりもＨＤＤ１の起動順番を先とする。ＨＤＤ２よりもＨＤＤ１の方がＩ／Ｏサイズが大きいためである。
【００６７】
上述したＩ／Ｏ管理テーブル８０００及びデバイスＩ／Ｏ管理テーブル９０００は、例えばメモリ１０１０に格納される。
【００６８】
図１０は、システム管理テーブルの一例を示す。
【００６９】
システム管理テーブル１２０は、システム管理単位に対応したテーブルであって、例えばメモリ１０１０に格納される。「システム管理単位」は、複数のＨＤＤ１０４０Ｈを含んだシステム管理の単位であって、例えば、サーバ１０００、ストレージ装置１０１６、ＲＡＩＤグループ、又は、実施例２で述べるような論理デバイスでもよい。本実施例では、システム管理単位は、ストレージ装置１０１６である。
【００７０】
システム管理テーブル１２０は、「デバイスＩＤ」（システム管理単位のＩＤ）、「種別」（管理単位の種別）、「状態」（システム管理単位の状態）、「電力限界」（システム管理単位の消費電力の上限）、「現電力」（システム管理単位の消費電力）、「デッドライン時間」（システム管理単位に属する各ＨＤＤのデッドライン時間（Ｉ／Ｏコマンドが最初に抑止されてからの経過時間の最大値））、及び、「デバイス制御指定」（システム管理単位に属するＨＤＤ１０４０Ｈの起動順序の決定のために採用されるＩ／Ｏ量の種類）を表す。「デッドライン時間」として、“-1”のような無効値が設定された場合、デッドライン制御は行われない。
【００７１】
図１１は、デバイス電力管理テーブルの一例を示す。
【００７２】
デバイス電力管理テーブル１２１は、電力管理単位毎に存在するテーブルであって、例えばメモリ１０１０に格納される。「電力管理単位」は、１以上のＨＤＤ１０４０Ｈを含んだ電力管理の単位であって、例えば、ストレージ装置１０１６、ＲＡＩＤグループ、又は、実施例２で述べるような論理デバイスでもよい。本実施例では、電力管理単位は、ＨＤＤ１０４０Ｈである。デバイス電力管理テーブル１２１は、「デバイスＩＤ」（対応するＨＤＤ１０４０ＨのＩＤ）、「種別」（電力管理単位の種別（ＨＤＤ１０４０Ｈに対応するため“物理”））、「状態」（そのＨＤＤ１０４０Ｈの状態）、「停止時刻」、「起動時刻」、「起動時間」、「停止電力」、「起動電力」、「スタンバイ時間」、「ピーク電力」、「アクティブ電力」、「アイドル電力」及び「スタンバイ電力」を表す。「停止時刻」、「起動時刻」、「起動時間」、「停止電力」、「起動電力」、「スタンバイ時間」、「ピーク電力」、「アクティブ電力」、「アイドル電力」及び「スタンバイ電力」の少なくとも１つが、電力測定部２００５により測定された値である。「停止時刻」、「起動時刻」、「起動時間」、「停止電力」、「起動電力」、「スタンバイ時間」、「ピーク電力」、「アクティブ電力」、「アイドル電力」及び「スタンバイ電力」については、図１２を参照して説明する。
【００７３】
図１２は、ＨＤＤ１０４０Ｈの電力推移の一例を示す。
【００７４】
ＨＤＤ１０４０Ｈは、アクティブ状態からアイドル状態に遷移する。「アクティブ電力」は、アクティブ状態のときの消費電力であり、「アイドル電力」は、アイドル状態のときの消費電力である。
【００７５】
ＨＤＤ１０４０Ｈは、アイドル状態に遷移後、例えば一定時間Ｉ／Ｏコマンドを受けなかった場合に、スタンバイ状態に遷移する。「停止時刻」は、スタンバイ状態へ遷移することを開始した時刻（例えばスピンダウン開始時刻）である。「停止時間」は、スタンバイ状態へ遷移することを開始してから終了するまでの時間である。「停止電力」は、スタンバイ状態へ遷移するために消費する電力である。
【００７６】
ＨＤＤ１０４０Ｈは、スタンバイ状態に遷移後、起動命令を受けた場合に（Ｉ／Ｏコマンドが起動命令を兼ねてもよい）、起動する。ＨＤＤ１０４０Ｈの起動が開始すると、ＨＤＤ１０４０Ｈの消費電力がピーク電力まで上昇する。ＨＤＤ１０４０Ｈの消費電力がピーク電力からアイドル電力まで低下すると、ＨＤＤ１０４０Ｈの起動が終了する。「起動時刻」は、起動が完了した時刻（例えばスピンアップ完了時刻）である。「起動時間」は、起動が開始してから終了するまでの時間である。「起動電力」は、起動のために消費する電力である。「ＨＤＤが起動する」とは、少なくとも起動開始することであり、起動終了することまでをも含んでもよい。
【００７７】
「スタンバイ時間」は、停止時刻から起動時刻までの時間であって、スタンバイ状態に遷移したことの効果が期待できる時間（例えば、削減された消費電力が停止電力と起動電力との合計よりも大きいことが期待できる時間）である。
【００７８】
本実施例では、全ての発行先ＨＤＤ（Ｉ／Ｏコマンドの発行先のＨＤＤ）を必ずしも同時に起動することができるとは限らない。上述した「電力限界」及び「現電力」と、ＨＤＤ１０４０Ｈが起動するときに消費する電力（例えば、「ピーク電力」及び「起動電力」）と、起動状態（典型的にはアクティブ状態又はアイドル状態）のＨＤＤ１０４０Ｈの数とを含んだ情報が、同時に起動可能なＨＤＤ１０４０Ｈの数の制限に関する制限情報の一例である。このような制限情報を基に、同時に起動可能なＨＤＤ１０４０Ｈの数が定まる。
【００７９】
以下、本実施例で行われる処理の一例を説明する。
【００８０】
図１３は、クエリの受付から応答までの全体の流れを示す。
【００８１】
Ｓ１３０１で、クエリ受付部１０２１は、クライアントからクエリ３０００（例えば図３）を受け付ける。
【００８２】
Ｓ１３０２で、実行プラン生成部１０２２は、Ｓ１３０１で受け付けられたクエリ３０００を基に、クエリ実行プラン４０００（例えば図４）を生成する。
【００８３】
Ｓ１３０３で、Ｓ１３０１で受け付けられたクエリ３０００の処理が行われる。すなわち、Ｓ１３０２で生成されたクエリ実行プラン４０００に基づき、クエリ実行部１０２３により、複数のＩ／Ｏコマンドがストレージ装置１０１６に発行される。発行されたＩ／Ｏコマンド毎に、Ｉ／Ｏ管理テーブル８０００（図８）が更新される。
【００８４】
Ｓ１３０３のクエリ処理では、例えば次のような処理が行われる。
【００８５】
Ｓ１３１１で、Ｉ／Ｏ制御プラン生成部２００１は、Ｓ１３０２で生成されたクエリ実行プラン４０００を基に、Ｉ／Ｏ制御プラン５０００（例えば図５）を生成する。Ｉ／Ｏ制御プラン生成部２００１は、例えば、Ｉ／Ｏ制御プラン５０００をデバイス制御プラン生成部２００２に送信する。
【００８６】
Ｓ１３１２で、デバイス制御プラン生成部２００２は、Ｓ１３０３で生成されたＩ／Ｏ制御プラン５０００を基に、デバイス制御プラン６０００（例えば図６）を生成する。
【００８７】
Ｓ１３１３で、デバイス制御部２００３は、Ｓ１３０４で生成されたデバイス制御プラン６０００に記載のＨＤＤ１０４０Ｈに対するＩ／Ｏコマンド発行を抑止し、そのデバイス制御プラン６０００と、抑止Ｉ／Ｏコマンドの発行先ＨＤＤ１０４０ＨのＩ／Ｏ量とを基に、ＨＤＤ１０４０Ｈの起動順序を決定する。電源制御部２００４が、決定された起動順序でＨＤＤ１０４０Ｈを起動する。起動したＨＤＤ１０４０Ｈについて抑止Ｉ／Ｏコマンドが発行される（Ｉ／Ｏコマンド抑止が解除される）。クエリ実行部１０２３は、起動したＨＤＤ１０４０Ｈに対して発行された１以上のＩ／Ｏコマンドの１以上の応答をメモリ１０１０に格納する。
【００８８】
Ｓ１３０４で、クエリ実行部１０２３は、Ｓ１３０１で受け付けられたクエリ３０００に基づくＩ／Ｏコマンドの応答（メモリ１０１０内の応答）に基づき、クエリ３０００の応答をクライアント１０３０に返す。
それらの応答に基づき、クエリ３０００の応答をクライアント１０３０に返す。
【００８９】
以上が、クエリ３０００の受付から応答までの全体の流れである。
【００９０】
図１４は、デバイス制御プラン生成（図１３のＳ１３１２）の流れを示す。
【００９１】
Ｓ１４０１で、デバイス制御プラン生成部２００２は、Ｉ／Ｏ制御プラン生成部２００１からＩ／Ｏ制御プラン５０００を受信する。
【００９２】
Ｓ１４０２で、デバイス制御プラン生成部２００２は、Ｉ／Ｏ制御プラン５０００からＤＢ要素名（例えば“ADBUSER0１.Indext.PART”）を抽出する。
【００９３】
Ｓ１４０３で、デバイス制御プラン生成部２００２は、抽出したＤＢ要素名（例えば“ADBUSER0１.Indext.PART”）に対応するデバイスＩＤ（例えば“HDD1”）をデータ格納テーブル７０００から取得する。
【００９４】
Ｓ１４０４で、デバイス制御プラン生成部２００２は、取得したデバイスＩＤと、そのデバイスＩＤに対応したＤＢ要素名に対応するＩ／Ｏ優先順位とに基づいて、デバイス制御プラン６０００を生成する。
【００９５】
Ｓ１４０５で、デバイス制御プラン生成部２００２は、デバイス制御プラン６０００をデバイス制御部２００３及び電源制御部２００４のうちの少なくともデバイス制御部２００３に送信する。
【００９６】
図１５は、Ｉ／Ｏ制御（図１３のＳ１３１３）の流れを示す。
【００９７】
Ｓ１５０１で、デバイス制御部２００３は、デバイス制御プラン生成部２００２からデバイス制御プラン６０００を受信する。
【００９８】
Ｓ１５０２で、Ｉ／Ｏブロック部２０１１は、デバイス制御プラン６０００に記載のＨＤＤ１０４０Ｈに対するＩ／Ｏコマンド発行を抑止する。但し、起動状態（例えばアクティブ状態又はアイドル状態）のＨＤＤ１０４０Ｈについては、Ｉ／Ｏブロック部２０１１は、Ｉ／Ｏコマンド発行を抑止しない。つまり、起動状態のＨＤＤ１０４０Ｈに対するＩ／Ｏコマンドは、抑止されることなくそのＨＤＤ１０４０Ｈに対して発行される。
【００９９】
Ｓ１５０３で、デバイスＩ／Ｏ測定部２０１２は、抑止Ｉ／Ｏコマンドに対応したＩ／Ｏ管理テーブル８０００を基に、その抑止Ｉ／Ｏコマンドの発行先ＨＤＤ１０４０Ｈに対応したデバイスＩ／Ｏ管理テーブル９０００を更新する。例えば、抑止Ｉ／Ｏコマンドの数と、抑止Ｉ／Ｏコマンドに従うサイズが、それぞれ、「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」に加算される。なお、Ｉ／Ｏ管理テーブル８０００における「Ｉ／Ｏ数」、「Ｉ／Ｏサイズ」及び「経過時間」は、１又は複数のクエリ３０００の処理における或る時点での値である。例えば、複数のクエリ３０００が並列に処理されている場合、Ｉ／Ｏ管理テーブル８０００における「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」は、それぞれ、その複数のクエリ３０００の並列処理における値である。また、１以上のクエリ３０００について２以上のタスクが生成されて並列に実行される場合、Ｉ／Ｏ管理テーブル８０００における「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」は、それぞれ、その２以上のタスクの並列処理における値である。なお、「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」つまり「ＩＯ量」は実測値でなくともよい。例えば、デバイスＩ／Ｏ測定部２０１２は、クエリ実行プラン４０００を基に「ＩＯ量」を予測してもよい。実行プラン生成部１０２２がクエリ実行プラン４０００を作る手法の１つとしてコストベース最適化と呼ばれるものがある。これは、統計情報を基に処理件数やシーケンシャルアクセス時のデータ読み出し量を予測し、その予測値からＩＯ処理量やＣＰＵ処理量に相当するコスト値を計算し、コスト値が小さくなるものを選択する手法である。クエリ実行プラン４０００中に予測処理件数、もしくはデータ読み出し量の予測値を含めておき、デバイスＩ／Ｏ測定部２０１２は、この値から「ＩＯ量」を予測する。例えばランダムＩＯの場合は予測処理件数に定数（例：２）を乗じたものが「ＩＯ数」となり、それに事前に定めた定数（例：４ＫｉＢ）を乗じたものが「ＩＯサイズ」となる。シーケンシャルＩＯの場合は予測データ読み出し量が「ＩＯサイズ」となり、それを定数で除したものが「ＩＯ数」となる。データが複数のデバイスに記憶されている場合は、事前に定められたルール（例：各デバイス均等に割り振る、データ記憶に利用されているサイズに比例して割り振る）で「ＩＯ数」「ＩＯサイズ」を分割する。また、デバイスＩ／Ｏ測定部２０１２は、過去の実行時の情報を用いて「ＩＯ量」を設定してもよい。この場合、実行プラン生成部１０２２は同じと判断したクエリに対しては同じクエリ実行プラン４０００を生成する。同じクエリ実行プラン４０００に対しては同じＩ／Ｏ制御プラン５０００が生成される。そこで、デバイス制御プラン６０００中に対応するクエリ実行プラン４０００もしくはＩ／Ｏ制御プラン５０００の識別情報（例：生成した制御プランの識別子や制御プランから生成するハッシュ値）を記録しておく。デバイスＩ／Ｏ測定部２０１２は、過去の「ＩＯ量」を保存しておき、デバイス制御プラン６０００中に記録されたクエリ実行プラン４０００もしくはＩ／Ｏ制御プラン５０００から、保存された過去の対応する「ＩＯ量」を把握し、その値を設定する。
【０１００】
Ｓ１５０４で、デバイスＩ／Ｏ比較部２０１３は、デバイス制御プラン６０００に記載の待ちＨＤＤ１０４０Ｈ（Ｉ／Ｏコマンド発行が抑止されているＨＤＤ１０４０Ｈ）に対応したデバイスＩ／Ｏ管理テーブル９０００の「Ｉ／Ｏ数」、「Ｉ／Ｏサイズ」及び「経過時間」を基に、それら待ちＨＤＤ１０４０Ｈの起動順序を決定する。デバイスＩ／Ｏ比較部２０１３は、決定した起動順序で待ちＨＤＤ１０４０Ｈを起動することを電源制御部２００４に依頼する。起動順序の決定について、以下の例（０１〜０８）のうちの少なくとも１つが採用されてよい。
（０１）システム管理テーブル１２０に記載の「デバイス制御指定」が“Ｉ／Ｏ数”であれば、比較対象のＩ／Ｏ量として「Ｉ／Ｏ数」が採用される（又は、最優先とされる）。
（０２）システム管理テーブル１２０に記載の「デバイス制御指定」が“Ｉ／Ｏサイズ”であれば、比較対象のＩ／Ｏ量として「Ｉ／Ｏサイズ」が採用される（又は、最優先とされる）。
（０３）Ｉ／Ｏ種別がランダムＩ／Ｏであれば、比較対象のＩ／Ｏ量として「Ｉ／Ｏ数」が採用される（又は、最優先とされる）。Ｉ／Ｏ種別がランダムＩ／Ｏにあることに加えて、記憶デバイスがランダムデバイスの場合に、比較対象のＩ／Ｏ量として「Ｉ／Ｏ数」が採用されてもよい（又は、最優先とされてもよい）。「ランダムデバイス」とは、後述のシーケンシャルデバイスに比べてランダムＩ／Ｏ可能が高速な記憶デバイス（例えばＨＤＤ又はＳＳＤ（Solid State Drive））である。
（０４）Ｉ／Ｏ種別がシーケンシャルＩ／Ｏであれば、比較対象のＩ／Ｏ量として「Ｉ／Ｏサイズ」が採用される（又は、最優先とされる）。Ｉ／Ｏ種別がシーケンシャルＩ／Ｏにあることに加えて、記憶デバイスがシーケンシャルデバイスの場合に、比較対象のＩ／Ｏ量として「Ｉ／Ｏサイズ」が採用されてもよい（又は、最優先とされてもよい）。「シーケンシャルデバイス」とは、ランダムＩ／ＯよりもシーケンシャルＩ／Ｏが高速な記憶デバイス（例えばテープ）である。
（０５）Ｉ／Ｏ優先順位が同じＨＤＤ１０４０Ｈの数が、上述した制限情報を基に特定されるＨＤＤ数（同時に起動可能なＨＤＤ１０４０Ｈの数）を超える場合、少なくともＩ／Ｏ優先順位が同じＨＤＤ１０４０Ｈの起動順序が決定される。
（０６）Ｉ／Ｏ量として「Ｉ／Ｏ数」が採用された場合（又は最優先の場合）、「Ｉ／Ｏ数」が大きい待ちＨＤＤ１０４０Ｈほど、起動順番が早い。「Ｉ／Ｏ数」が同じ待ちＨＤＤ１０４０Ｈについては、「Ｉ／Ｏサイズ」が大きい待ちＨＤＤ１０４０Ｈほど、起動順番が早くてよい。
（０７）Ｉ／Ｏ量として「Ｉ／Ｏサイズ」が採用された場合（又は最優先の場合）、「Ｉ／Ｏサイズ」が大きい待ちＨＤＤ１０４０Ｈほど、起動順番が早い。「Ｉ／Ｏ数」が同じ待ちＨＤＤ１０４０Ｈについては、「Ｉ／Ｏサイズ」が大きい待ちＨＤＤ１０４０Ｈほど、起動順番が早くてよい。
（０８）各待ちＨＤＤ１０４０Ｈの起動順番は、その待ちＨＤＤ１０４０Ｈに対応したデバイスＩ／Ｏ管理テーブル９０００に記載の「経過時間」と、システム管理テーブル１２０に記載の「デッドライン時間」と、その待ちＨＤＤ１０４０Ｈに対応したデバイス電力管理テーブル１２１に記載の「起動時間」とに基づく。「デッドライン時間」−「起動時間」＝「経過時間」となった待ちＨＤＤ１０４０Ｈの起動順番は、Ｉ／Ｏ量（「Ｉ／Ｏ数」又は「Ｉ／Ｏサイズ」）の多寡に関わらず、最先でもよい。これにより、Ｉ／Ｏ量が少ない状態が維持されているが故にいつまでもＩ／Ｏコマンドが抑止されたままとなることを回避することができる。また、起動時間分早い時点でＩ／Ｏコマンド抑止が解除されるためにＩ／Ｏコマンドの応答をデッドライン時間の経過時点になるべく近い時点で受けることが期待できる。
【０１０１】
デバイスＩ／Ｏ比較部２０１３は、定期的に起動順序を決定することができる。また、デバイスＩ／Ｏ比較部２０１３は、電源制御部２００４からの指示に応答して起動順序を決定し通知することができる。
【０１０２】
Ｓ１５０５で、Ｉ／Ｏブロック部２０１１は、待ちＨＤＤ１０４０Ｈが実行済みＨＤＤ１０４０Ｈとなった場合（その待ちＨＤＤ１０４０Ｈが起動してＩ／Ｏコマンドの応答を返した場合）、その実行済みＨＤＤ１０４０Ｈに対してＩ／Ｏコマンドが発行されるならばその発行を抑止する。また、実行済みＨＤＤ１０４０Ｈに対応したデバイスＩ／Ｏ管理テーブル９０００における「Ｉ／Ｏ数」、「Ｉ／Ｏサイズ」及び「経過時間」は、実行されたＩ／Ｏコマンドに応じてデバイスＩ／Ｏ測定部２０１２により更新される。
【０１０３】
Ｓ１５０６で、デバイスＩ／Ｏ比較部２０１３は、実行済みＨＤＤ１０４０Ｈに対応した「Ｉ／Ｏ数」及び「Ｉ／Ｏサイズ」がいずれも“０”であり（つまり新たに抑止Ｉ／Ｏコマンドが発生しておらず）、且つ、その実行済みＨＤＤ１０４０Ｈに対するＩ／Ｏが将来発生する見込みが無い（一定時間以内にＩ／Ｏが発生する見込みが無い）ことをデバイス制御プラン６０００から特定できた場合、電源制御部２００４に対して、その特定された実行済みＨＤＤ１０４０Ｈの停止（スタンバイ状態への遷移）を指示する。なお、Ｉ／Ｏが将来発生する見込みが無いＨＤＤ１０４０Ｈをデバイス制御プラン６０００から特定することは、デバイスＩ／Ｏ比較部２０１３に代えて電源制御部２００４が行ってもよい。つまり、電源制御部２００４は、デバイスＩ／Ｏ比較部２０１３からＨＤＤ１０４０Ｈの停止指示を受けること無しに、その特定されたＨＤＤ１０４０Ｈを停止してもよい。
【０１０４】
図１６は、電源制御の流れを示す。
【０１０５】
Ｓ１６０１で、電源制御部２００４は、デバイス操作を受けたか否かを判断する。「デバイス操作」とは、起動順序の通知、又は、ＨＤＤ１０４０Ｈの停止指示である。
【０１０６】
Ｓ１６０１の判断結果が真の場合（Ｓ１６０１：Ｙｅｓ）、Ｓ１６０２で、電源制御部２００４は、システム管理テーブル１２０に記載の「電力限界」及び「現電力」と、各ＨＤＤ１０４０Ｈのデバイス電力管理テーブル１２１とを基に、電源制御を行う。
【０１０７】
例えば、電源制御部２００４は、「現電力」と起動対象のＨＤＤ（起動の順番が来たＨＤＤ）１０４０Ｈの「起動電力」（「ピーク電力」）との合計が「電源限界」以下か否かを判断する。その判断結果が真の場合、電源制御部２００４は、起動対象のＨＤＤ１０４０Ｈを起動する。
【０１０８】
また、例えば、電源制御部２００４は、「現電力」と停止対象のＨＤＤ１０４０Ｈの「停止電力」との合計が「電源限界」以下か否かを判断する。その判断結果が真の場合、電源制御部２００４は、停止対象のＨＤＤ１０４０Ｈを停止する。「停止対象のＨＤＤ」とは、例えば、Ｉ／Ｏが将来発生する見込みが無いＨＤＤとしてデバイス制御プラン６０００から特定されたＨＤＤであり、デバイスＩ／Ｏ比較部２０１３からの停止指示で指定されているＨＤＤであってもよいし、電源制御部２００４によって停止対象として特定されたＨＤＤであってもよい。
【０１０９】
Ｓ１６０１の判断結果が偽の場合（Ｓ１６０１：Ｎｏ）、Ｓ１６０３で、電源制御部２００４は、デバイス制御プラン６０００に未起動のＨＤＤ１０４０Ｈがある否かを判断する。
【０１１０】
Ｓ１６０３の判断結果が真の場合（Ｓ１６０３：Ｙｅｓ）、Ｓ１６０４で、電源制御部２００４は、デバイスＩ／Ｏ比較部２０１３に電源制御に関する指示を依頼する。この依頼に応答して、デバイスＩ／Ｏ比較部２０１３は、起動順序を決定（更新）する。
【０１１１】
以上が、実施例１の説明である。
【０１１２】
図１７は、複数のＩ／Ｏコマンドの処理に要する時間の短縮の一例を示す模式図である。
【０１１３】
Ｉ／Ｏコマンド１〜３があるとする。Ｉ／Ｏコマンド１、２及び３の順でＩ／Ｏコマンドが発行されたとする。１つのＩ／Ｏコマンド１の発行先がＨＤＤ１であり、２つのＩ／Ｏコマンド２及び３の発行先がＨＤＤ２であるとする。また、図１７では、Ｉ／Ｏコマンドｋ（ｋ＝１〜３のいずれか）に対応したＩ／Ｏ処理ｋを、「I/O-P k」と表記する。なお、「Ｉ／Ｏ処理ｋ」は、Ｉ／Ｏコマンドｋの応答の処理である。
【０１１４】
一比較例によれば、Ｉ／Ｏ順にＨＤＤが起動する。このため、ＨＤＤ１、ＨＤＤ２の順にＨＤＤが起動することになる。そして、ＨＤＤ２の起動中に、Ｉ／Ｏ処理１が行われ、ＨＤＤ２の起動完了後に、Ｉ／Ｏ処理２及び３、つまり２つのＩ／Ｏ処理が行われることになる。
【０１１５】
一方、本実施例によれば、Ｉ／Ｏ量の多い順にＨＤＤが起動する。このため、ＨＤＤ２、ＨＤＤ１の順にＨＤＤが起動することになる。そして、ＨＤＤ１の起動中に、２つのＩ／Ｏコマンド２及び３に対応したＩ／Ｏ処理２及び３が済み、ＨＤＤ１の起動完了後には、１つのＩ／Ｏ処理１だけが行われればよい。言い換えれば、本実施例によれば、デバイス制御システム１０１２が、ＩＯコマンドが発行されてからそのＩＯコマンドに応答するまでの時間（処理時間）が長い記憶デバイス宛てのＩＯコマンドを、処理時間が短い記憶デバイス宛てのＩＯコマンドよりも先に発行されるように制御する。
【０１１６】
ＨＤＤの起動には時間がかかる。具体的には、ＨＤＤがスタンバイ状態から起動状態になるまでには起動時間といった時間がかかる。本実施例では、最後の起動時間よりも前の起動時間中に、多くのＩ／Ｏ処理を実行しておき、最後の起動時間後のＩ／Ｏ処理をなるべく少なくすることができる。これにより、本実施例では、１以上のクエリ３０００に基づく複数のＩ／Ｏコマンドの処理に要する時間を短くすることが期待できる。なお、図１７の具体例では、ＨＤＤ２の起動完了後にＨＤＤ１の起動を行う例を示したが、本実施例はこれに限られるものではない。たとえば、複数のＨＤＤの消費電力の合計がシステムの電力限界を越えなければ、ＨＤＤ２の起動中にＨＤＤ１の起動を起動してもよい。
【実施例２】
【０１１７】
実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略又は簡略する。
【０１１８】
図１８は、実施例２に係るデータ管理システムの構成を示す。
【０１１９】
デバイス制御システムがサーバ１８００の内外に複数のシステム部分として分散している。具体的には、例えば、サーバ１８００内に第１のシステム部分１８１２Ａ及び第２のシステム部分１８１２Ｂが存在する。サーバ１８００外に第３のシステム部分１８１２Ｃが存在する（第３のシステム部分１８１２Ｃは例えば外部ネットワーク１０６０に接続される）。システム部分１８１２Ａ〜１８１３Ｃが、上述したＩ／Ｏ制御プラン生成部２００１、デバイス制御プラン生成部２００２、Ｉ／Ｏブロック部２０１１、デバイスＩ／Ｏ測定部２０１２、デバイスＩ／Ｏ比較部２０１３、電源制御部２００４及び電力測定部２００５を含む。システム部分１８１２Ａ〜１８１３Ｃにおいて、デバイス制御システムの同一の構成要素が重複して存在しないでよい。第２のシステム部分１８１２Ｂ及び第３のシステム部分１８１２Ｃの各々は、ハードウェア回路（装置）でもよいし、プロセッサ及びメモリを含んだ計算機でもよい
【０１２０】
実施例２では、システム部分１８１２Ａ及び１８１２Ｂを含んだサーバ１８００と、システム部分１８１２Ｃとが、計算機システムの一例である。
【実施例３】
【０１２１】
実施例３を説明する。その際、実施例１及び２との相違点を主に説明し、実施例１及び２との共通点については説明を省略又は簡略する。
【０１２２】
図１９は、実施例３に係るデータ管理システムの構成を示す。
【０１２３】
サーバ１９００に外部ネットワーク１０６０を介してストレージシステム１９１０が接続されている。デバイス制御システムが、サーバ１９００の内外、具体的には、サーバ１９００及びストレージシステム１９１０に分散している。より具体的には、例えば、サーバ１９００内に第１のシステム部分１９１２Ａが存在し、ストレージシステム１９１０内に第２のシステム部分１９１２Ｂ及び第３のシステム部分１９１３Ｂが存在する。
【０１２４】
なお、本実施例では、サーバ１９００は、クライアント１０３０からのクエリに基づくＩ／Ｏ指示を、ストレージシステム１９１０に発行する。ストレージシステム１９１０は、内部ネットワーク１９６０を含む。内部ネットワーク１９６０に、ストレージ装置（複数の記憶デバイス）１９２１と、メモリ１９１２と、外部ネットワーク１０６０に接続されるネットワークカード１９２４と、第３のシステム部分１８１２Ｃと、プロセッサ１９２３とを有する。ストレージ装置１９２１は、１以上のＲＡＩＤグループを含む。メモリ１９１２が、ストレージ制御プログラム１９２２と、第２のシステム部分１９１２Ｂとを記憶する。プロセッサ１９２３は、ストレージ制御プログラム１９２２を実行することにより、ストレージ装置１９２１に対するＩ／Ｏをサーバ１９００からのＩ／Ｏ指示に応じて実行する。
【０１２５】
ストレージシステム１９１０のメモリ１９１２に、電力管理単位毎（例えば記憶デバイス毎）のデバイス電力管理テーブル１１００が格納されることが望ましい。データベースの少なくとも一部は、ストレージ装置１０１６及び１９２１のうちの少なくともストレージ装置１９２１に格納されてよい。
【実施例４】
【０１２６】
実施例４を説明する。その際、実施例１〜３との相違点を主に説明し、実施例１〜３との共通点については説明を省略又は簡略する。
【０１２７】
図２０は、実施例４に係るストレージ装置の構成例を示す。
【０１２８】
ストレージ装置１０１６及び１９２１のうちの少なくとも１つに代えて、ストレージ装置２００が採用されてよい。ストレージ装置２００は、異なる種類の記憶デバイス１０４０を含む複数の記憶デバイス１０４０を含む。例えば、ストレージ装置２００は、複数のＨＤＤ１０４０Ｈと複数のＳＳＤ１０４０Ｓとを含む。
【０１２９】
ストレージ装置２００は、複数のデバイスボックス２０１を含んでよい。各デバイスボックス２０１が、同種又は異種の複数の記憶デバイス１０４０を含んでよい。
【０１３０】
デバイス電力管理テーブル１１００は、デバイスボックス２０１毎に用意されてよい。また、デバイスボックス２０１内の記憶デバイス１０４０毎に、デバイス電力管理テーブル１１００が用意されてよい。つまり、電療区管理単位は、デバイスボックス２０１であってもよいし記憶デバイス１０４０であってもよい。
【実施例５】
【０１３１】
実施例５を説明する。その際、実施例１〜４との相違点を主に説明し、実施例１〜４との共通点については説明を省略又は簡略する。
【０１３２】
図２１は、実施例５に係る論理デバイスの一例を示す。
【０１３３】
１又は複数の記憶デバイス１０４０に基づき１つの論理デバイス２１０を生成することができる。論理デバイス２１０は、典型的には論理ボリュームである。
【０１３４】
本実施例でも、デバイス制御プラン６０００には、デバイスＩＤとして、物理デバイスである記憶デバイス１０４０のデバイスＩＤを記載することが望ましい。論理デバイス２１０のデバイスＩＤを記載すると、１つの物理デバイスから複数の論理デバイスが生成されている場合に、記憶デバイス１０４０の電源制御を意図して行うことが困難なためである。
【０１３５】
一方、デバイス制御プランとして、論理デバイス用のデバイス制御プランと物理デバイス用のデバイス制御プランとを生成することは可能である。論理デバイス用のデバイス制御プランを用いた方がデバイス制御部の処理負荷を削減できる可能性がある。
【０１３６】
システム管理テーブル１２０及びデバイス電力管理テーブル１２１のうちの少なくとも１つが、論理デバイス２１０毎に存在してもよい。
【０１３７】
なお、本実施例では、例えば、図７に例示のデータ格納テーブル７０００に代えて、図２２に例示のデータ格納テーブル２２５が採用される。データ格納テーブル２２５は、ＤＢ要素毎に、ＤＢ要素名とデバイスＩＤとを保持する。デバイスＩＤは、論理デバイス２１０のＩＤである。つまり、索引及びＤＢテーブルといったＤＢ要素は論理デバイス２１０に格納される。
【０１３８】
また、本実施例では、例えば、図２３に例示のデバイスＩＤ変換テーブル２２６が用意される。デバイスＩＤ変換テーブル２２６は、サーバ又はストレージシステムのメモリに格納される。デバイスＩＤ変換テーブル２２６は、論理デバイス２１０のデバイスＩＤと記憶デバイス（物理デバイス）１０４０のデバイスＩＤとの対応関係を表す。
【０１３９】
論理デバイス２１０に対してＩ／Ｏが発生した場合、デバイスＩＤ変換テーブル２２６を基に、その論理デバイス２１０の基になっている１以上の記憶デバイス１０４０（その論理デバイス２１０のデバイスＩＤに対応したデバイスＩＤ（記憶デバイス１０４０のデバイスＩＤ）が特定される。特定された１以上の記憶デバイス１０４０のうちの少なくとも１つに対してＩ／Ｏコマンドが発行される。
【実施例６】
【０１４０】
実施例６を説明する。その際、実施例１〜５との相違点を主に説明し、実施例１〜５との共通点については説明を省略又は簡略する。
【０１４１】
図２４は、実施例６に係るストレージ装置の構成例を示す。
【０１４２】
ストレージ装置１０１６及び１９２１のうちの少なくとも１つに代えて、ストレージ装置２４００が採用されてよい。
【０１４３】
ストレージ装置２４０は、デバイスボックス２４０１と、記憶デバイスリーダ（以下、リーダ）２４０３と、デバイス搬送部２４０２とを含む。
【０１４４】
デバイスボックス２４０１は、複数の記憶デバイス１０４０を有する。本実施例では、複数の記憶デバイス１０４０は、光ディスク１０４０Ｄとテープ１０４０Ｔである。
【０１４５】
リーダ２４０３に対して、記憶デバイス１０４０をセットしたり取り出したりすることができる。記憶デバイス１０４０がセットされたリーダ２４０３経由で、その記憶デバイス１０４０に対するＩ／Ｏコマンドに従うＩ／Ｏが行われる。
【０１４６】
デバイス搬送部２４０２は、デバイス制御システムから起動指示を受け、その起動指示で指定されている記憶デバイス１０４０を、デバイスボックス２４０１から取り出し、取り出した記憶デバイス１０４０をリーダ２４０３に搬送して、その記憶デバイス１０４０をリーダ２４０３にセットする。また、デバイス搬送部２４０２は、デバイス制御システムから指定指示を受け、その停止指示で指定されている記憶デバイス１０４０をリーダ２４０３から取り出し、取り出した記憶デバイス１０４０をデバイスボックス２４０１に搬送して、その記憶デバイス１０４０をデバイスボックス２４０１に戻す。
【０１４７】
リーダ２４０３の数は、記憶デバイス１０４０の数より少ない。
【０１４８】
本実施例では、非起動状態の記憶デバイス１０４０とは、いずれのリーダ２４０３にもセットされていない記憶デバイス１０４０、具体的には、デバイスボックス２４０１に存在する記憶デバイス１０４０である。
【０１４９】
また、非起動状態の記憶デバイス１０４０の起動とは、その記憶デバイス１０４０をデバイスボックス２４０１から取り出して搬送することでいずれかのリーダ２４０３にセットすることである。このため、起動時間が生じる。
【０１５０】
また、本実施例では、同時に起動可能な記憶デバイス１０４０の最大数は、リーダ２４０３の数である。制限情報は、リーダ２４０３の数と、リーダ２４０３にセットされている記憶デバイスの数とを表す情報を含んでよい。制限情報は、サーバ及びストレージシステムのうちの少なくとも１つにおけるメモリに格納されてよい。
【０１５１】
以上、幾つかの実施例を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１５２】
例えば、デバイス制御システムは、制限情報（同時に起動可能な記憶デバイスの数の制限に関する情報）を基に、同時に起動可能な記憶デバイスの数を特定してよい。デバイス制御システムは、抑止Ｉ／Ｏコマンドの発行先である待ち記憶デバイスのうち、同時に起動可能な記憶デバイスの数を超えた分の待ち記憶デバイスについてのみ、起動順序を決定してもよい。デバイス制御システムは、待ち記憶デバイスのうち、同時に起動可能な記憶デバイスの数分の待ち記憶デバイスについては、同時に起動をかけてもよい。
【０１５３】
また、例えば、本発明は、データベースのような構造化データを格納した記憶デバイスに限らず、ファイルのような非構造化データを格納した記憶デバイスにも適用可能である。例えば、複数の記憶デバイスに基づくファイルシステム空間が提供されてよい。ファイルシステム空間（複数の記憶デバイス）に複数のファイルが格納されてよい。ＤＢ要素名に代えてファイル名が採用されてよい。クライアントのようなファイルＩ／Ｏ元からのファイルＩ／Ｏ要求に基づいて１以上のＩ／Ｏコマンドが２以上の記憶デバイスに発行されてよい。
【符号の説明】
【０１５４】
１０００…サーバ
【図１】
2018085011.tif 000003
【図２】
2018085011.tif 000004
【図３】
2018085011.tif 000005
【図４】
2018085011.tif 000006
【図５】
2018085011.tif 000007
【図６】
2018085011.tif 000008
【図７】
2018085011.tif 000009
【図８】
2018085011.tif 000010
【図９】
2018085011.tif 000011
【図１０】
2018085011.tif 000012
【図１１】
2018085011.tif 000013
【図１２】
2018085011.tif 000014
【図１３】
2018085011.tif 000015
【図１４】
2018085011.tif 000016
【図１５】
2018085011.tif 000017
【図１６】
2018085011.tif 000018
【図１７】
2018085011.tif 000019
【図１８】
2018085011.tif 000020
【図１９】
2018085011.tif 000021
【図２０】
2018085011.tif 000022
【図２１】
2018085011.tif 000023
【図２２】
2018085011.tif 000024
【図２３】
2018085011.tif 000025
【図２４】
2018085011.tif 000026