(57)【要約】【課題】Ｉ／Ｏ制御システムでのＩ／Ｏ要求処理順序を最適化することでそのＩ／Ｏ制御システムのスループットを向上させる。【解決手段】Ｉ／Ｏ制御システムのキューにどんな順序でどれだけの数のＩ／Ｏ要求が並んでいて各Ｉ／Ｏ要求のＩ／Ｏ先はどの記憶領域であるかのチェックを行う。そして、そのチェックの結果を基に、複数の記憶領域のうちの、キュー内に並んでいる複数のＩ／Ｏ要求でＩ／Ｏ先とされる二以上の記憶領域の各々について、Ｉ／Ｏ先とされるＩ／Ｏ要求の数であるＩ／Ｏ数を算出し、Ｉ／Ｏ数が多い記憶領域をＩ／Ｏ先とするＩ／Ｏ要求ほど早い順番とするようキュー内での複数のＩ／Ｏ要求の順序を並び替える。【選択図】図２
2008146420.tif 000002
【特許請求の範囲】
【請求項１】
Ｉ／Ｏ要求発行元からＩ／Ｏ要求を受信して一旦キューに蓄積し該キューから出力されたＩ／Ｏ要求について所定の処理が完了した場合に該Ｉ／Ｏ要求に対する応答である要求応答を前記Ｉ／Ｏ要求発行元に返すＩ／Ｏ制御システムに適用可能な、Ｉ／Ｏ要求の処理順序の最適化をコンピュータに実行させるためのコンピュータプログラムであって、
前記キューにどんな順序でどれだけの数のＩ／Ｏ要求が並んでいて各Ｉ／Ｏ要求のＩ／Ｏ先はどの記憶領域であるかのチェックを行うキュー状況チェックステップと、
前記チェックの結果を基に、複数の記憶領域のうちの、前記キュー内に並んでいる複数のＩ／Ｏ要求でＩ／Ｏ先とされる二以上の記憶領域の各々について、Ｉ／Ｏ先とされるＩ／Ｏ要求の数であるＩ／Ｏ数を算出し、Ｉ／Ｏ数が多い記憶領域をＩ／Ｏ先とするＩ／Ｏ要求ほど早い順番とするよう前記キュー内での複数のＩ／Ｏ要求の順序を並び替える順序並び替えステップと
をコンピュータに実行させるコンピュータプログラム。
【請求項２】
前記所定の処理とは、前記キューから出力されたＩ／Ｏ要求でのＩ／Ｏ先とされる記憶領域に対応した記憶装置にＩ／Ｏコマンドを発行し、該Ｉ／Ｏコマンドに対する応答であるコマンド応答を該対応した記憶装置から受信することであり、
前記Ｉ／Ｏ制御システムが発行する各Ｉ／Ｏコマンドについて、前記Ｉ／Ｏ制御システムがＩ／Ｏコマンドを記憶装置に発行してからそれのコマンド応答を該記憶装置から受信するまでの時間長であるＩ／Ｏ性能を取得し、取得したＩ／Ｏ性能を記憶手段に蓄積するＩ／Ｏ性能蓄積ステップ、
を更にコンピュータに実行させる請求項１記載のコンピュータプログラム。
【請求項３】
前記記憶手段に記憶されている複数のＩ／Ｏ性能を基に、各記憶装置毎にＩ／Ｏ性能の統計を取得し、同種の記憶装置間でＩ／Ｏ性能の差が所定値以上に大きいか否かを判別し、大きい場合には、前記同種の記憶装置のうちのＩ／Ｏ性能の低い方の記憶装置で最適化処理を実行する記憶装置最適化ステップ、
を更にコンピュータに実行させる請求項２記載のコンピュータプログラム。
【請求項４】
前記順序並び替えステップでは、前記記憶手段に蓄積されている複数のＩ／Ｏ性能と、前記キュー内で並んでいる前記複数のＩ／Ｏ要求でＩ／Ｏ先とされる前記二以上の記憶領域とに基づき、該二以上の記憶領域の各々のＩ／Ｏ性能を求め、前記取得されたＩ／Ｏ数に加えて、前記二以上の記憶領域の各々についてのＩ／Ｏ性能を基に、前記二以上の記憶領域の各々の優先順位を決定し、優先順位の高い記憶領域をＩ／Ｏ先とするＩ／Ｏ要求ほど早い順番になるよう前記複数のＩ／Ｏ要求の順序を並び替える、
請求項２記載のコンピュータプログラム。
【請求項５】
前記順序並び替えステップでは、更に、前記チェックの結果から、前記キューに並んでいる複数のＩ／Ｏ要求のうち、Ｉ／Ｏ先となる記憶領域が互いに重複する確率が所定値以下の二以上のＩ／Ｏ要求を特定し、特定した二以上のＩ／Ｏ要求を、それら二以上のＩ／Ｏ要求で指定されている二以上の記憶領域をＩ／Ｏ先とする一つのＩ／Ｏ要求に合成する、
請求項１記載のコンピュータプログラム。
【請求項６】
Ｉ／Ｏ要求発行元からＩ／Ｏ要求を受信して一旦キューに蓄積し該キューから出力されたＩ／Ｏ要求について所定の処理が完了した場合に該Ｉ／Ｏ要求に対する応答である要求応答を前記Ｉ／Ｏ要求発行元に返すＩ／Ｏ制御システムであって、
前記キューにどんな順序でどれだけの数のＩ／Ｏ要求が並んでいて各Ｉ／Ｏ要求のＩ／Ｏ先はどの記憶領域であるかのチェックを行うキュー状況チェック部と、
前記チェックの結果を基に、複数の記憶領域のうちの、前記キュー内に並んでいる複数のＩ／Ｏ要求でＩ／Ｏ先とされる二以上の記憶領域の各々について、Ｉ／Ｏ先とされるＩ／Ｏ要求の数であるＩ／Ｏ数を算出し、Ｉ／Ｏ数が多い記憶領域をＩ／Ｏ先とするＩ／Ｏ要求ほど早い順番とするよう前記キュー内での複数のＩ／Ｏ要求の順序を並び替える順序並び替え部と
を備えるＩ／Ｏ制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｉ／Ｏ要求（入出力要求）の処理順序の最適化に関する。
【背景技術】
【０００２】
例えば、特許文献１には、アプリケーションからのアクセス要求を一元監視し、アプリケーションを追加した場合の予想負荷データを出力することが開示されている。また、特許文献２には、アクセスが局所的に集中する際に、高速書込みできるバッファに一時蓄積して、シーク／サーチ時間を考慮したスケジューリングを行うことが開示されている。また、特許文献３には、［登録時刻＊スケジュールパラメータ］なる評価式を使用してＩ／Ｏ要求の発行順序を決めることが開示されている。さらに、特許文献４には、トランザクション実効効率を最適化すべくＤＢＭＳのアクセスプランを生成することが開示されている。
【０００３】
【特許文献１】特開２００５−１４９２８３号公報
【特許文献２】特開平１０−１１１７６２号公報
【特許文献３】特開平１０−２８９１８９号公報
【特許文献４】特開２００２−３２２４９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、Ｉ／Ｏ要求発行元からＩ／Ｏ要求を受信して一旦キューに蓄積し該キューから出力されたＩ／Ｏ要求について所定の処理が完了した場合に所定の応答をＩ／Ｏ要求発行元に返すＩ／Ｏ制御システムとして、例えば、データベースを管理するソフトウェアであるＤＢＭＳ（DataBase Management System）が知られている。ＤＢＭＳは、アプリケーションからのＩ／Ｏ要求に基づいて、データベースに関する操作（以下、「データベース操作」）を行う。データベース操作とは、例えば、データの書込み（更新）、データの読み出し（参照）、データの削除等である。ＤＢＭＳは、そのＩ／Ｏ要求について所定の処理が完了した場合に、所定の応答を、そのＩ／Ｏ要求の発行元であるアプリケーションに返す。所定の処理としては、例えば、後述する排他制御権の取得、データベース操作の一つとして記憶装置に対してＩ／Ｏコマンドを発行する処理がある。
【０００５】
ＤＢＭＳは、一般に、オペレーティングシステム（ＯＳ）上で稼動し、ＯＳから認識される複数のプロセスからなるプロセス群として構成される。以下、ＤＢＭＳにおける個々のプロセスを「ＤＢＭＳプロセス」と言う。複数のＤＢＭＳプロセスは、それぞれ、複数のアプリケーションプロセス（アプリケーションプログラムにおけるプロセス）と通信し、そのアプリケーションプロセスからのＩ／Ｏ要求を処理することになる。このため、複数のＤＢＭＳプロセスが、同一の記憶領域に対して同時にアクセスすることが起こりうる。
【０００６】
これを防ぐために、ミューテックスなどを応用した排他制御が用いられている。この場合、ある記憶領域に対する排他制御権（言い換えればＩ／Ｏ実行権）を取得できたＤＢＭＳプロセスのみが、該記憶領域に対してＩ／Ｏを実行することができる一方で、同じ記憶領域にＩ／Ｏを実行したい他のＤＢＭＳプロセスは、記憶領域に対応した排他制御権を取得できるまで、その記憶領域に対するＩ／Ｏの実行が待たされることになる。
【０００７】
一つのＩ／Ｏ要求で複数の記憶領域に対してそれぞれＩ／Ｏが発生する場合があるが、その場合は、それら複数の記憶領域の全てについて排他制御権を取得できたときに、それら複数の記憶領域の各々にＩ／Ｏを行うことが可能になる。このようなＩ／Ｏ要求についての処理の完了、言い換えれば、Ｉ／Ｏ要求を発行してから所定の応答をＤＢＭＳから受信するまでのアプリケーションにとっての待ち時間は、それら複数の記憶領域のうちの最も遅くに終わる処理に依存する。
【０００８】
通常、複数のアプリケーションプロセスからそれぞれ発行されたＩ／Ｏ要求は、ＤＢＭＳで管理されているキュー（典型的にはＦＩＦＯ（First In First Out）形式のバッファ）に一旦蓄積され、そのキューから出力された順序で処理されるが、このような環境下で、Ｉ／Ｏ要求を受け付けた順番通りに処理していくと、ＤＢＭＳのスループットの劣化につながるおそれがある。
【０００９】
以上のような問題点は、ＤＢＭＳに限らず、他種の前述したＩ／Ｏ制御システムにも同様に存在し得る。
【００１０】
従って、本発明の目的は、Ｉ／Ｏ制御システムでのＩ／Ｏ要求処理順序を最適化することでそのＩ／Ｏ制御システムのスループットを向上させることである。
【課題を解決するための手段】
【００１１】
Ｉ／Ｏ制御システムのキューにどんな順序でどれだけの数のＩ／Ｏ要求が並んでいて各Ｉ／Ｏ要求のＩ／Ｏ先はどの記憶領域であるかのチェックを行う。そして、そのチェックの結果を基に、複数の記憶領域のうちの、キュー内に並んでいる複数のＩ／Ｏ要求でＩ／Ｏ先とされる二以上の記憶領域の各々について、Ｉ／Ｏ先とされるＩ／Ｏ要求の数であるＩ／Ｏ数を算出し、Ｉ／Ｏ数が多い記憶領域をＩ／Ｏ先とするＩ／Ｏ要求ほど早い順番とするようキュー内での複数のＩ／Ｏ要求の順序を並び替える。
【００１２】
キューで蓄積されたまま残っている複数のＩ／Ｏ要求でＩ／Ｏ先とされる二以上の記憶領域のそれぞれについてＩ／Ｏ数を算出し、該算出されたＩ／Ｏ数に着目した並び替え、具体的には、Ｉ／Ｏ数が多い記憶領域をＩ／Ｏ先とするＩ／Ｏ要求ほど優先的に先に処理するような並び替えを行うことにより、Ｉ／Ｏ制御システムのスループットの向上が期待できる。
【００１３】
この技術は、Ｉ／Ｏ制御システムに適用することができる。ここで言う「Ｉ／Ｏ制御システム」は、ＤＢＭＳに代表されるコンピュータプログラムであっても良いし、該コンピュータプログラムを読み込んで実行することによりＩ／Ｏ制御機能（例えばＤＢＭＳとしての機能）を発揮するコンピュータマシン（例えばサーバマシン）であっても良い。
【００１４】
また、“Ｉ／Ｏ”とは、入出力の略である。故に、Ｉ／Ｏ要求は、入力要求であっても良いし、書込み要求であっても良い。また、Ｉ／Ｏ要求は、直接的に入力或いは出力を要求するものに限らず、入力或いは出力が行われることになる要求であってもよい。例えば、Ｉ／Ｏ制御システムがＤＢＭＳであって、該ＤＢＭＳが、prepare（ＳＱＬ文）を受信しそれに応答して所定の準備ができた後にcommitを受信するタイプのＤＢＭＳである場合には、prepare及びcommitのうちの少なくとも一方が上述したＩ／Ｏ要求となる。
【００１５】
また、上記チェックは、定期的に或いは不定期的に行うことができる。Ｉ／Ｏ要求の順序の並び替えは、典型的には、チェックが行われる都度に行われることになるが、それに限らず、複数回のチェックが行われてから一回の並び替えが行われる方式であっても良い。
【発明を実施するための最良の形態】
【００１６】
＜第一の実施形態＞
【００１７】
以下、本発明の第一の実施形態に係るＩ／Ｏ要求の処理順序の最適化方式について、図面を参照して説明する。なお、以下の説明では、Ｉ／Ｏ制御システムは、ＤＢＭＳ（特に、リレーショナルデータベース管理システム（ＲＤＢＭＳ））であるとする。また、以下、説明を分かり易くするため、一つのＩ／Ｏ要求は、一つのトランザクションであるとし、一つのアプリケーションプロセスから送信され、オペレーティングシステム（ＯＳ）からＣＰＵ時間が割り当てられた一つのＤＢＭＳプロセスによってキューから読み出されて処理されるものとする。
【００１８】
図１は、本実施形態に係るシステム全体の構成を示す図である。
【００１９】
サーバ１０４と、クライアント１０１（ここでは、クライアント（１）１０１ａ、クライアント（２）１０１ｂ、クライアント（３）１０１ｃ）とが、それぞれネットワーク１０３に接続されている。
【００２０】
サーバ１０４は、ＤＢＭＳ１０７を備えたデータベースサーバとして機能する。各クライアント１０１のアプリケーション１０２（ここでは、アプリケーション（１）１０２ａ、アプリケーション（２）１０２ｂ、アプリケーション（３）１０２ｃ）における一のプロセス（アプリケーションプロセス）は、ＤＢＭＳ１０７に対して、データベース操作の内容を例えばＳＱＬで記述した要求（以下、「Ｉ／Ｏ要求」）を送信する。Ｉ／Ｏ要求を受信したＤＢＭＳ１０７は、その受信したＩ／Ｏ要求を待ち受けキュー１０５（ここではＦＩＦＯ（First-In First-Out）型のバッファ）に一時蓄積する。ＤＢＭＳ１０７のプロセス群１０７１のうちの、ＯＳからＣＰＵ時間が割り当てられた一のプロセス（ＤＢＭＳプロセス）が、待ち受けキュー１０５の先頭にあるＩ／Ｏ要求を読み出して解釈して、そのＩ／Ｏ要求に対応したデータベース操作を行う。そのデータベース操作により、ストレージ１０８に対してＩ／Ｏコマンドが発行される。なお、ここで、ストレージ１０８は、例えば、一以上のディスク型記憶装置（以下、単に「ディスク」と言う）１０８１を備えた装置とすることができる。ストレージ１０８では、複数のディスク１０８１でＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）が構成されていても良いし、一以上のディスク１０８１の記憶空間を利用して論理ユニット（論理的な記憶装置）が用意されていても良い。ディスク１０８１や論理ユニットに代えて他種の二次記憶装置が採用されても良い（一次記憶装置はサーバ１０４内の図示しないメモリ）。つまり、二次記憶装置は、物理的な記憶装置であっても良いし論理的な記憶装置であっても良い。
【００２１】
ＤＢＭＳ１０７では、複数の論理的な記憶領域、並びに、それら複数の論理的な記憶領域の各々とストレージ１０８における物理的な記憶領域との対応付けを表す情報が管理されている。ここでは、論理的な記憶領域を、ブロック１０７４とし、複数のブロック１０７４と複数の物理的な記憶領域との対応付けを表した情報を、ブロック索引１０７３とする。Ｉ／Ｏ要求には、例えば、Ｉ／Ｏ先を表す情報（以下、Ｉ／Ｏ先情報）として、物理的な記憶領域を表す情報（以下、物理領域情報、例えばアドレス）が記録されていて、ＤＢＭＳ１０７では、その物理領域情報を用いてブロック索引１０７３を参照することで、その物理領域情報が表す物理的な記憶領域に対応したブロック１０７４（つまり、Ｉ／Ｏ先となるブロック１０７４）を特定することができる。一つのブロック１０７４に対応付けられる一つの物理的な記憶領域は、ブロック索引１０７３においてどのように定義されても良い。具体的には、ストレージ１０８は、いくつかの物理的な記憶領域に分離され、その分離された記憶領域ごとにデータベース操作が行われる。この分離された記憶領域は、排他制御の単位となるものであり、以下、この領域を排他制御単位と呼ぶ。排他制御単位は、様々な態様をとることができ、例えば、ディスク１０８１、ファイル１０８２、レコード１０８３、及び論理ユニットのうちの少なくとも一つとしても良い（その際、例えば、複数のディスク１０８１をまたぐ形で定義されても良いし、ディスク１０８１の一部として定義されても良い）。このような排他制御単位に一つのブロック１０７４が対応付けられているため、ブロック１０７４も、排他制御単位となる。
【００２２】
この実施形態では、例えば以下の流れで、一つのＩ／Ｏ要求（以下、この説明において、「対象Ｉ／Ｏ要求」と言う）が完結する。
（ステップ１）アプリケーションプロセスがprepare文（ＳＱＬ）を発行する。
（ステップ２）ＤＢＭＳ１０７がアプリケーションプロセスからの該ＳＱＬを解釈して、対象Ｉ／Ｏ要求に変換した後、待ち受けキュー１０５に一旦蓄積する。
（ステップ３）アプリケーションプロセスがcommit文（ＳＱＬ）を発行する。
（ステップ４）待ち受けキュー１０５に蓄積された対象Ｉ／Ｏ要求のcommitフラグを有効にする。
（ステップ５）待ち受けキュー１０５の前方にあるＩ／Ｏ要求のなかで、commitフラグが有効になっているものがＤＢＭＳプロセスによって取り出される都度、それより後方に蓄積されている対象Ｉ／Ｏ要求の順番が一つ繰り上がる。このような処理が繰り返されることで、commitフラグが有効になっている対象Ｉ／Ｏ要求が取り出される可能性が高まり、やがて、ＤＢＭＳプロセスによって、対象Ｉ／Ｏ要求が待ち受けキュー１０５から取り出される。ＤＢＭＳプロセスが、対象Ｉ／Ｏ要求に含まれている情報とブロック索引１０７３とを用いて、Ｉ／Ｏ先のブロック１０７４（以下、対象ブロック１０７４）を特定し、対象ブロック１０７４に対応するミューテックス１０７２の取得を試みる。取得できなければ、待ちとなる。また、対象ブロック１０７４が複数個ある場合には、それら複数の対象ブロック１０７４にそれぞれ対応した複数のミューテックス１０７２を全て取得できるまで、待ちとなる。
（ステップ６）ミューテックス１０７２を取得できたならば、ＤＢＭＳプロセスが、ストレージ１０８内の、対象ブロック１０７４に対応した物理的な記憶領域を有する二次記憶装置に対し、該物理的な記憶領域を指定したＩ／Ｏコマンドを送信する。該Ｉ／Ｏコマンドに対して所定のコマンド応答（例えばＩ／Ｏ成功）を受信した場合、ＤＢＭＳプロセスは、ミューテックス１０７２を解放し、対象Ｉ／Ｏ要求に対する所定の要求応答（例えば成功）を、アプリケーションプロセスに通知する。
（ステップ７）アプリケーションプロセスが、成功を受信する。
【００２３】
以上の流れにおいて、（ステップ１）〜（ステップ７）までが、アプリケーションプログラム１０２にとっての待ち時間である。なお、前述したコマンド応答とは、ＤＢＭＳが、Ｉ／Ｏコマンドの送信先の二次記憶装置から受信する、該Ｉ／Ｏコマンドに対する応答である。一方、前述した要求応答とは、ＤＢＭＳが、Ｉ／Ｏ要求の送信元のアプリケーションに送信する、該Ｉ／Ｏ要求に対する応答である。
【００２４】
本実施形態では、待ち受けキュー１０５に蓄積されている複数のＩ／Ｏ要求についての全体的な待ち時間を短縮することを図るべく、最適化部１０６が備えられる。最適化部１０６は、待ち受けキュー１０５（典型的には、ＦＩＦＯ（First-In First-Out）型のバッファ）で並んでいる複数のＩ／Ｏ要求と、それら複数のＩ／Ｏ要求から特定される複数のブロックとを基にしたマトリクスを作成し、該マトリクス上での並び替えを実行することで、上記の全体的な待ち時間を短縮することができる。最適化部１０６は、ＤＢＭＳ１０７同様、サーバ１０４のＣＰＵ（図示せず）で実行されるコンピュータプログラムである。最適化部１０６は、ＤＢＭＳ１０７に組み込まれていても良いし、ＤＢＭＳ１０７と通信可能にＤＢＭＳ１０７の外に存在していても良い。
【００２５】
図２は、最適化部１０６の機能の説明図である。
【００２６】
最適化部１０６は、キュー監視蓄積部１０６１と、Ｉ／Ｏ性能蓄積部１０６２と、Ｉ／Ｏ行列置換部１０６３とを備える。
【００２７】
キュー監視蓄積部１０６１は、待ち受けキュー１０５の状況を定期的にチェックし、該状況を表す情報（以下、「キュー状況情報」）２６１１を、所定の記憶域２６１（例えばサーバ１０４における図示しないメモリ上の領域）に蓄積する。キュー状況情報２６１１としては、例えば、待ち受けキュー１０５に蓄えられているＩ／Ｏ要求の数、順序、各Ｉ／Ｏ要求の到着時刻、commitフラグ、要求内容等がある。要求内容には、書込み又は読込みといったデータベース操作の種別や、Ｉ／Ｏ先のブロック１０７４等の情報が含まれる。
【００２８】
Ｉ／Ｏ性能蓄積部１０６２は、二次記憶装置ごとに、その二次記憶装置に対応するＩ／Ｏ性能を取得する。ここで言うＩ／Ｏ性能とは、例えば、ＤＢＭＳプロセスによって二次記憶装置にＩ／Ｏコマンドが発行されてから所定の応答がその二次記憶装置から戻ってくるまでの時間長である。Ｉ／Ｏ性能蓄積部１０６２は、取得したＩ／Ｏ性能を表す数値（Ｉ／Ｏ性能値）を用いて、該Ｉ／Ｏ性能の二次記憶装置に対応したＩ／Ｏ性能情報２６１２を更新する。Ｉ／Ｏ性能情報２６１２は、例えば、所定の記憶域２６１に二次記憶装置毎に用意される。Ｉ／Ｏ性能情報２６１２には、各時点で取得されたＩ／Ｏ性能値と、第一の時点から第二の時点までの複数のＩ／Ｏ性能値の統計（Ｉ／Ｏ性能統計）とが含まれる。Ｉ／Ｏ性能統計は、例えば、Ｉ／Ｏ性能蓄積部１０６２によって求められる。Ｉ／Ｏ性能統計は、典型的には、標準正規分布に従うとみなすことができる。このＩ／Ｏ性能統計は、例えば、この第一実施形態に係るシステムで業務を開始する前のテスト稼動において、各ブロックサイズが適切かどうかを管理者が判断するのに有用である。例えば、管理者は、同種の二次記憶装置（例えば、データ転送速度やＩ／Ｏ速度が同程度である二次記憶装置）のＩ／Ｏ性能統計を参照することにより、同種の二次記憶装置であるにも関わらずＩ／Ｏ性能（例えば、平均、標準偏差）に想定誤差以上の差があるか否かを判断し、そのような差がある場合には、Ｉ／Ｏ性能の低い方の二次記憶装置に対応付けるブロックサイズを、Ｉ／Ｏ性能の高い方の二次記憶装置に対応付けるブロックサイズに比して、小さくする（言い換えれば、一つのブロックに割り当てる物理的な記憶領域のサイズを小さくする）といったチューニングを施すことができる。上記の判断及びチューニングは、コンピュータプログラム（例えば最適化部１０６に含まれるプログラム）によって自動的に行われても良い。
【００２９】
Ｉ／Ｏ行列置換部１０６３は、キュー監視蓄積部１０６１が蓄積したキュー状況情報に基づいて、待ち受けキュー１０５で並んでいるＩ／Ｏ要求の順序を、例えば図示のように並び替える。
【００３０】
以下、図３及び図４を参照して、この並び替え処理の詳細を説明する。なお、各図において、“Ｒ”は、Ｒｅｑｕｅｓｔ（要求）の頭文字を意味し、“Ｂ”は、Ｂｌｏｃｋ（ブロック）の頭文字を意味する。また、以下では簡単のために、待ち受けキュー１０５には、ある時点のスナップショットとして７つのＩ／Ｏ要求Ｒ１〜Ｒ７が蓄えられていて、Ｉ／Ｏ要求Ｒ１〜Ｒ７は、全て、commitフラグが有効になっており、各々のＩ／Ｏ要求は、ブロックＢ１〜Ｂ７の範囲にＩ／Ｏを発生せしめるという前提で説明する。
【００３１】
Ｉ／Ｏ行列置換部１０６３が、例えば、キュー状況情報を解釈し、該解釈の結果を基に、図３（ａ）で示されるようなマトリクスを作成する。このマトリクスは、行方向に、待ち受けキュー１０５に蓄えられているＩ／Ｏ要求Ｒ１〜Ｒ７を配列し（つまり、キュー状況情報から特定される順序に従ってＩ／Ｏ要求Ｒ１〜Ｒ７を配列し）、列方向に、ブロックＢ１〜Ｂ７を、それぞれ配列したものである。各行において、その行に対応したＩ／Ｏ要求でＩ／Ｏ先となっているブロックに対応した位置には、所定の値（図では丸印で表している）がセットされる。従って、このマトリクスからは、例えば、Ｉ／Ｏ要求Ｒ１では、ブロックＢ１及びＢ５がＩ／Ｏ先とされていることがわかる。
【００３２】
このようなマトリクスを作成した後、列の置換処理と、行の置換処理とが行われる。
【００３３】
列の置換処理は、以下の通りである。すなわち、Ｉ／Ｏ行列置換部１０６３が、各ブロック毎のＩ／Ｏ数（丸印の数）を計算する。そして、Ｉ／Ｏ行列置換部１０６３は、図３（ｂ）に示すように、Ｉ／Ｏ数の多いブロック（列）ほど左に寄せる。この結果、左から順に、Ｂ１、Ｂ６、Ｂ２、Ｂ５、Ｂ４、Ｂ７、Ｂ３となるように並び替えられる。
【００３４】
行の置換処理では、Ｉ／Ｏ数の多いブロックに着目して、着目したブロックをＩ／Ｏ先とするＩ／Ｏ要求（行）の順番がなるべく先になるように並び替えられる。その際、その着目しているブロックよりもＩ／Ｏ数の多いブロックに着目した並び（上詰め）を崩さないようにし、崩れるようであれば、行の置換処理を終える。
【００３５】
具体的には、例えば、まず、図４（ａ）に示すように、最もＩ／Ｏ数の多いブロックＢ１に着目して、ブロックＢ１がＩ／Ｏ先になっているＩ／Ｏ要求が上位にくるように（出力される順番が先になるように）並び替える。ここでは、Ｉ／Ｏ要求Ｒ２のみがブロックＢ１へのＩ／Ｏを行わないため、Ｉ／Ｏ要求Ｒ２に対応した行は最下位へ移動させられる。
【００３６】
次に、図４（ｂ）に示すように、２番目にＩ／Ｏ数の多いブロックＢ６に着目して、Ｂ１の上詰め状態を崩さないようにして、ブロックＢ６がＩ／Ｏ先になっているＩ／Ｏ要求（行）が上位にくるように並び替える。
【００３７】
次に、図４（ｃ）に示すように、３番目にＩ／Ｏ数の多いブロックＢ２に着目して、Ｂ１及びＢ６の上詰め状態を崩さないようにして、ブロックＢ２がＩ／Ｏ先になっているＩ／Ｏ要求（行）が上位にくるように並び替える。
【００３８】
次に、４番目にＩ／Ｏ数の多いブロックＢ５に着目して、Ｂ１、Ｂ６及びＢ２の上詰め状態を崩さないようにして、ブロックＢ５がＩ／Ｏ先になっているＩ／Ｏ要求（行）が上位にくるように並び替えることを試みる。しかし、ここでは、ブロックＢ２に着目した上詰め後のマトリクスである図４（ｄ）のマトリクスからわかるように、ブロックＢ５をＩ／Ｏ先とするＩ／Ｏ要求Ｒ４、Ｒ１及びＲ７のいずれをより上位にしようとすると、Ｂ１、Ｂ６及びＢ２のいずれかの上詰め状態が崩れてしまうことになる。
【００３９】
従って、この段階で、行の置換処理を終了する。
【００４０】
以上の一連の処理によって、Ｉ／Ｏ要求の処理順序の最適化が完了する。以下、この最適化により期待できる効果を検証する。その際、一つのブロックについてのＩ／Ｏ（具体的には、該ブロックに対応した物理的な記憶領域を有する二次記憶装置に対するＩ／Ｏ）に関する処理で遅れる確率（Ｐ）を一律に0.05とする。遅れる確率（Ｐ）とは、例えば、その二次記憶装置のＩ／Ｏ性能の標準正規分布（Ｉ／Ｏ性能情報中の標準正規分布）において、標準偏差（σ）が±２σの範囲から外れる確率である。
【００４１】
（１）並び替え前［図３（ａ）参照］
・ブロックＢ１：Ｉ／Ｏ要求Ｒ３〜Ｒ７と５つ連続でＩ／Ｏが発生しているので、
遅れる確率：ＰB1＝1−（1−0.05）5＝ 0.2262190625
・ブロックＢ５：最終のＩ／Ｏ要求Ｒ７でＩ／Ｏが発生するが、前のＩ／Ｏ要求Ｒ６ではブロックＢ５についてＩ／Ｏが発生しないので、
遅れる確率：ＰB5＝0.05
・ブロックＢ７：最終のＩ／Ｏ要求Ｒ７でＩ／Ｏが発生するが、前のＩ／Ｏ要求Ｒ６ではブロックＢ7についてＩ／Ｏが発生しないので、
遅れる確率：ＰB7＝0.05
他のブロックに関しては、最終Ｉ／Ｏ要求（Ｒ７）が送出されるタイミングでは新たなＩ／Ｏが発生しない。それ以前の遅れは、Ｒ７のタイムスロットで吸収される。
【００４２】
それぞれの遅れは独立に発生すると考えてよい。そのため、Ｂ１、Ｂ５及びＢ７のうち、２つ以上で遅れが同時に発生する確率は、それぞれの確率の積となるため、それらは無視できるほど小さな値になる。故に、最終のＩ／Ｏ要求Ｒ７のタイミングで遅れが生じる確率Ｐは、
Ｐ≒ＰB1＋ＰB5＋ＰB7＝0.226 + 0.05 + 0.05 ＝ 0.326
となる。
【００４３】
（２）並べ替え後［図４（ｄ）参照］
・ブロックＢ６：最終のＩ／Ｏ要求Ｒ２でＩ／Ｏが発生するが、前のＩ／Ｏ要求Ｒ７ではブロックＢ６についてＩ／Ｏが発生しないので、
ＰB6＝0.05
・ブロックＢ２：最終のＩ／Ｏ要求Ｒ２でＩ／Ｏが発生するが、前のＩ／Ｏ要求Ｒ７ではブロックＢ２についてＩ／Ｏが発生しないので、
ＰB2＝0.05
それぞれの遅れは独立に発生すると考えてよい。そのため、Ｂ６及びＢ２の両方で同時に遅れが発生する確率は、それぞれの確率の積となるが、それらは無視できるほど小さな値になる。故に、最終のＩ／Ｏ要求Ｒ２で遅れが生じる確率Ｐは、
Ｐ≒ＰB6＋ＰB2＝0.05 + 0.05＝0.1
となる。
【００４４】
以上、第一の実施形態によれば、待ち受けキュー１０５で蓄積されたまま残っている複数のＩ／Ｏ要求でＩ／Ｏ先とされる二以上のブロックのそれぞれについてＩ／Ｏ数を算出し、Ｉ／Ｏ数が多いブロックをＩ／Ｏ先とするＩ／Ｏ要求ほど優先的に先に処理するような並び替えが行われる。これにより、ＤＢＭＳ１０７のスループットの向上が期待できる。
【００４５】
＜第二の実施形態＞
【００４６】
以下、第二の実施形態について説明する。その際、第一の実施形態との相違点について主に説明し、第一の実施形態との共通点については説明を省略或いは簡略する。
【００４７】
Ｉ／Ｏ行列置換部１０６３が、行の合成処理を実行する。以下、それについて、図５（ａ）を例に採り説明する。Ｉ／Ｏ行列置換部１０６３は、行の置換処理後のマトリクス（図４（ｄ）参照）を基に、行ベクトルの内積が 0 になる２つ以上の行があるか否か（Ｉ／Ｏ先となるブロックが重なり合わないＩ／Ｏ要求）があるか否かを判断する。そのような２つ以上の行があれば、Ｉ／Ｏ行列置換部１０６３は、２つ以上の行を合成、すなわち、２つ以上のＩ／Ｏ要求（例えばＲ２及びＲ７）を一つのＩ／Ｏ要求にまとめる。これにより、ＤＢＭＳ１０７のスループットの更なる向上が期待できる。
【００４８】
なお、このように２つのＩ／Ｏ要求を一つにまとめた場合、それら２つのＩ／Ｏ要求がそれぞれ２つのアプリケーション１０２から発行されたＩ／Ｏ要求であれば、一つにまとめられたＩ／Ｏ要求の処理が済んだ場合に、ＤＢＭＳ１０７によって、それら２つのアプリケーション１０２に、完了が通知される。
【００４９】
また、例えばブロックの数が膨大であって、一つのマトリクスで行の置換処理などを行うことが困難な場合、Ｉ／Ｏ行列置換部１０６３は、マトリクスを多段で用意し、多段のマトリクスのうちの少なくとも一つで、列の置換処理、行の置換処理、行の合成処理を行っても良い。例えば、図５（ｂ）に例示するように、第一段のマトリクスにおいてＮ個（Ｎは２以上の整数）のブロックにそれぞれ対応するＮ個の位置を、第二段（第一段の一つ上の段）のマトリクスにおいて一つの位置に対応付けても良い。その場合、第二段のマトリクスにおいて、行列が交差する各位置には、その位置に対応するＮ個のブロックが全てＩ／Ｏ先である場合を１としたときの数値が設定される。図５（ｂ）の例では、第二段のマトリクスの或る位置には、８個のブロックのうちの４個のブロックがＩ／Ｏ先となっているので、０．５という値が設定される。この第二段のマトリクスで、列の置換処理、行の置換処理、行の合成処理を行っても良い。行の合成処理の際は、例えば、Ｉ／Ｏ行列置換部１０６３は、行ベクトルの内積が所定値以下になる２つ以上の行があるか否かを判断し（例えば、行の合成処理を行ってもＩ／Ｏ先が重なり合う可能性が０に極めて近い２つ以上の行があるかを判断し）、そのような２つ以上の行があれば、行の合成を行っても良い。
【００５０】
＜第三の実施形態＞
【００５１】
この第三の実施形態では、Ｉ／Ｏ性能統計がより有効に活用される。具体例としては、以下の第一〜第三の例とがある。
【００５２】
第一の例は、Ｉ／Ｏ性能の向上化である。例えば、Ｉ／Ｏ性能蓄積部１０６２が、定期的に又は不定期的に、図６（ａ）に例示する処理を実行する。具体的には、例えば、Ｉ／Ｏ性能蓄積部１０６２が、同種の二次記憶装置のＩ／Ｏ性能統計を参照することにより、同種の二次記憶装置間でＩ／Ｏ性能（例えば、平均、標準偏差）に想定誤差以上の差があるか否かを判断する（ステップＳ１０１）。そのような差がある場合には、Ｉ／Ｏ性能蓄積部１０６２は、同種の二次記憶装置のうちのＩ／Ｏ性能の低い方の二次記憶装置に対して最適化処理を実行させる（Ｓ１０２）。
【００５３】
ここで、複数の二次記憶装置のうちのどれが同種の二次記憶装置であるかは、例えば、二次記憶装置に関する属性情報が書かれた管理テーブルを参照する等の方法により、特定することができる。
【００５４】
また、二次記憶装置に対して実行させる最適化処理とは、例えば、デフラグメンテーション処理、すなわち、二次記憶装置内のデータの断片化を解消する処理である。Ｉ／Ｏ性能蓄積部１０６２は、例えば、ＯＳ２１１でサポートされているユーティリティ機能を呼び出すことで、所望の二次記憶装置に対する最適化処理を実行させることができる。
【００５５】
第二の例は、待ち受けキュー１０５からのＩ／Ｏ要求の出力タイミングの決定である。すなわち、この第三の実施形態では、ＯＳ２１１によって決定されたタイミングではなく、最適化部１０６のキュー制御部（図示せず）によって決定されたタイミングで待ち受けキュー１０５からＩ／Ｏ要求が出力される。具体例を図６（ｂ）に示す。
【００５６】
すなわち、キュー制御部は、Ｉ／Ｏ要求を読み出した場合に、該Ｉ／Ｏ要求の処理の際に発行されるＩ／Ｏコマンドの発行先二次記憶装置に対応したＩ／Ｏ性能統計を基に、該二次記憶装置についてのＩ／Ｏ性能を予測する（Ｓ２０１）。ここで予測されるＩ／Ｏ性能は、例えば、標準正規分布での平均であっても良いし、標準正規分布における所定の範囲内での或るＩ／Ｏ性能であっても良い。
【００５７】
キュー制御部は、予測されたＩ／Ｏ性能に基づいて、次のＩ／Ｏ要求を読み出すタイミング（例えば今回の読出しから何秒後に読み出すか）を決定する（Ｓ２０２）。そして、キュー制御部は、そのタイミングで次のＩ／Ｏ要求を読出し（Ｓ２０３）、その読み出したＩ／Ｏ要求について、再びＳ２０１を実行する。
【００５８】
第三の例は、Ｉ／Ｏ行列置換部１０６３による行の置換処理において、どのようなブロックを優先してＩ／Ｏ要求を並び替えるかの決定である。すなわち、上述した第一の実施形態では、Ｉ／Ｏ数が多い順が、ブロックの優先順位の高い順であるが、この第三の例では、必ずしも、Ｉ／Ｏ数が多い順が、ブロックの優先順位の高い順とはならない。例えば、ブロックＢ１のＩ／Ｏ数が最も多いが、ブロックＢ２に対応した二次記憶装置のＩ／Ｏ性能がブロックＢ１に対応した二次記憶装置のＩ／Ｏ性能よりもかなり低い場合には、ブロックＢ２を最優先とした行の置換処理が行われても良い。
【００５９】
上述した本発明の幾つかの実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱することなく、その他の様々な態様でも実施することができる。
【図面の簡単な説明】
【００６０】
【図１】本発明の一実施形態に係るシステム全体の構成を示す。
【図２】最適化部の機能の説明図。
【図３】並び替え処理における列の置換処理の説明図。
【図４】並び買え処理における行の置換処理の説明図。
【図５】（ａ）は、並び替え処理における行の合成処理の説明図。（ｂ）は、マトリクスが多段になった場合の一例の説明図。
【図６】（ａ）は、Ｉ／Ｏ性能統計の利用方法の第一の例を示す図。（ｂ）は、Ｉ／Ｏ性能統計の利用方法の第二の例を示す図。
【符号の説明】
【００６１】
１０１…クライアント  １０２…アプリケーションプログラム  １０５…待ち受けキュー  １０６…最適化部  １０７…ＤＢＭＳ  １０６１…キュー監視蓄積部  １０６２…Ｉ／Ｏ性能蓄積部  １０６３…Ｉ／Ｏ行列置換部
【図１】
2008146420.tif 000003
【図２】
2008146420.tif 000004
【図３】
2008146420.tif 000005
【図４】
2008146420.tif 000006
【図５】
2008146420.tif 000007
【図６】
2008146420.tif 000008