(57)【特許請求の範囲】
【請求項１】
オペレーションシステムのデバイスへのアクセスを制御するためのアクセス制御方法であって、
前記デバイスへのアクセスを要求するためのアクセス要求に優先度を付与しておき、
前記アクセス要求を、該アクセス要求に付与されている優先度が高い順にリクエストキューにリクエストとして接続し、
前記アクセス要求を、前記リクエストキューに既に接続されているリクエストへマージする場合、マージしようとする前記アクセス要求の優先度が、前記リクエストの優先度よりも高ければ、前記リクエストの優先度を前記アクセス要求の優先度に合わせて変更し、
前記アクセス要求を接続した前記リクエストキューを、前記リクエストキュー内で優先度が逆転しないように、前記デバイスに対するアクセスを実行するデバイスドライバ内のキューに移すことにより、前記リクエストキュー上の順序で、前記アクセス要求に基づくアクセスを実行させる、アクセス制御方法において、
前記優先度が所定値以上に高いアクセス要求を前記リクエストキューに接続したら、前記リクエストキューを前記デバイスドライバ内のキューに移すとともに、ソフトウェア割り込みによってリクエストキューの開放処理を起動させることを特徴とする、アクセス制御方法。
【請求項２】
アプリケーションプロセスが前記デバイスへのアクセスを伴うアプリケーションを実行して前記アクセス要求を発生させ、
カーネルが、前記アプリケーションプロセスで発生したアクセス要求を受け付けて、前記デバイスドライバに、前記優先度の順に該アクセス要求に基づくアクセスを実行させる、請求項１に記載のアクセス制御方法。
【請求項３】
ファイルシステムへ反映させるべきジャーナル情報を、前記デバイスドライバに、優先度が高い順序で前記デバイス上のファイルシステムへ反映させる、請求項２に記載のアクセス制御方法。
【請求項４】
優先度の異なる書き込みアクセスが行われる領域が、予め異なるパーティションに分離されている、請求項３に記載のアクセス制御方法。
【請求項５】
第１のジャーナル情報を前記ファイルシステムに反映させるとき、該ジャーナル情報よりも前に前記ファイルシステムへの反映を要求し、未だ前記ファイルシステムに反映されていないジャーナル情報の中に、前記第１のジャーナル情報よりも優先度の低い第２のジャーナル情報が存在していたら、前記第２のジャーナル情報の優先度を高めて前記ファイルシステムへの反映を促進させる、請求項３または４に記載のアクセス制御方法。
【請求項６】
オペレーションシステムのデバイスへのアクセスを制御する処理装置であって、
前記デバイスへのアクセスを実行するデバイスドライバと、
前記デバイスへのアクセスを要求するためのアクセス要求を、該アクセス要求に付与されている優先度が高い順にリクエストキューにリクエストとして接続し、前記リクエストキュー上の順序で、前記デバイスドライバに、該アクセス要求に基づくアクセスを実行させる要求処理部と、を有し、
前記要求処理部は、前記アクセス要求を、前記リクエストキューに既に接続されているリクエストへマージする場合、マージしようとする前記アクセス要求の優先度が、前記リクエストの優先度よりも高ければ、前記リクエストの優先度を前記アクセス要求の優先度に合わせて変更し、
前記要求処理部は、前記アクセス要求を接続した前記リクエストキューを、前記リクエストキュー内で優先度が逆転しないように、前記デバイスドライバ内のキューに移すことにより、前記リクエストキュー上の順序で前記デバイスドライバに該アクセス要求に基づくアクセスを実行させる処理装置において、
前記要求処理部は、前記優先度が所定値以上に高いアクセス要求を前記リクエストキューに接続したら、前記リクエストキューを前記デバイスドライバ内のキューに移すとともに、割り込みによってリクエストキューの開放処理を起動させることを特徴とする、処理装置。
【請求項７】
前記デバイスへのアクセスを伴うアプリケーションを実行し、前記デバイスにアクセスするときアクセス要求を発生させるアプリケーションプロセスを更に有し、
前記要求処理部は、前記アプリケーションプロセスで発生したアクセス要求を受け付けて、前記デバイスドライバに、前記優先度の順に該アクセス要求に基づくアクセスを実行させる、請求項６に記載の処理装置。
【請求項８】
前記要求処理部は、ファイルシステムへの変更を記録したジャーナル情報をパーティション毎に一括して前記デバイスに反映させるジャーナル処理部であり、
前記ジャーナル処理部は、前記ファイルシステムへ反映させるべきジャーナル情報を、前記デバイスドライバに、優先度が高い順序で前記デバイス上のファイルシステムへ反映させる、請求項７に記載の処理装置。
【請求項９】
優先度の異なる書き込みアクセスが行われる領域が、予め異なるパーティションに分離されている、請求項８に記載の処理装置。
【請求項１０】
前記ジャーナル処理部は、第１のジャーナル情報を前記ファイルシステムに反映させるとき、該ジャーナル情報よりも前に前記ファイルシステムへの反映を要求し、未だ前記ファイルシステムに反映されていないジャーナル情報の中に、前記第１のジャーナル情報よりも優先度の低い第２のジャーナル情報が存在していたら、前記第２のジャーナル情報の優先度を高めて前記ファイルシステムへの反映を促進させる、請求項８または９に記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーションシステムによるデバイスへのアクセスを制御するためのアクセス制御方法、およびそのアクセス方法を用いた処理装置に関する。
【背景技術】
【０００２】
オペレーションシステムの代表的なものとしてＬｉｎｕｘ（登録商標）がある。オペレーションシステムによりアクセスされるブロックデバイスの代表的なものとしてハードディスクがある。Ｌｉｎｕｘのカーネルにおけるブロックデバイスへのアクセス動作について説明する。
【０００３】
ブロックデバイスへのアクセスを要求するアプリケーションプログラムからカーネルに対してアクセスコマンドが発行される。アクセスが書き込みであればアクセスコマンドはｗｒｉｔｅシステムコールである。アクセスコマンドを受けたカーネルはアクセスに必要な処理を行う。具体的には、書き込み対象のデータをカーネル空間のバッファへ書き込み、ハードディスクへのアクセス要求を生成し、アクセス要求のキュー制御を行う等の処理が行われる。その後にデバイスドライバが、カーネルによる処理結果に基づいてブロックデバイスへアクセスする。
【０００４】
ハードディスクへのアクセスにおけるカーネルの処理では、ＩＯスケジューラにより、ディスクヘッドの動きを最小化し、データを効率的にディスクへ書き込むようなソート処理が行われる（非特許文献１参照）。Ｌｉｎｕｘのカーネル２．６では、ＩＯスケジューラとして、以下の４種類のスケジューラが用意されている。
（１）ｃｆｑ：  プロセス毎にＩ／Ｏ要求を時間に対して均一に割り当てるようにディスパッチする。
（２）ｄｅａｄｌｉｎｅ：  Ｉ／Ｏ要求がディスパッチされる期限を設定する。期限がきたら強制的にディスパッチすることで応答性が確保される。また読み出しと書き込みとを区別し、読み出しを書き込みよりも優先してディスパッチする。
（３）ａｓ：  ｄｅａｄｌｉｎｅをベースに学習的アルゴリズムを用いて各パラメータを変化させながら、Ｉ／Ｏ要求をマージしたり、Ｉ／Ｏ要求をディスパッチしたりする。読み出しと書き込みのそれぞれについて、まとめて処理するまでの時間が設定される。
（４）ｎｏｏｐ：  Ｉ／Ｏ要求の単純なマージ作業を行うだけで、そのままＩ／Ｏ要求をディスパッチする。
【０００５】
また、ファイルシステムへの過去の変更をブロックデバイスへ記録するためのジャーナル処理では、パーティション毎にファイルシステムの整合性を保つため、ブロックデバイスへの書き込みはパーティションの単位で行われる。
【０００６】
さらに、ジャーナル処理では、ファイルシステムの整合性を保つため、必ず、過去に書き込みを要求したジャーナル情報がハードディスクに反映されてから次のジャーナル情報が書き込まれる。
【非特許文献１】Ｓｉｔａｒａｍ  ｌｙｅｒ他、「Ａｎｔｉｃｉｐａｔｏｒｙ  ｓｃｈｅｄｕｌｉｎｇ：  Ａ  ｄｉｓｋ  ｓｃｈｅｄｕｌｉｎｇ  ｆｒａｍｅｗｏｒｋ  ｔｏ  ｏｖｅｒｃｏｍｅ  ｄｅｃｅｐｔｉｖｅ  ｉｄｌｅｎｅｓｓ  ｉｎ  ｓｙｎｃｈｒｏｎｏｕｓ  Ｉ／Ｏ」、１８ｔｈ  ＡＣＭ  ＳＯＳＰ、２００１
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述したＬｉｎｕｘのカーネルのＩＯスケジューラによって効率的なハードディスクへのアクセスが可能となっている。しかしながら、そのようなＩＯスケジューラでは、ディスクヘッドの動きを最小化するというように、ハードディスクへのアクセス要求を全体として効率よく処理することに主眼が置かれているため、緊急度の高いデータの読み出しや書き込みを行いたい場合や、通常のデータより優先的にデータを読み出しや書き込みを行いたい場合に、その要望を十分に満たすものではなかった。例えばハードディスクへのアクセスが頻発するとアクセスの実行が遅れ、重要なアプリケーションの処理が遅れることがあるという問題があった。
【０００８】
また、過去の変更をブロックデバイスへ記録するジャーナル処理においても、できるだけ迅速にハードディスクへ反映させたいジャーナル情報があることがある。しかしながら、上述したようなＩＯスケジューラでは、ファイルシステムの整合性を保つためにブロックデバイスへの書き込み処理が制限されているため、緊急度や優先度の高いジャーナル情報のハードディスクへの反映が遅れることがあった。
【０００９】
本発明の目的は、優先度に応じたブロックデバイスへのアクセスを可能にするアクセス制御方法および処理装置を提供することである。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明の処理装置は、
オペレーションシステムのデバイスへのアクセスを制御する処理装置であって、
前記デバイスへのアクセスを実行するデバイスドライバと、
前記デバイスへのアクセスを要求するためのアクセス要求を、該アクセス要求に付与されている優先度が高い順にリクエストキューにリクエストとして接続し、前記リクエストキュー上の順序で、前記デバイスドライバに、該アクセス要求に基づくアクセスを実行させる要求処理部と、を有している。
【００１１】
また、前記要求処理部は、前記アクセス要求を、前記リクエストキューに既に接続されているリクエストへマージする場合、マージしようとする前記アクセス要求の優先度が、前記リクエストの優先度よりも高ければ、前記リクエストの優先度を前記アクセス要求の優先度に合わせて変更することにしてもよい。
【００１２】
また、前記要求処理部は、前記アクセス要求を接続した前記リクエストキューを、前記リクエストキュー内で優先度が逆転しないように、前記デバイスドライバ内のキューに移すことにより、前記リクエストキュー上の順序で前記デバイスドライバに該アクセス要求に基づくアクセスを実行させることにしてもよい。
【００１３】
また、前記要求処理部は、前記優先度が所定値以上に高いアクセス要求を前記リクエストキューに接続したら、前記リクエストキューを前記デバイスドライバ内のキューに移すとともに、割り込みによってリクエストキューの開放処理を起動させることにしてもよい。
【００１４】
また、処理装置は、前記デバイスへのアクセスを伴うアプリケーションを実行し、前記デバイスにアクセスするときアクセス要求を発生させるアプリケーションプロセスを更に有し、
前記要求処理部は、前記アプリケーションプロセスで発生したアクセス要求を受け付けて、前記デバイスドライバに、前記優先度の順に該アクセス要求に基づくアクセスを実行させることにしてもよい。
【００１５】
また、前記要求処理部は、ファイルシステムへの変更を記録したジャーナル情報をパーティション毎に一括して前記デバイスに反映させるジャーナル処理部であり、
前記ジャーナル処理部は、前記ファイルシステムへ反映させるべきジャーナル情報を、前記デバイスドライバに、優先度が高い順序で前記デバイス上のファイルシステムへ反映させることにしてもよい。
【００１６】
また、優先度の異なる書き込みアクセスが行われる領域が、予め異なるパーティションに分離されているとしてもよい。
【００１７】
また、前記ジャーナル処理部は、第１のジャーナル情報を前記ファイルシステムに反映させるとき、該ジャーナル情報よりも前に前記ファイルシステムへの反映を要求し、未だ前記ファイルシステムに反映されていないジャーナル情報の中に、前記第１のジャーナル情報よりも優先度の低い第２のジャーナル情報が存在していたら、前記第２のジャーナル情報の優先度を高めて前記ファイルシステムへの反映を促進させるとしてもよい。
【発明の効果】
【００１８】
本発明によれば、デバイスへのアクセスを、優先度が高いほど先頭になるようにしてリクエストキューに接続し、そのリクエストキューにある順序でデバイスドライバに実行させるので、優先度に応じたデバイスへのアクセスが可能となる。
【発明を実施するための最良の形態】
【００１９】
本発明を実施するための形態について図面を参照して詳細に説明する。
【００２０】
図１は、本実施形態のコンピュータシステムの構成を示すブロック図である。図１を参照すると、コンピュータシステム１０は処理装置１１とブロックデバイス１２とを有している。
【００２１】
処理装置１１はアプリケーションからの要求でブロックデバイス１２にアクセスする装置であり、典型的にはアプリケーションのソフトウェアプログラムを実行することによって動作するコンピュータ本体である。アプリケーションプロセスからブロックデバイス１２へのアクセス要求は、カーネルに対するシステムコールの形で行われる。本実施形態のアクセス要求（システムコール）には優先度が付与されており、処理装置１１は優先度の高いアクセス要求から優先的に処理する。
【００２２】
ブロックデバイス１２は、複数バイトからなるデータブロックを入出力するデバイスであり、例えばハードディスクやＤＶＤ等である。本実施形態では典型的な例として、適宜、ハードディスクの場合について説明する。
【００２３】
図２は、本実施形態の処理装置１１内での処理の概略を説明するための概念図である。
【００２４】
実行されている各種のアプリケーションは必要に応じてブロックデバイス１２へのアクセスをカーネルに要求する。本実施形態では典型的な例として、適宜、書き込みの処理について説明する。アプリケーションプロセスからカーネルへの各アクセス要求には、ブロックデバイス１２へのアクセスについての優先度を示す優先度情報が付与されている。図２には、「最優先」、「優先」、「通常」という３段階の優先度のアクセス要求が生じたときの例が示されている。例えば変更データの処理やファイルシステム上のジャーナル処理は、それ以降の他の処理への影響が大きいので優先度を高く設定しておくとよい。
【００２５】
カーネルにおけるＩＯ処理では、それらのアクセス要求を優先度情報に基づいて、優先度の高いアクセス要求が先に処理されるような順序に並べてキューに接続する。
【００２６】
デバイスドライバは、キュー上の順序でアクセス要求を処理し、ブロックデバイスにアクセスする。
【００２７】
図３は、本実施形態の処理装置の構成を示すブロック図である。図３を参照すると、処理装置１１は、アプリケーションプロセス部２１、カーネル部２２、ジャーナル処理部２３、およびデバイスドライバ部２４を有している。
【００２８】
アプリケーションプロセス部２１は各種アプリケーションからなり、アプリケーションの実行により、カーネル部２２およびデバイスドライバ部２４を介してブロックデバイス１２へアクセスする。デバイスドライバ部２４へのアクセスでは、アプリケーションプロセス部２１は、優先度を付与したアクセス要求をカーネル部２２に送る。
【００２９】
カーネル部２２は、ＯＳ（オペレーティングシステム）の基本的な機能を構成するカーネルである。カーネル部２２はアプリケーション部２１からのアクセス要求に基づいて、デバイスドライバ部２４に、ブロックデバイス１２へのアクセスを実行させる。ブロックデバイス１２に実行させるアクセス要求の順序は優先度の高い順である。
【００３０】
ジャーナル処理部２３は、ファイルシステムへの過去の変更を示すジャーナル情報をブロックデバイス１２へ反映するジャーナル処理を実行する。ジャーナル処理の実行において、ジャーナル処理部２３は、ジャーナル情報をブロックデバイス１２に反映させる。ブロックデバイス１２に実行させるジャーナル情報の順序は優先度の高い順である。
【００３１】
デバイスドライバ部２４は、周辺機器であるブロックデバイス１２を動作させるためのデバイスドライバである。デバイスドライバ部２４は、カーネル部２２またはジャーナル処理部２３からの要求に応じてブロックデバイス１２にアクセスする。
【００３２】
カーネル部２２は、バッファ書き込み部２２１、リクエスト生成部２２２、リクエストキュー登録部２２３、およびリクエストディスパッチ部２２４を有している。
【００３３】
バッファ書き込み部２２１は、ブロックデバイス１２３に書き込むべきデータをアプリケーションプロセス部２１の管理するユーザ空間から、カーネル部２２の管理するカーネル空間上のバッファ領域にコピーする。
【００３４】
リクエスト生成部２２２は、カーネル空間上のバッファ領域に書き込まれたデータを書き出すためのリクエストを生成する。
【００３５】
リクエストキュー登録部２２３は、リクエスト生成部２２２で生成されたリクエストをキューに登録する。その際、リクエストキュー登録部２２３は、優先度の高いリクエストをキューの優先的位置に登録する。例えば、優先度の最も高いリクエストをキューの先頭に登録し、それに続いて優先度の高いリクエストから順に登録すればよい。
【００３６】
リクエストディスパッチ部２２４は、リクエストキュー登録部２２３によりキューに登録されたリクエストをブロックデバイス１２のデバイスドライバ部２４内にあるキューに移動させる。
【００３７】
本実施形態によれば、ブロックデバイス１２へアクセスするとき、カーネル部２２は、ブロックデバイス１２へアクセスするためのリクエストを生成するとともにそのリクエストに優先度を付与する。そして、カーネル部２２は、優先度が高いほど先頭になるようにしてリクエストキューにリクエストを登録し、そのリクエストキューにある順序でアクセスをデバイスドライバ部２４に実行させる。その結果、優先度に応じたブロックデバイス１２へのアクセスが可能となる。
【００３８】
図４は、本実施形態のコンピュータシステムにおける、システムコールによりブロックデバイスへのデータ書き込み動作を示すフローチャートである。アプリケーションプロセス部２１からカーネル部２２へのシステムコールによりブロックデバイス１２にデータを書き込む場合の動作について詳細に説明する。
【００３９】
アプリケーションプロセス部２１は、ユーザ空間上のメモリに格納されたデータのブロックデバイス１２への書き込み要求が発生すると、処理装置１１のＯＳ（カーネル）が提供しているＷｒｉｔｅシステムコマンドを発行する（ステップ１０１）。Ｗｒｉｔｅシステムコマンドは、カーネル部２２に対してデータの書き込みを要求するシステムコールである。その際、アプリケーションプロセス部２１は、システムコマンドを発行するとき、そのコマンドによる書き込みの優先度を指定する優先度情報をカーネル部２２に通知する。
【００４０】
なお、優先度情報の設定方法としては、上述のようにシステムコマンド発行時にシステムコマンドとともに設定する方法ではなく、アプリケーションプロセスの種別毎にカーネル部２２に予め優先度情報を設定しておく方法を採ってもよい。例えばリアルタイム処理を重視するアプリケーションプロセスによるアクセスは高い優先度を設定することが考えられる。
【００４１】
また、このアプリケーションプロセスの種別毎の優先度は最初からシステムで固定的に決めておいてもよく、またユーザからのコマンド入力によって設定することにしてもよい。これにより優先度の設定や変更を柔軟に行うことができるようになる。コマンド入力による設定を可能にするにはユーザとのインタフェースとして優先度情報を設定するためのコマンドを用意しておけばよい。
【００４２】
ここでは優先度情報としては、例えば、最も高い、中程度、最も低いというように優先度を分類して指定してもよい。また優先度を階層化して設定することにしてもよい。例えば、優先度に応じた優先度クラスを設定し、更に優先度クラスの中で優先度を設定するようにしてもよい。
【００４３】
図５は、優先度クラスの設定例を示す表である。図５の例では、「優先度大」、「優先度中」、「優先度小」という３段階の優先度クラスが示されている。「優先度大」は、最も優先度の高いクラスである。リアルタイム性の高いアクセス要求に設定され、設定された通りの優先度で動作する。「優先度中」は、Ｉ／Ｏの帯域幅をベストエフォートで決定するクラスである。優先度が指定されていない場合にデフォルトとして用いてもよい。「優先度小」は、最も優先度の低いクラスである。Ｉ／Ｏが他のプロセスで使用されていないときにだけＩ／Ｏ処理が行われる。
【００４４】
図４に戻り、バッファ書き込み部２２１は、アプリケーションプロセス部２１からＷｒｉｔｅシステムコールを受け付けると、アプリケーションプロセス部２１のユーザ空間上のメモリに格納されているデータをカーネル空間上のバッファ領域にコピーする（ステップ１０２）。データが書き込まれたカーネル空間上のバッファ領域にはｄｉｒｔｙフラグがアップされる。ｄｉｒｔｙフラグがアップされていることは、その領域がブロックデバイス１２への反映待ちであることを示している。
【００４５】
次にリクエスト生成部２２２は、カーネル空間内のバッファ領域に書き込まれたデータをブロックデバイス１２へ書き込むためのリクエストを生成する（ステップ１０３）。ブロックデバイス１２へ書き込むべきデータの存在するカーネル空間上のバッファ領域はｄｉｒｔｙページと呼ばれる。カーネル空間上のバッファ領域に書き込まれたｄｉｒｔｙページの内容をもとに、バッファヘッド構造体、ブロックＩ／Ｏ構造体、リクエスト構造体を生成する。
【００４６】
１つのリクエストに複数のブロックＩ／Ｏのアクセスをマージすることができる。既存のリクエストに新たなブロックＩ／Ｏのアクセスをマージする処理をマージ処理という。あらたなリクエストを生成する処理をリクエスト生成処理という。リクエスト構造体の生成処理では、リクエスト生成部２２２はリクエストのマージ処理の呼出し、またはリクエスト生成処理の呼出しを行う。
【００４７】
リクエストのマージ処理では、ブロックＩ／Ｏ構造体を既存のリクエストキュー（カーネル空間上のキュー）内に存在するリクエスト内に登録する。また、マージ処理を行わないブロックＩ／Ｏ構造体についてはリクエスト生成処理により新規にリクエスト構造体を生成する。
【００４８】
リクエスト構造体の生成は、生成時に登録されている既存のリクエストの数（キュー長）により制限される。ただし、本実施形態では優先度の高いアクセス要求のリクエストの生成については、キュー長が制限値より長くてもリクエストの生成を許可する。例えば、キュー長が制限値の１．５倍であっても優先度の高いアクセス要求についてはリクエストの生成を許可することにしてもよい。これにより優先処理が実現できる。
【００４９】
また、マージ処理において、マージしようとするブロックＩ／Ｏ構造体の優先度が、既にリクエストキュー内に存在しているリクエストの優先度より高い場合がある。優先度の高いブロックＩ／Ｏ構造体を優先度の低いリクエストにマージすると、マージしたブロックＩ／Ｏ構造体のリクエストの処理が待たされることになる。そこで本実施形態では、マージの際に、既にリクエストキュー内に存在するリクエストの優先度を、マージするブロックＩ／Ｏ構造体の優先度に合わせるように高めて再登録してもよい。これによりマージしたリクエストの処理が本来の優先度よりも待たされることを防ぐことができる。
【００５０】
あるいは、優先度の高いブロックＩ／Ｏ構造体を、リクエストキューに存在するそれよりも優先度の低いリクエストにマージしないことにしてもよい。
【００５１】
また、各リクエストにマージするブロックＩ／Ｏの数に上限値を設定しておくことにしてもよい。リクエスト当たりの処理量を一定範囲内に調整し、リクエスト当たりの書き込み時間を一定範囲内に調整することができるので、待ち時間の短縮が可能となる。
【００５２】
次に、リクエストキュー登録部２２３は、リクエスト生成部２２２で生成されたリクエストをリクエストキューに登録する（ステップ１０４）。具体的には、リクエスト生成部２２２で生成されたリクエスト構造体をリクエストキュー構造体につなぎ、リスト化する。リストの先頭にあるリクエストはリクエストキュー構造体のメンバ変数により参照され、先頭のリクエスト以降のリクエストは１つ前のリクエストのメンバから参照される。
【００５３】
リクエストのリクエストキューへの登録では、リクエストキュー登録部２２３は、優先度の高いリクエストをリクエストキューの優先的位置に登録する。例えば、優先度の最も高いリクエストをリクエストキューの先頭に登録し、他のリクエストも優先度の高い順に登録する。
【００５４】
また、リクエストのリクエストキューへの登録が終わったとき、一般的には、割り込みの契機などで下位のデバイスドライバ部２４が起動しない限り、ブロックデバイス１２へのデータの書き込みは起動されない。それでは優先度の高いリクエストが処理されるまでに時間がかかることがある。
【００５５】
そこで本実施形態では、優先度の高いリクエストをリクエストキューに登録したら、すぐにディスパッチ処理を起動し、さらにソフトウェア割り込みを起動してリソースを開放する。ディスパッチ処理を起動してもリソースが解放されない限り次のリクエストが処理されず待ちが発生してしまうので、本実施形態ではソフトウェア割り込みを起動してリソース開放処理を迅速に行う。これにより、ディスパッチ処理によるデータのブロックデバイス１２への書き込みを迅速に行うことができる。
【００５６】
次に、リクエストディスパッチ部２２４は、リクエストキュー登録部２２３によりリクエストキューに登録されたリクエストをデバイスドライバ部２４のキューに移す（ステップ１０５）。リクエストキュー登録部２２３によりリクエストキューに登録されたリクエストは、上述したディスパッチ処理によりデバイスドライバ部２４のキューに移される。リクエストを受け取ったデバイスドライバ部２４は、リクエストキューの先頭から順にリクエストを処理する。
【００５７】
一般にディスパッチ処理では、ソート処理として、ブロックデバイス１２であるハードディスクのディスクヘッドの移動が少なくなるようにリクエストをセクタ順に並べ替える場合がある。その場合、リクエストをリクエストキューへ登録する段階では優先度を考慮した並び順でリクエストを登録しても、ディスパッチ処理でリクエストが並べ替えられる可能性がある。そこで本実施形態では、リクエストディスパッチ部２２４は、リクエストキュー内で優先度の逆転が起こらないように、リクエストキュー内のリクエストに対するソート処理を行う。例えば、リクエストキュー内のリクエストをそのままの順序でデバイスドライバ２４のキューに移すことにしてもよい。あるいは、優先度の逆転が起こらない範囲で、ハードディスクのディスクヘッドの移動が少なくなるようにリクエストの順序を入れ替えてもよい。
【００５８】
最後に、デバイスドライバ部２４は、デバイスドライバ部２４のキューに設定されているリクエストを順に処理してデータをブロックデバイス１２に書き込んでいく（ステップ１０６）。
【００５９】
本実施形態のコンピュータシステムのジャーナル処理におけるブロックデバイスへのデータ書き込み動作について説明する。ジャーナル処理は、ファイルシステムへ過去の変更を記録することでメタデータの整合性を維持し、ファイルシステム全体を保護する役割を持っている。ジャーナル処理部２３がこのジャーナル処理を実行する。なお、ジャーナル処理部２３は、その全体または一部のカーネルに含まれていてもよい。
【００６０】
ジャーナル処理部２３が実行するジャーナル処理は以下の４つの処理からなる。
（１）書き込み操作によってメモリ上のメタデータが変更される。
（２）メタデータの変更内容をジャーナルログ（ジャーナル情報）に書き込む。
（３）データとメタデータをブロックデバイスへ書き込む。
（４）書き込み操作完了で、ジャーナルログを解放する。
【００６１】
本実施形態では、ジャーナル情報には優先度が付与されている。ジャーナル情報の優先度は、例えば、データ書き込みのアクセス要求の優先度が高いほど、そのアクセス要求についてのジャーナル情報の優先度が高くなるように決めてもよい。ジャーナル処理部２３は、ジャーナル情報を優先度の高い順にブロックデバイス１２に反映させる。その際、ジャーナル処理部２３は、ジャーナル情報を優先度が高い順にリクエストキューに接続し、キュー上の優先度を逆転させないように、そのリクエストキューをデバイスドライバ２４のキューに移す。デバイスドライバ２４はキュー上の順序にしたがってジャーナル情報をブロックデバイス１２に反映させる。
【００６２】
ブロックデバイス１２のファイルシステムへのジャーナル情報の書き込みは、パーティション単位での整合性を保つため、パーティション毎にまとめて行われる。そのため同一パーティションに対する優先度の高い書き込みと優先度の低い書き込みとが存在する場合、優先度に関わらずジャーナル情報の書き込みが一括して処理される。そのため優先度の低い書き込みに伴うジャーナル情報の書き込みにより、優先度の高い書き込みのリアルタイム性が損なわれる可能性がある。そこで本実施形態では、優先度の高い書き込みが行われるパーティションと、優先度の低い書き込みが行われるパーティションとを予め分離しておく。これにより優先度の高いデータの書き込みに関するジャーナル情報の書き込みが本来の優先度より遅れて処理されるのを防止することができる。
【００６３】
また、ジャーナル情報のブロックデバイス１２への書き出し時、同一リクエスト内に優先度の低いデータブロックと優先度の高いデータブロックとが混在していると、優先度の低い書き込みによって、優先度の高い書き込みが待たされることがある。そうなると優先度の高い書き込みのリアルタイム性が損なわれる。そこで本実施形態では、リクエストの生成に際して、同一リクエスト内に優先度の低いデータブロックと、優先度の高いデータブロックが混在しないようにする。
【００６４】
さらに、ジャーナル情報のブロックデバイス１２への書き出しでは、整合性を保つために、過去に書き込みが要求されたジャーナル情報がブロックデバイス１２へ反映されるのを待つ。例えば、ジャーナル処理は必ず過去に書き込み要求を出したジャーナル情報がハードディスクに反映されるのを待ってから次のジャーナル情報を処理している。そのため、データ書き込みの要求が大量に発生すると、ジャーナル情報の反映を待つ時間が非常に長くなる。そこで本実施形態では、優先度の高いデータ書き込みに関するジャーナル情報を処理するとき、その時点での既に要求されている過去のジャーナル情報を速やかにブロックデバイス１２に反映させる。具体的には、優先度の高いジャーナル情報を処理するとき、ブロックデバイス１２へ反映されるのを待っているジャーナル情報の優先度を一時的に高くする。これにより、優先度の高いジャーナル情報を速やかにブロックデバイスに反映させ、待ち合わせ時間を短縮することができる。
【００６５】
また、ジャーナル情報のブロックデバイス１２への書き出し処理は、所定のタイミングが来たらパーティション単位で一括して行われる。書き出し処理の行われるタイミングは、例えば、定期的（例えば５秒）、現トランザクションの許容ブロック数がいっぱいになった時点、システムコールにより実行されるカーネル内の一連の処理の中で、などである。したがって、優先度の高い要求であっても、書き出し処理は所定のタイミングになるまで待ち合わせされ、すぐには開始されないことがある。
そこで、本実施形態では、優先度の高いジャーナル情報の書き出しを処理するとき、書き出し処理を明示的に起動し、即座に書き出しを開始できるようにする。
【００６６】
本実施形態によれば、優先度の高いアクセス要求を、既にリクエストキューに接続されている優先度の低いアクセス要求にマージするとき、既にリクエストキューに接続されているアクセス要求の優先度を、マージするアクセス要求の高い優先度に変更する。これにより、優先度の低いアクセス要求のために優先度の高いアクセス要求に待ち合わせが生じて処理が遅れることを防止できる。
【００６７】
また、本実施形態によれば、ファイルシステムの整合性のため、パーティション毎にまとめてブロックデバイスへの書き込み処理が実行されるジャーナル処理において、優先度に応じてパーティションを分離することにより、優先度の低いアクセス要求のために優先度の高いアクセス要求に待ち合わせが生じて処理が遅れることを防止できる。
【００６８】
また、本実施形態によれば、ジャーナル処理において、優先度の高いジャーナル情報の書き込みの要求が生じると、既に要求されている優先度の低いジャーナル処理の優先度を一時的に高くして処理の実行を促進する。その結果、優先度の低いアクセス要求のために優先度の高いアクセス要求に待ち合わせが生じて処理が遅れることを防止できる。
【００６９】
なお、上述した本実施形態では、高負荷時には、優先度の低いＩ／Ｏの処理量を制限し、優先度の高いＩ／Ｏの処理効率を上げることが好ましい。例えば、高負荷時には、優先度の低いＩ／Ｏ要求のリクエスト生成数を制限し、優先度の高いＩ／Ｏ要求のリクエスト生成が阻害されないようにしてもよい。また、高負荷時には、優先度の低いリクエストによって優先度の高いリクエストのディスパッチが阻害されないように、優先度の低いリクエストのディスパッチを制限するようにしてもよい。
【図面の簡単な説明】
【００７０】
【図１】本実施形態のコンピュータシステムの構成を示すブロック図である。
【図２】本実施形態の処理装置内での処理の概略を説明するための概念図である。
【図３】本実施形態の処理装置の構成を示すブロック図である。
【図４】本実施形態のコンピュータシステムのシステムコールによりブロックデバイスへのデータ書き込み動作を示すフローチャートである。
【図５】優先度クラスの設定例を示す表である。
【符号の説明】
【００７１】
１０    コンピュータシステム
１１    処理装置
１２    ブロックデバイス
２１    アプリケーションプロセス部
２２    カーネル部
２３    ジャーナル処理部
２４    デバイスドライバ部
２２１    バッファ書き込み部
２２２    リクエスト生成部
２２３    リクエストキュー登録部
２２４    リクエストディスパッチ部
【図１】
0004754531.tif 000002
【図２】
0004754531.tif 000003
【図３】
0004754531.tif 000004
【図４】
0004754531.tif 000005
【図５】
0004754531.tif 000006