しかし、上記各従来技術では、同一のI/Oリソースに対して、どのタスクの緊急度が高いかについては考慮されていない。このため、I/O要求の遅延時間が長いタスクや、I/O要求に失敗し続けているタスクがI/Oリソースを使用することができない事態が発生する。これにより、スルーレートの低下や遅延時間の増加が発生し、I/O要求発行元の上位のシステムやプロセスにおいて、バッファオーバフローやアンダーフローの発生を防止するためには、多量のバッファを備える必要があるという問題がある。
本発明は、上記従来技術の問題点を解消し、スルーレートを確保しつつ、各外部装置のI/O要求の遅延時間の最大値を最小化して、上位のシステムやアプリケーションにおけるバッファのオーバーフロー・アンダーフローを防止することにより、多量のバッファを備える必要がないI/O処理装置を提供することを目的とする。
上記目的を達成するために、本発明の第1の視点のI/O処理装置は、外部装置から受信したI/O要求をI/O要求キューに登録し、該I/O要求キューに登録されたI/O要求に基づいて外部装置と入出力装置との間で行われるデータの入出力を制御するI/O処理装置において、前記外部装置が発行するI/O要求を受け付けるI/O要求受付部と、前記I/O要求を受け付けてからI/O要求キューへ登録するまでの遅延時間を記憶する外部装置情報保持部を参照し、前記I/O要求受付部が受け付けたI/O要求のうちで、遅延時間が最大のI/O要求を、前記I/O要求キューに登録する優先外部装置判断部を備えることを特徴とする。
本発明の第1の視点のI/O要求処理方法は、外部装置から受信したI/O要求をI/O要求キューに登録し、該I/O要求キューに登録されたI/O要求に基づいて外部装置と入出力装置との間で行われるデータの入出力を制御するI/O処理装置でI/O要求を処理する方法において、前記I/O処理装置が、前記外部装置が発行するI/O要求を受け付けるステップと、前記I/O処理装置が、前記I/O要求を受け付けてからI/O要求キューへ登録するまでの遅延時間を記憶する外部装置情報保持部を参照し、前記受け付けたI/O要求のうちで、遅延時間が最大のI/O要求を、前記I/O要求キューに登録するステップとを有することを特徴とする。
本発明の第1の視点のI/O処理装置及び方法では、受信したI/O要求のうちで、遅延時間がもっとも長い、つまり、I/O要求受信時刻から現時刻までの時間が最も長い外部装置が発行したI/O要求を、優先的にI/O要求キューに登録する。このようにすることで、各外部装置のI/O要求の遅延時間の最大値を最小化して、上位のシステムやアプリケーションにおけるバッファのオーバーフロー・アンダーフローを防止することができる。
本発明の第2の視点のI/O処理装置は、外部装置から受信したI/O要求をI/O要求キューに登録し、該I/O要求キューに登録されたI/O要求に基づいて外部装置と入出力装置との間で行われるデータの入出力を制御するI/O処理装置において、前記外部装置が発行するI/O要求を受け付けるI/O要求受付部と、前記I/O要求受付部がI/O要求を受け付けると、1つの外部装置が発行したI/O要求が連続してI/O要求キューに登録されない連続登録失敗時間をI/O要求発行元の外部装置ごとに記憶する外部装置情報保持部と、前記連続登録失敗時間に関する規定値を記憶する連続登録失敗時間規定値記憶部とを参照し、前記受け付けたI/O要求を前記I/O要求キューに登録するか否かを決定する優先外部装置判断部を備えたことを特徴とする。
本発明の第2の視点のI/O要求処理方法は、外部装置から受信したI/O要求をI/O要求キューに登録し、該I/O要求キューに登録されたI/O要求に基づいて外部装置と入出力装置との間で行われるデータの入出力を制御するI/O処理装置でI/O要求を処理する方法において、前記I/O処理装置が、前記外部装置が発行するI/O要求を受け付けるステップと、前記I/O処理装置が、1つの外部装置が発行したI/O要求が連続してI/O要求キューに登録されない連続登録失敗時間をI/O要求発行元の外部装置ごとに記憶する外部装置情報保持部と、前記連続登録失敗時間に関する規定値を記憶する連続登録失敗時間規定値記憶部とを参照し、前記受け付けたI/O要求を前記I/O要求キューに登録するか否かを決定するステップとを有することを特徴とする。
本発明の第2の視点のI/O処理装置及び方法では、外部装置からI/O要求を受信すると、その外部装置がI/O要求の登録に連続失敗している時間と、登録連続失敗時間に関する規定値とに基づいて、I/O要求をI/O要求キューに登録するか否かを決定する。この場合、登録連続失敗時間が長い外部装置を発行元とするI/O要求を優先して、I/O要求キューに登録すると決定することで、各外部装置について、I/O要求が発行されてからI/O要求キューに登録されるまでの時間の最大値を最小化して、上位のシステムやアプリケーションにおけるバッファのオーバーフロー・アンダーフローを防止することができる。
本発明の第2の視点のI/O処理装置では、前記連続登録失敗時間規定値保持部は、前記連続登録失敗時間のしきい値を保持し、前記優先外部装置判断部は、前記受け付けたI/O要求の発行元の外部装置の連続登録失敗時間が、前記しきい値以上であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。また、本発明の第2の視点のI/O要求処理方法では、前記連続登録失敗時間規定値保持部は、前記連続登録失敗時間のしきい値を保持し、前記登録するか否かを決定するステップは、前記受け付けたI/O要求の発行元の外部装置の連続登録失敗時間が、前記しきい値以上であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。規定値として、登録連続失敗時間のしきい値を用いる場合には、連続登録失敗時間が、そのしきい値以上となる外部装置を発行元とするI/O要求を優先してI/O要求キューに登録することで、I/O要求がI/O要求キューに登録されるまでにかかる時間の最大値を最小化できる。
本発明の第2の視点のI/O処理装置では、前記連続登録失敗時間規定値保持部は、前記連続登録失敗時間の順位のしきい値を保持し、前記優先外部装置判断部は、前記外部装置の連続登録失敗時間を降順に並べたときに、前記受け付けたI/O要求の発行元の外部装置の順位が、前記連続登録失敗回数の順位のしきい値と同じ順位か又はこれより高い順位であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。また、本発明の第2の視点のI/O要求処理方法では、前記連続登録失敗時間規定値保持部は、前記連続登録失敗時間の順位のしきい値を保持し、前記登録するか否かを決定するステップは、前記外部装置の連続登録失敗時間を降順に並べたときに、前記受け付けたI/O要求の発行元の外部装置の順位が、前記連続登録失敗回数の順位のしきい値と同じ順位か又はこれより高い順位であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。規定値として、登録連続失敗時間を大きい順に並べた際の順位のしきい値を用いる場合には、連続登録失敗時間の順位が、そのしきい値以上となる外部装置を発行元とするI/O要求を優先してI/O要求キューに登録することで、I/O要求がI/O要求キューに登録されるまでの時間の最大値を最小化できる。
本発明の第3の視点のI/O処理装置は、外部装置から受信したI/O要求をI/O要求キューに登録し、該I/O要求キューに登録されたI/O要求に基づいて外部装置と入出力装置との間で行われるデータの入出力を制御するI/O処理装置において、前記外部装置が発行するI/O要求を受け付けるI/O要求受付部と、前記I/O要求受付部がI/O要求を受け付けると、1つの外部装置が発行したI/O要求が連続してI/O要求キューに登録されない連続登録失敗回数をI/O要求発行元の外部装置ごとに記憶する外部装置情報保持部と、前記連続登録失敗回数に関する規定値を記憶する連続登録失敗回数規定値記憶部とを参照し、前記受け付けたI/O要求を前記I/O要求キューに登録するか否かを決定する優先外部装置判断部を備えたことを特徴とする。
本発明の第3の視点のI/O要求処理方法は、外部装置から受信したI/O要求をI/O要求キューに登録し、該I/O要求キューに登録されたI/O要求に基づいて外部装置と入出力装置との間で行われるデータの入出力を制御するI/O処理装置でI/O要求を処理する方法において、前記I/O処理装置が、前記外部装置が発行するI/O要求を受け付けるステップと、前記I/O処理装置が、1つの外部装置が発行したI/O要求が連続してI/O要求キューに登録されない連続登録失敗回数をI/O要求発行元の外部装置ごとに記憶する外部装置情報保持部と、前記連続登録失敗回数に関する規定値を記憶する連続登録失敗回数規定値記憶部とを参照し、前記受け付けたI/O要求を前記I/O要求キューに登録するか否かを決定するステップとを有することを特徴とする。
本発明の第3の視点のI/O処理装置及び方法では、外部装置からI/O要求を受信すると、優先外部プロセス判断部は、その外部装置がI/O要求の登録に連続失敗している回数と、登録連続失敗回数に関する規定値とに基づいて、I/O要求をI/O要求キューに登録するか否かを決定する。優先外部装置判断部が、登録連続失敗回数が多い外部装置を発行元とするI/O要求を優先して、I/O要求キューに登録すると決定することで、各外部装置について、I/O要求が発行されてからI/O要求キューに登録されるまでの時間の最大値を最小化して、上位のシステムやアプリケーションにおけるバッファのオーバーフロー・アンダーフローを防止することができる。
本発明の第3の視点のI/O処理装置では、前記連続登録失敗回数規定値保持部は、前記連続登録失敗回数のしきい値を保持し、前記優先外部装置判断部は、前記受け付けたI/O要求の発行元の外部装置の連続登録失敗回数が、前記連続登録失敗回数のしきい値以上であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。また、本発明の第3の視点のI/O要求処理方法では、前記連続登録失敗回数規定値保持部は、前記連続登録失敗回数のしきい値を保持し、前記登録するか否かを決定するステップは、前記受け付けたI/O要求の発行元の外部装置の連続登録失敗回数が、前記連続登録失敗回数のしきい値以上であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。規定値として、登録連続失敗回数のしきい値を用いる場合には、連続登録失敗回数が、そのしきい値以上となる外部装置を発行元とするI/O要求を優先してI/O要求キューに登録することで、I/O要求がI/O要求キューに登録されるまでにかかる時間の最大値を最小化できる。
本発明の第3の視点のI/O処理装置では、前記連続登録失敗回数規定値保持部は、前記連続登録失敗回数の順位のしきい値を保持し、前記優先外部装置判断部は、前記外部装置の連続登録失敗回数を降順に並べたときに、前記受け付けたI/O要求の発行元の外部装置の順位が、前記連続登録失敗回数の順位のしきい値と同じ順位か又はこれより高い順位であると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。また、本発明の第3の視点のI/O要求処理方法では、前記連続登録失敗回数規定値保持部は、前記連続登録失敗回数の順位のしきい値を保持し、前記登録するか否かを決定するステップは、前記外部装置の連続登録失敗回数を降順に並べたときに、前記受け付けたI/O要求の発行元の外部装置の順位が、前記連続登録失敗回数の順位のしきい値と同じ順位か又はこれより高い順位あると、前記受け付けたI/O要求を前記I/O要求キューに登録する構成を採用できる。規定値として、登録連続失敗回数を大きい順に並べた際の順位のしきい値を用いる場合には、連続登録失敗回数の順位が、そのしきい値以上となる外部装置を発行元とするI/O要求を優先してI/O要求キューに登録することで、I/O要求がI/O要求キューに登録されるまでの時間の最大値を最小化できる。
本発明の第2及び第3の視点のI/O処理装置は、前記優先外部装置判断部が、前記受け付けたI/O要求を前記I/O要求キューに登録しないと判断すると、当該I/O要求の発行元の外部装置に、I/O要求キューへの登録に失敗した旨を返却する構成を採用できる。本発明の第2及び第3の視点のI/O要求処理方法では、前記登録するか否かを決定するステップで、前記受け付けたI/O要求を前記I/O要求キューに登録しないと判断すると、前記I/O処理装置が、当該I/O要求の発行元の外部装置に、I/O要求キューへの登録に失敗した旨を返却するステップを更に有する構成を採用できる。この場合、失敗した旨の通知を受けた外部装置は、例えば所定時間だけ待機して、I/O要求を再送すればよい。
本発明の第2及び第3の視点のI/O処理装置では、前記優先判断部は、前記I/O要求キューの使用率を記憶するI/O要求キュー情報保持部と、前記使用率に関する規定値を記憶するI/O要求キュー規定値保持部とを参照し、前記使用率が、前記規定値よりも小さいと、前記受け付けたI/O要求を前記I/O要求キューに登録すると決定する構成を採用できる。本発明の第2及び第3の視点のI/O要求処理方法は、前記I/O処理装置が、前記I/O要求キューの使用率を記憶するI/O要求キュー情報保持部と、前記使用率に関する規定値を記憶するI/O要求キュー規定値保持部とを参照して、前記使用率と前記使用率に関する規定値とを比較するステップと、前記使用率が前記使用率に関する規定値よりも小さいと、前記I/O処理装置が、前記受け付けたI/O要求を前記I/O要求キューに登録するステップとを更に有する構成を採用できる。使用率が低い場合には、I/O要求キューの空きに余裕がある。このような状態では、規定値に基づくI/O要求登録の可否の決定を行わずに、I/O要求をI/O要求キューに登録する構成とすることができる。
本発明の第2及び第3の視点のI/O処理装置は、前記外部装置からI/O要求を受信した時間間隔と、前記時間間隔のしきい値を保持する時間間隔規定値保持部が保持するしきい値とを比較し、前記受信した時間間隔が、前記時間隔のしきい値を超えると判断すると、前記外部装置が発行するI/O要求の登録優先度を低下させる時間の終了時刻を示す減衰終了時刻を、当該外部装置と対応付けて記憶する減衰時刻設定部を更に備える構成を採用できる。この場合、前記優先外部装置判断部は、現時刻と、前記減衰終了時刻とを比較し、現時刻が、前記減衰終了時刻以後であると判断すると、前記前記受け付けたI/O要求を前記I/O要求キューに登録すると決定する構成を採用できる。本発明の第2及び第3の視点のI/O要求処理方法は、前記外部装置からI/O要求を受信した時間間隔と、前記時間間隔のしきい値を保持する時間間隔規定値保持部が保持するしきい値とを比較するステップと、前記受信した時間間隔が、前記時間隔のしきい値を超えると判断すると、前記I/O処理装置が、前記外部装置が発行するI/O要求の登録優先度を低下させる時間の終了時刻を示す減衰終了時刻を、当該外部装置と対応付けて記憶するステップとを更に有する構成を採用できる。この場合、この場合、前記I/O処理装置が、現時刻と前記減衰終了時刻とを比較するステップと、該比較ステップで現時刻が、前記減衰終了時刻以後であると判断すると、前記I/O処理装置が、前記受け付けたI/O要求を前記I/O要求キューに登録するステップとを更に有する構成を採用できる。この場合には、I/O要求の発行間隔(受信間隔)が長い外部装置について、減衰終了時刻を設定することで、その時刻となるまでの間、その外部装置からのI/O要求の登録の優先度を下げ、その他の外部装置からのI/O要求を、優先的に、I/O要求キューに登録することができる。減衰終了時刻は、例えば最後にI/O要求をI/O要求キューに登録した時刻に、所定の時刻を加えた時刻として算出できる。
本発明のI/O処理装置及び方法では、I/O要求の登録遅延時間、登録連続失敗回数、又は、登録連続失敗回数に基づいて、優先的にI/O要求キューに登録するI/O要求を判断する。このようにすることで、例えば、低速の入出力装置に対して読み込み又は書き込み等のアクセスを行う際に、各外部装置のI/O要求の遅延時間の最大値を最小化して、上位のシステムやアプリケーションにおけるバッファのオーバーフロー・アンダーフローを防止することができる。これにより、例えば、データ書き込み時に、書き込みデータ等を保存するためのバッファ量が少なくてすむため、外部装置が備えるバッファ量を削減できる。また、データ読み込み時には、映像データ等を再生する際に、先読み量を少なくすることが可能となり、外部装置が備えるバッファ量を削減できる。
以下、図面を参照し、本発明の実施の形態を詳細に説明する。図1は、本発明の一実施形態のI/O処理装置の構成を示している。I/O処理装置500は、I/O要求受信部501、プロセス情報保持部510、優先プロセス判断部520、I/O要求キュー情報保持部530、I/O要求キュー540、及び、規定値保持部550を備える。I/O処理装置500は、外部装置(プロセス)600が、DVD(Digital Versatile Disk)や、ハードディスク(HDD)等の入出力装置700に対して発行したI/O要求を受け付けてI/O要求キュー540に登録し、I/O要求キュー540に格納されたI/O要求を順次に入出力装置700に受け渡す。I/O処理装置500は、I/O要求のI/O要求キュー540への登録に失敗すると、その旨を、I/O要求の発行元のプロセスに返却する。或いは、I/O要求キュー540への登録に成功するまで、登録動作を繰り返し行う。
I/O要求受信部501は、プロセス600から、書き込み又は読み込み要求を示すI/O要求を受信する。優先プロセス判断部520は、アルゴリズムで、優先プロセスを判断し、プロセスからのI/O要求をI/O要求キュー540に格納する。プロセス情報保持部510は、各プロセス600について、所定のプロセス情報を保持する。より詳細には、各プロセス600について、I/O要求の失敗回数を示すI/O要求失敗回数511、I/O要求を受信した時刻からI/O要求キュー540に登録されるまでの経過時間を示すI/O要求遅延時間512、I/O要求をI/O要求キュー540に登録することに成功した時刻を示すI/O登録成功時刻513、I/O要求のI/O要求キュー540への登録に成功したことを示すI/O登録成功フラグ514、I/O要求の登録の優先度を下げる処理の終了時刻を示すI/O減衰終了時刻515、I/O要求のあった時刻を示すI/O要求時刻516、I/O要求のI/O要求キュー540への登録の連続失敗時間を示すI/O要求連続失敗時間517を保持する。
I/O要求キュー540は、リスト構造で接続される、一つ又は複数のI/O要求を保持するキューとして構成される。I/O要求キュー情報保持部530は、I/O要求キュー540の使用状況に関する情報を保持する。より詳細には、I/O要求キュー540の使用率を示す使用率531と、I/O要求キュー540に登録済みのI/O要求数を示す使用数532と、登録可能な残りI/O要求数を示す残数533とを保持する。規定値保持部550は、優先プロセス判断部520が優先プロセスを判断する際に使用する規定値を保持する。より詳細には、I/O要求の遅延時間の比較、又は、I/O要求の連続失敗時間の比較に利用するTw規定値551と、I/O要求の連続失敗回数の比較に利用するwc規定値552と、I/O要求の使用率の比較に利用するI/O要求キュー率規定値553と、同一プロセスからのI/O要求を受信しない間隔を比較する際に利用するTd規定値554とを保持する。
優先プロセス判断部520は、遅延時間検出部521、失敗回数検出部522、減衰判断部523、及び、連続失敗時間検出部524を備える。遅延時間検出部521は、I/O要求を受信してからI/O要求キュー540へ登録するまでの遅延時間の比較を行う。失敗回数検出部522は、I/O要求のI/O要求キュー540への登録の失敗回数の比較を行う。減衰判断部523は、プロセスのI/O要求の登録優先度を下げる時間を判断する。連続失敗時間検出部524は、I/O要求のI/O要求キュー540への登録に連続して失敗した時間の比較を行う。
以下、I/O処理装置500がI/O要求を受信してからI/O要求キュー540に登録するまでの処理について説明する。図2は、遅延時間が長いI/O要求を、優先的にI/O要求キュー540に登録する際のI/O処理装置500の動作手順を示している。この例では、I/O処理装置500は、I/O要求キュー540にI/O要求が登録されるまで登録処理を繰り返し、I/O要求をI/O要求キュー540に登録するまで、I/O要求の発行元のプロセス600の処理をブロックする。
優先プロセス判断部520は、まず、I/O要求受信部501がプロセス600からI/O要求を新規に受信したか否かを判断する(ステップS11)。新規にI/O要求を受信した場合には、そのプロセス600についてのI/O要求遅延時間512(Tw)を0に設定し、I/O要求時刻516(Tr)を現時刻に設定する(ステップS12)。時刻の単位には、例えばナノ秒や、中央演算処理のクロック数を用いることができる。その後、I/O要求キュー540へ未登録のI/O要求が残っているか否かを判断する(ステップS13)。受信したI/O要求の全てをI/O要求キュー540に登録している場合には、ステップS11に戻る。
受信済みI/O要求のうちで、まだ、I/O要求キュー540に登録していないI/O要求が残っている場合には、遅延時間検出部521により、各I/O要求に対応するプロセスのI/O要求遅延時間512(Tw)を比較し、そのうちで最大の遅延時間を有するものを選択する(ステップS14)。その後、I/O要求キュー情報保持部530を参照してI/O要求キュー540が一杯であるか否か、つまりは残数533が0であるか否かを判断する(ステップS15)。I/O要求キュー540が一杯であれば、全ての受信済みI/O要求の発行元プロセス600に対応するI/O要求遅延時間512(Tw)を、現時刻からI/O要求時刻516(Tr)を減算した時間に設定し(ステップS16)、ステップS11に戻る。
I/O要求キュー540に登録可能なI/O要求格納エリアが残っているときには、ステップS14で選択したI/O要求を、I/O要求キュー540に登録する(ステップS17)。優先プロセス判断部520は、ステップS17で登録されなかったI/O要求に対応するプロセスのI/O要求遅延時間512(Tw)を、現時刻からI/O要求時刻516(Tr)を減算した時間に設定し、ステップS11に戻って、I/O要求の登録処理を継続する。このようにすることで、よりI/O要求の登録に失敗している時間が長いプロセス600からのI/O要求を、優先的にI/O要求キュー540に登録することができ、プロセス600の処理がブロックされる時間を短縮できる。
図3は、I/O要求の登録に失敗している時間が長いプロセスの要求を、優先的にI/O要求キュー540に登録する際のI/O処理装置500の動作手順を示している。以下の例では、I/O処理装置500は、I/O要求キュー540への登録に失敗すると、その旨を要求発行元のプロセス600に返却する。各プロセス600は、I/O処理装置500から、I/O要求の登録に失敗した旨の通知を受けると、例えば所定時間だけ待機して、I/O要求を再送する。
優先プロセス判断部520は、I/O要求受信部501がプロセスからI/O要求を受信したか否かを判断し(ステップS21)、I/O要求を受信していないときには、ステップS21に戻って、I/O要求を受信するまで待機する。優先プロセス判断部520は、I/O要求受信部501がI/O要求を受信したと判断すると、その受信したI/O要求に対応するプロセス600のI/O要求連続失敗時間517(Tw)が0であるか否かを判断する(ステップS22)。I/O要求連続失敗時間517(Tw)が0であるということは、I/O要求を初めて受信したことを示しており、優先プロセス判断部520は、そのプロセス600に対応するI/O要求時刻516(Tr)を、現時刻に設定する(ステップS23)。
優先プロセス判断部520は、I/O要求キュー情報保持部530及び規定値保持部550を参照し、使用率531が、しきい値としてI/O要求キュー率規定値553に規定された“率1”以上であるか否かを判断する(ステップS24)。ステップS24で使用率531が“率1”よりも小さいと判断すると、受信したI/O要求を、I/O要求キュー540に登録し(ステップS27)、I/O要求連続失敗時間517(Tw)を0に設定して(ステップS28)、ステップS21へ戻る。
優先プロセス判断部520は、ステップS24で使用率531が“率1”以上であると判断すると、連続失敗時間検出部524により、受信したI/O要求に対応するプロセス600のI/O要求連続失敗時間517(Tw)がTw規定値551で規定された時間“Tw1”以上であるかを判断する(ステップS25)。或いは、各プロセス600のI/O要求連続失敗時間517(Tw)を大きい順にソートしたときに、受信したI/O要求に対応するプロセス600のI/O要求連続失敗時間517(Tw)の順位が、Tw規定値551で規定された順位“Tw順位1”以上であるか否かを判断する。
優先プロセス判断部520は、ステップS25で、“Tw1”以上である、又は、“Tw順位1”以上であると判断すると、ステップS27へ進んでI/O要求をI/O要求キュー540に登録する。一方、“Tw1”よりも小さい、又は、“Tw順位1”よりも順位が低いと判断すると、I/O要求連続失敗時間517(Tw)を、現時刻からI/O要求時刻516(Tr)を減算した値に設定し(ステップS26)、I/O要求を発行したプロセス600にI/O要求キュー540への登録に失敗した旨を返却して、ステップS21へ戻る。
ここで、I/O要求を発行するプロセスが、プロセスPx、Py、Pzの3つある場合を例に挙げて説明する。プロセス情報保持部510は、各プロセスについて、図4に示す情報を記憶しているとする。また、規定値保持部550は、図5に示す規定値を記憶し、I/O要求キュー情報保持部530は、図6に示す情報を記憶しているとする。この状況において、ステップS21で、I/O要求受信部501が、プロセスPxから、図7に示すようなI/O書き込み要求を受信すると、プロセスPxのI/O要求連続失敗時間517(Tw)は0ではないため、ステップS22からステップS23へと進む。
ステップS24では、I/O要求キュー540の使用率531「80%」が、規定値保持部550のI/O要求キュー率規定値553の“率1”「50%」以上であるため、ステップS25へと進む。ステップS25で、プロセスPxのI/O要求連続失敗時間517(Tw:300ns)と、Tw規定値551で規定された時間Tw1「250ns」とを比較すると、プロセスPxのI/O要求連続失敗時間517(Tw)の方が大きい。このため、ステップS27へ進んで、プロセスPxのI/O要求が、I/O要求キュー540に登録される。その後、ステップS28で、プロセスPxのI/O要求連続失敗時間517(Tw)は、0にリセットされる。
上記状況において、ステップS21で、I/O要求受信部501がプロセスPyからのI/O要求を受信した場合には、上記と同様に、ステップS22から、ステップS23、S24、S25へと進む。プロセスPyのI/O要求連続失敗時間517(Tw:200ns)は、Tw規定値551で規定された時間Tw1「250ns」よりも小さい。しかし、プロセスPyのI/O要求連続失敗時間517の遅延時間が長い方からの順位と、Tw規定値551で規定された “Tw順位1”「2位」とを比較すると、プロセスPyのI/O要求連続失敗時間517(Tw)の順位「2位」は、Tw1順位1「2位」以上である。このため、ステップS25からステップS27へと進んで、プロセスPyのI/O要求が、I/O要求キュー540に登録される。
上記状況において、ステップS21で、I/O要求受信部501がプロセスPzからI/O要求を受信した場合、ステップS25で、I/O要求連続失敗時間を比較すると、プロセスPzのI/O要求連続失敗時間517(Tw:100ns)は、Tw規定値551で規定された時間Tw1「250ns」よりも小さい。また、プロセスPzのI/O要求連続失敗時間517の時間が長いほうからの順位「3位」は、Tw順位1「2位」よりも低い。このため、ステップS25からステップS26へ進んで、プロセスPzのI/O要求は、I/O要求キュー540には登録されない。
従来のI/O処理装置のように、起動優先度に従ってI/O要求をキューに登録する方式を採用する場合には、I/O要求の登録に失敗している時間が考慮されないため、例えばプロセスPzの起動優先度が最も高い場合には、プロセスPzが発行したI/O要求が先にキューに登録され、プロセスPzのI/O要求の登録に失敗している時間に比してI/O要求の登録に失敗している時間が長いプロセスPx及びPyが発行したI/O要求は、その登録の機会を失う。図3に示す手順に従って、I/O要求をI/O要求キュー540に登録する構成を採用することにより、I/O要求の登録に失敗している時間が長いプロセス600からのI/O要求を、優先的にI/O要求キュー540に登録することができ、各プロセス600がI/O要求を発生してからI/O要求キュー540に登録されるまでの遅延時間の最大値を最小化できる。
図8は、I/O要求の登録に失敗している回数が多いプロセス600からのI/O要求を、優先的にI/O要求キュー540に登録する際のI/O処理装置500の動作手順を示している。優先プロセス判断部520は、I/O要求受信部501がプロセス600からI/O要求を新規に受信したか否かを判断する(ステップS31)。新規I/O要求を受信していないときには、ステップS21に戻って、新規I/O要求を受信するまで待機する。優先プロセス判断部520は、I/O要求受信部501が新規I/O要求を受信したと判断すると、その受信したI/O要求に対応するプロセス600が初めてI/O要求を行うプロセスであるか否かを判断する(ステップS32)。初めてI/O要求を行うプロセス600であれば、そのプロセスのI/O要求失敗回数511(wc)を0に設定する(ステップS33)。
優先プロセス判断部520は、I/O要求キュー情報保持部530及び規定値保持部550を参照し、使用率531が、しきい値としてI/O要求キュー率規定値553に規定された“率2”以上であるか否かを判断する(ステップS34)。例えば、規定値保持部550が図5に示す情報を保持する場合には、規定値保持部550から“率2”に対応する値(60%)を取得して、使用率531が、その値(60%)以上であるか否かを判断する。ステップS24で、使用率531が“率2”よりも小さいと判断すると、受信したI/O要求を、I/O要求キュー540に登録し(ステップS37)、I/O要求失敗回数511(wc)を0に設定して(ステップS38)、ステップS31へ戻る。
優先プロセス判断部520は、ステップS34で使用率531が“率2”以上であると判断すると、失敗回数検出部522により、受信したI/O要求に対応するプロセス600のI/O要求失敗回数511(wc)がwc規定値552で規定された失敗回数“wc1”以上であるかを判断する(ステップS35)。或いは、各プロセス600のI/O要求失敗回数511(wc)を大きい順にソートしたときに、受信したI/O要求に対応するプロセスのI/O要求失敗回数511(wc)の順位が、wc規定値552で規定された順位“wc順位1”以上であるか否かを判断する。例えば、規定値保持部550が図5に示す情報を保持する場合には、優先プロセス判断部520は、I/O要求失敗回数511(wc)が、失敗回数“wc1”(60回)以上であるか否か、又は、I/O要求失敗回数511(wc)の順位が“wc順位1”(4位)以上であるか否かを判断する。
ステップS35で、“wc1”以上である、又は、“wc順位1”以上であると判断すると、ステップS37へ進んでI/O要求をI/O要求キュー540に登録する。一方、“wc1”よりも小さい、又は、“wc順位1”よりも順位が低いと判断すると、I/O要求失敗回数511(wc)に1を加算し(ステップS36)、I/O要求を発行したプロセスにI/O要求キュー540への登録に失敗した旨を返却して、ステップS31へ戻る。このような手順でI/O要求をI/O要求キュー540に登録することで、I/O要求の登録に失敗している回数が多いプロセスからのI/O要求を、優先的にI/O要求キュー540に登録することができ、その結果、各プロセス600のI/O要求遅延時間の最大値を最小化できる。
図9は、長時間I/O要求を発行しないプロセス600については、しばらくの間、I/O要求のI/O要求キュー540への登録を減衰させる際のI/O処理装置500の動作手順を示している。優先プロセス判断部520は、I/O要求受信部501がプロセス600からI/O要求を受信したか否かを判断する(ステップS401)。I/O要求を受信していないときには、ステップS401に戻って、I/O要求を受信するまで待機する。
優先プロセス判断部520は、I/O要求受信部501がI/O要求を受信したと判断すると、その受信したI/O要求に対応するプロセス600が初めてI/O要求を行うプロセスであるか否かを判断する(ステップS402)。初めてI/O要求を行うプロセスであれば、I/O登録成功時刻513(Ts)、及び、I/O減衰終了時刻515(Te)を、それぞれ現在時刻を設定し、I/O登録成功フラグ514(sFlg)を、成功を示す「1」に設定して(ステップS410)、ステップS406へ進む。
優先プロセス判断部520は、ステップS402で、初めてI/O要求を行うプロセスではないと判断すると、I/O登録成功フラグ514(sFlg)が成功「1」を示しているか否かを判断する(ステップS403)。I/O登録成功フラグ514(sFlg)が成功「1」を示していないときには、ステップS406へ進む。優先プロセス判断部520は、I/O登録成功フラグ514(sFlg)が成功「1」示しているときには、現時刻から前回のI/O要求の登録に成功した時刻Tsを減算し、プロセス600からI/O要求がなかった時間Tdを算出する(ステップS404)。
優先プロセス判断部520は、Td規定値554を参照し、ステップS404で算出した時間Tdが、規定値“Td1”よりも大きいか否かを判断する(ステップS405)。例えば、規定値保持部550が図5に示す情報を保持する場合には、規定値保持部550から規定値“Td1”(500ns)を取得して、算出したTdが、500nsよりも大きいか否かを判断する。I/O要求がなかった時間Tdが、規定値“Td1”よりも大きい場合には、現時刻に、Td規定値554で規定された減衰時間を加えた時刻を、I/O減衰終了時刻515(Te)として設定する(ステップS411)。例えば、規定値保持部550が図5に示す情報を保持する場合には、現時刻に、規定値保持部550で規定された減衰時間(1,000,000ns)を加えた時刻を、I/O減衰終了時刻515(Te)に設定する。I/O要求がなかった時間Tdが、規定値“Td1”以下であれば、そのままステップS406へ進む。
優先プロセス判断部520は、I/O要求キュー情報保持部530及び規定値保持部550を参照し、使用率531が、しきい値としてI/O要求キュー率規定値553に規定された“率3”以上であるか否かを判断する(ステップS406)。例えば、規定値保持部550が図5に示す情報を保持する場合には、規定値保持部550から“率3”に対応する値(70%)を取得して、使用率531が、その値(70%)以上であるか否かを判断する。ステップS406で、使用率531が“率3”よりも小さいと判断すると、受信したI/O要求を、I/O要求キュー540に登録し(ステップS412)、I/O登録成功時刻513(Ts)、及び、I/O減衰終了時刻515(Te)を、それぞれ現在時刻を設定し、I/O登録成功フラグ514(sFlg)を成功「1」に設定して(ステップS413)、ステップS401へ戻る。
優先プロセス判断部520は、ステップS406で使用率531が“率3”以上であると判断すると、減衰判断部523により、現時刻と、I/O減衰終了時刻515(Te)とを比較し、現時刻がI/O減衰終了時刻515(Te)よりも前であるか否かを判断する(ステップS407)。現時刻がI/O減衰終了時刻515(Te)よりも前ではない、つまり、現時刻がI/O減衰終了時刻515(Te)以後であると判断すると、ステップS412へ進んで、I/O要求を、I/O要求キュー540に登録する。
優先プロセス判断部520は、ステップS407で、現時刻がI/O減衰終了時刻515(Te)よりも前であると判断すると、図3に示す手順と同様な手順で計測されたI/O要求連続失敗時間517(Tw)が規定値保持部550で規定された規定値を超えるか否かを判断する(ステップS408)。或いは、図8に示す手順と同様な手順でカウントされたI/O要求失敗回数511(wc)が、規定値保持部550で規定された規定値を超えるか否か(または、規定値以上であるか)を判断する。
ステップS408では、例えば、規定値保持部550(図5)を参照して、I/O要求連続失敗時間517(Tw)が遅延時間“Tw2”(300ns)以上であるか、又は、I/O要求連続失敗時間517(Tw)の順位が、“Tw順位2”(4位)以上であるか否かを判断する。或いは、I/O要求失敗回数511(wc)が失敗回数“wc2”(70回)以上であるか、又は、I/O要求失敗回数511(wc)の順位が、“wc順位2”(5位)以上であるか否かを判断する。
優先プロセス判断部520は、ステップS408で、規定値を超えると判断すると、ステップS412へ進んで、I/O要求をI/O要求キュー540に登録する。ステップS408で、規定値を超えないと判断したときには、I/O登録成功フラグ514(sFlg)を0(失敗)に設定し(ステップS409)、ステップS401へ戻る。このような手順でI/O要求をI/O要求キュー540に登録することで、長時間I/O要求を送信しないプロセス600については、I/O減衰終了時刻515までI/O要求キュー540への登録の優先度を下げて、他のプロセス600からのI/O要求を、優先的にI/O要求キュー540に登録することができる。
本実施形態では、I/O要求キュー540の使用率が高い状態、つまり、登録可能な残数が少ない状態では、優先プロセス判断部520により、I/O要求遅延時間512又はI/O要求連続失敗時間517が長いプロセス600からのI/O要求を優先的にI/O要求キュー540に登録する。或いは、I/O要求失敗回数511が多いプロセス600からのI/O要求を、I/O要求キュー540に優先的に登録する。このようにすることにより、例えば低速なデバイスに対して、読み込み又は書き込み等のアクセスの遅延時間を大幅に小さくすることが可能になり、I/O処理装置500にI/O要求を送信する上位のアプリケーションや装置において、書き込みデータを保存しておくためのバッファ量を小さくすることができる。また、読み出しにおいては、映像データ等を再生する際に、先読み量を小さくすることが可能となり、バッファ量を削減することができる。
なお、上記実施形態で説明したI/O要求キュー540への登録処理については、組み合わせて使用することも可能である。例えば、優先プロセス判断部520は、はじめ、図3に示す手順に従って、I/O要求遅延時間512に基づいてI/O要求キュー540への登録を行い、その後、図4に示す手順に従って、I/O要求失敗回数511に基づいてI/O要求キュー540への登録を行う構成としてもよい。また、特定の記憶装置に対しては、I/O要求を図3に示す手順で登録し、他の記憶装置に対しては、I/O要求を図4に示す手順で登録してもよい。ステップS25等では、I/O要求遅延時間512が規定値以上であるか否かを判断したが、規定値を超えるか否かで判断してもよい。ステップS24等では、使用率531が規定値以上であるか否かを判断したが、使用率531に代えて使用数532又は残数533を用い、使用数532が規定値よりも小さいか否か、又は、残数533が規定値以上残っているか否かで判断してもよい。
以上、本発明をその好適な実施形態に基づいて説明したが、本発明のI/O処理システムは、上記実施形態例にのみ限定されるものではなく、上記実施形態の構成から種々の修正及び変更を施したものも、本発明の範囲に含まれる。