以下は,本実施の形態の目次である。
[第1の実施の形態]
[本実施の形態のキャッシュ領域の動的割当の概略]
[専用領域獲得要求での専用キャッシュ領域の割当S15,S16]
[専用キャッシュ領域を利用するメモリアクセスS13]
[専用領域開放要求での専用キャッシュ領域の開放]
[本実施の形態のキャッシュ領域の動的割当処理の詳細]
[キャッシュ領域の割当判定の指標]
[実キャッシュヒット数]
[メモリアクセスの局所性]
[キャッシュ有効利用度,実キャッシュ有効利用度,キャッシュ攪乱力]
[専用領域獲得要求判定処理S16(1)]
[専用領域獲得要求判定処理S16(2)]
[定期割当見直し処理S18]
[定期割当見直し処理S18(1)]
[定期割当見直し処理S18(2)]
[定期割当見直し処理S18(3)]
[プロセス切り替え時のセクタID変換テーブルの入れ替え処理]
[第2の実施の形態]
以下,上記の目次にしたがって本実施の形態を説明する。
[第1の実施の形態]
まず,本願の発明を実施するための形態の前提として,第1の実施の形態を説明する。
図1は,本実施の形態におけるサーバの構成図である。サーバは,プロセッサユニット10と,メインメモリ16と,キーボードや表示装置などの入出力部17と,ハードディスクなどの大容量のストレージ18とを有する。プロセッサユニット10は,機械語命令を実行するCPU12と,キャッシュメモリとキャッシュメモリの制御部を有するキャッシュユニット13と,CPUからメインメモリ16へのアクセスの制御を行うバスインターフェース14とを有する。
ストレージ18には,オペレーションシステム(OS)と,コンパレータなどのミドルウエア(M-Ware)と,アプリケーションプログラム(APL)などが格納されている。これらのプログラムは,サーバ起動時にメインメモリ16内にロードされ,CPU12によって実行される。また,メインメモリ16は,アプリケーションプログラムAPLに含まれるプロセスの実行に必要なデータを記憶する。また,CPU12によるキャッシュメモリへのアクセス速度と比較すると,メインメモリ16へのアクセス速度は極端に遅い。一方,キャッシュメモリの容量は,メインメモリ16の容量に比較すると非常に小さい。
図2は,本実施の形態におけるサーバのハードウエアとソフトウエアの構成図である。ハードウエア1は,図1に示した構成を有し,図2には,特に,メインメモリ16と,キャッシュシステム13と,CPU12とが示されている。
キャッシュシステム13は,SRAMなど高速の半導体メモリなどで構成されるキャッシュメモリ130と,そのキャッシュメモリ130へアクセスするときに参照されるセクタID変換テーブル131,専用キャッシュ領域のサイズ設定などが行われるキャッシュセクタ情報設定部132,キャッシュメモリへアクセスするときに使用されるキャッシュアドレス変換部133などを有する。
本実施の形態において,CPU12は,通常の機械語命令に加えて,ローカルセクタIDが付加された機械語命令を実行する。後述するとおり,ローカルセクタIDは,その機械語命令が利用するキャッシュメモリの領域を識別するために使用される。
OS20は,アプリケーションプログラムの様々なプロセスにキャッシュメモリの領域(キャッシュセクタ)を動的に割り当てる場合に,セクタID変換テーブル131にローカルセクタIDに対して割り当てるキャッシュセクタIDをひもづける。そして,セクタID変換テーブル131は,キャッシュメモリにアクセスするときに参照され,機械語命令に付加されたローカルセクタIDをキャッシュメモリ内の使用領域を示すキャッシュセクタIDに変換する。このような方法により,OS20は,プログラムの様々なプロセスやプロセス内の処理に対して,専用キャッシュ領域を動的に割り当てて,そのプロセスやプロセス内の処理に割り当てた専用キャッシュ領域を使用させることができる。
キャッシュシステム13内のキャッシュセクタ情報設定部132には,キャッシュメモリの領域(キャッシュセクタ)に対してどの程度のキャッシュサイズを割り当てるかが設定される。後述するとおり,OS20は,専用キャッシュ領域を割り当てる場合に,そのキャッシュサイズをキャッシュセクタ情報設定部132に設定する。キャッシュアドレス変換部133は,CPU12によるメモリアクセスのアドレスをキャッシュメモリのアドレスに変換する。
図2のソフトウエア2は,オペレーションシステム(OS)20と,アプリケーションプログラムを機械語に変換するコンパイラなどのミドルウエア21と,複数のアプリケーションプログラムを有するアプリケーションプログラム群22とを有する。
OS内の関数制御管理部201は,アプリケーションプログラムの各プロセス内で呼び出される関数の管理を行う。一般に,関数制御管理部201は,関数が呼び出されるとその関数で利用されるデータをスタックデータとして管理し,また,関数が読み戻されるとスタックデータを開放する。
OS20は,マルチタスク(またはマルチプロセス)を切り替えながら各プロセスの処理を実行する。プロセス管理部202は,この各プロセスの切替制御を行う。本実施の形態では,特に,プロセス管理部202は,プロセスが切り替えられるたびに,キャッシュシステム13内のセクタID変換テーブル131を切り替える。これにより,各プロセスに対応して適切なキャッシュ領域の動的な割当を行うことができる。具体的には後述する。
割り込み処理プロセス203は,IO割り込みや内部プログラムからの例外的な割り込みなどが発生したときに,実行されるOS割り込み処理プログラムである。この割り込み処理プロセス内には,専用領域獲得要求と専用領域解放要求が含まれている。具体的には後述する。
本実施の形態では,OS12が,アプリケーションプログラムのプロセス内で発行される専用領域獲得要求に応答して,キャッシュメモリ内の例えば共用キャッシュ領域と,専用キャッシュ領域と,攪乱処理キャッシュ領域などの割当を,動的に実行する。この動的な割り当ては,専用領域獲得要求の対応する処理(以下対応処理)のメモリアクセスの特性や専用領域獲得要求時のキャッシュメモリのアクセス状況などに基づいて行われる。キャッシュ割当管理部204は,これらのキャッシュ領域の動的な割当に関する制御を行う。
上記の共用キャッシュ領域(または共用領域)とは,複数のプロセスや対応処理が共有して利用するキャッシュメモリの領域であり,あるプロセスや対応処理が共用キャッシュ領域を利用することで,他のプロセスや対応処理によって共用キャッシュ領域に記憶されたデータが追い出されることがある。
一方,専用キャッシュ領域(または専用領域)とは,ある専用領域獲得要求に対して割り当てられるキャッシュメモリの領域であり,その専用領域獲得要求の対象処理内のメモリアクセスは,それに割り当てられた専用キャッシュ領域を使用する。したがって,他のプロセスや対応処理のメモリアクセスにより専用キャッシュ領域内のデータが追い出されることはないし,専用キャッシュ領域へのアクセスにより,共用キャッシュ領域や他の専用キャッシュ領域のデータが追い出されることもない。
また,攪乱処理キャッシュ領域とは,対応する処理のキャッシュミスヒット率が非常に高い対応処理に対する専用領域獲得要求に対して割り当てられるキャッシュメモリの領域であり,一種の専用キャッシュ領域である。攪乱処理キャッシュ領域では,共用キャッシュ領域や他の専用キャッシュ領域から隔離して,そのキャッシュ制御が行われる。そのため,攪乱処理キャッシュ領域が割り当てられた対応処理の高いキャッシュミスヒット率により,共用キャッシュ領域や他の専用キャッシュ領域内のデータが追い出されてその後のキャッシュミスヒット率が高くなることが回避される。攪乱処理キャッシュ領域は,複数の専用領域獲得要求に割り当てられることがある。攪乱処理キャッシュ領域を設けることで,攪乱処理による高いキャッシュミスヒット率により共用キャッシュ領域や専用キャッシュ領域のデータが追い出されることが抑制され,キャッシュヒット率が極端に低下することが抑制される。
キャッシュ割当管理部204が実行する処理工程には,例えば,次のようなものがある。第1に,開発環境下において,各プロセスや専用領域獲得要求が対象とする対象処理などについて,メモリアクセス頻度や,専用キャッシュ領域を割り当てられた場合のキャッシュヒット率などのメモリアクセス特性の調査を行う特性調査工程と,第2に,プロセス切り替え時においてキャッシュシステム13内のセクタID変換テーブル131を入れ替える工程と,第3に,共用キャッシュ領域と,専用キャッシュ領域と,攪乱処理キャッシュ領域間のキャッシュ領域入れ替え判定工程と,第4に,キャッシュ領域入れ替え判定結果に基づくセクタID変換テーブルの更新及びキャッシュセクタ情報設定部132の割当キャッシュ領域のサイズ設定の更新工程などである。
ミドルウエア21のコンパイラは,ソースコードで記述されたアプリケーションプログラムを実行形式の機械語(オブジェクトコード)に変換する。このコンパイラは,一般的なコンパイル処理に加えて,各プロセスにおいて適宜発行される専用キャッシュ領域の割当を要求する専用領域獲得要求の機械語命令と,その割り当てられた専用領域を開放する専用領域開放要求の機械語命令を追加する。また,コンパイラは,発行する各専用領域獲得要求には,プロセス内でユニークなローカルセクタIDを付加する。そして,コンパイラは,獲得した専用キャッシュ領域を利用する機械語命令には,そのローカルセクタIDを付加する。これにより,専用領域獲得要求に対して,その対象処理で利用するキャッシュ領域に専用キャッシュ領域が動的に割り当てられ,キャッシュメモリ領域全体を有効に利用することができる。すなわち,後述するキャッシュ有効利用度や実キャッシュ有効利用度を高くすることができる。
アプリケーションプログラム(APL)22は,アプリケーションプログラムの実行形式である機械語にコンパイルされている。これにより,CPU12は,このアプリケーションプログラムの機械語を実行する。
[本実施の形態のキャッシュ領域の動的割当の概略]
図3は,本実施の形態におけるキャッシュ領域の動的割当の概略を示すフローチャート図である。まず,サーバにアプリケーションプログラムAPLをインストールした開発環境でシステムを稼働させる(S1)。まず,コンパイラをプロセッサ(CPU)に実行させて,アプリケーションプログラムAPLをコンパイルする(S2)。このコンパイル工程S2におけるキャッシュ領域の動的割当に関連する部分について以下説明する。
図4は,コンパイラ21がアプリケーションプログラムのソースコードを機械語にコンパイルする処理を示す図である。コンパイラは,アプリケーションプログラムのソースコードAPL_SCを,その実行形式である機械語(オブジェクトコード)APL_OCに変換する。一般的なコンパイラの機能は,オブジェクトコードを命令部とオペランドを有する機械語の命令に変換することである。
本実施の形態では,コンパイラは,さらに,アプリケーションプログラム内の複数のプロセス内に,キャッシュメモリの専用キャッシュ領域への割当を要求する専用領域獲得要求30と,それに対応する専用領域開放要求34とを適宜挿入する。この専用領域獲得要求30は,図4に示されるとおり,例えば,プロセスIDと,ローカルセクタIDと,専用領域獲得要求30の対象処理の優先度を有する機械語命令である。各プロセスにおいて,キャッシュ領域を占有して処理を行いたい部分で,この専用領域獲得要求30を発行してOS20に専用キャッシュ領域の割当を要求する。
プロセスIDは,OS20が管理している稼働プロセスPR1の識別情報である。ローカルセクタIDは,この専用領域獲得要求30の対象処理32を識別するための,プロセスPR1内におけるローカルな識別情報であり,割り当てられた専用キャッシュ領域を特定する識別情報である。
また,優先度は,対応処理32の優先度を示す値であり,例えば,0−7の8段階で表す。ただし,OS内部の処理を優先させる必要があるため,ユーザプログラムには例えば0−5までしか優先度が割り当てられないなどの制約をかけることが行われる。
一方,専用領域開放要求34は,これと対になる専用領域獲得要求30と同じプロセスIDとローカルセクタIDとを有する。これにより,OS20が割り当てた専用キャッシュ領域が開放され,その対応処理には共用キャッシュ領域が代わりに割り当てられる。
さらに,コンパイラは,専用領域獲得要求30と専用領域開放要求34との間の命令に,その命令が利用する専用キャッシュ領域を識別するローカルセクタIDを付与して,ローカルセクタID付き命令を生成する。したがって,専用領域獲得要求が対象とする対象処理32内の命令は,ローカルセクタIDに基づいて,割り当てられた専用キャッシュ領域を利用してメモリアクセスを実行する。ただし,専用領域獲得要求30と専用領域開放要求34との間の全ての命令が,専用キャッシュ領域を利用する必要があるわけではない。そのような命令には,ローカルセクタIDを例えば「0」に指定することで,専用キャッシュ領域ではなく通常の命令と同様に共用キャッシュ領域を利用してメモリアクセスを実行させることができる。
プロセスPR1内には,上記の専用領域獲得要求30が複数発行されることがある。そして,専用領域獲得要求30に対応する専用領域解放要求34は,それぞれ,専用領域を開放するに適切な位置で発行される。
図3に戻り,開発環境下で,専用領域獲得要求の特性調査を実行する(S3)。本実施の形態では,キャッシュメモリ内の一部の領域を専用キャッシュ領域として特定のプロセスまたはプロセス内の一部の処理に動的に割り当てる。動的に割り当てる目的は,適切に専用キャッシュ領域を割り当てることによりキャッシュメモリの単位時間当たりのキャッシュヒット数の総計を向上させ,キャッシュミスヒット数をできるだけ抑制することにある。そのため,専用領域獲得要求に対して専用キャッシュ領域を割り当てるべきか否かを判断するための情報が必要になる。
各プロセスの専用領域獲得要求が対象とする処理には,様々なタイプがある。例えば,次のようなものである。
「プロセス全体が専用領域獲得要求の対象処理であり,そのプロセス全体で利用する専用キャッシュ領域を要求するもの」
「専用領域獲得要求の対象処理がプロセス内の一部の処理であるもの」
「専用領域獲得要求の対象処理がメモリの広範囲にアクセスしてキャッシュ領域内のデータを追い出して攪乱するもの」
「専用領域獲得要求の対象処理がキャッシュ領域にデータを固定的に記憶させ,キャッシュミスヒットがほとんど発生しないもの」
「対象処理が超短時間で終了するもの」
「対象処理が専用キャッシュ領域利用時と共用キャッシュ領域利用時とでキャッシュヒット率が大きく異なるもの」
これらを事前に調査しておくことで,本番稼働時において専用領域獲得要求に対して専用キャッシュ領域を割り当てるべきかを適切に判断することができる。
そこで,工程S3において,開発環境下でコンパイルされた機械語のアプリケーションプログラム内の専用領域獲得要求に専用キャッシュ領域の割当を許可した場合に,どの程度キャッシュヒット率が向上するかの特性調査を実行する。具体的には,特性調査対象の専用領域獲得要求だけに専用キャッシュ領域を割り当て,且つ,その専用キャッシュ領域のサイズを0から徐々に大きくしながら,それぞれの場合の(1)短時間当たりのメモリアクセス回数(メモリアクセス頻度)と,(2)専用キャッシュ領域内のキャッシュヒット率とを取得する。
図5は,上記の特性調査で得られたキャッシュサイズ対キャッシュヒット率の特性例である。横軸のキャッシュサイズxを0から増大させた場合のそれぞれのキャッシュサイズでのキャッシュヒット率H(x)が縦軸に対応されている。一般的に,このキャッシュサイズ対キャッシュヒット率の特性は,キャッシュサイズが小さい範囲ではキャッシュサイズの増加はそれほどキャッシュヒット率の上昇に貢献しないが,あるキャッシュサイズの範囲ではキャッシュサイズの増加でキャッシュヒット率が急激に上昇し,そして,あるキャッシュサイズより大きいサイズではキャッシュヒット率の上昇はあまりない。
したがって,図5中の原点から延びる直線(一点鎖線)がキャッシュヒット率特性H(x)に接する点のキャッシュサイズx1が,キャッシュサイズの増大がキャッシュヒット率の向上に最も寄与する基準点となる。
なお,図5のキャッシュヒット率を調査する段階で,同時に単位時間当たりのメモリアクセス回数(メモリアクセス頻度)とキャッシュヒット数とキャッシュミスヒット数が取得される。
図20は,図3の工程S2とS3のサーバシステム内での処理を示す図である。また,図21は,図20のサーバシステム内の処理に対応するフローチャート図である。これらの図を参照して,図3の工程S2,S3の処理を説明する。
まず,サーバシステムの入力部からアプリケーションプログラムのソースコードが入力される(S201)。そして,コンパイラ21が,このアプリケーションプログラムのソースコードをコンパイルしてオブジェクトコード(機械語)に変換する(S202)。この機械語命令への変換については,図4で説明したとおりである。
次に,開発環境下でサーバシステムの入力部からシステム稼働が起動される(S301)。これに応答して,OS20内のプロセス管理部202がプロセス立ち上げ処理を実施してシステム稼働処理を行う(S302)。
この開発環境下でのプロセス稼働中に,OS20内のキャッシュ割当管理部204は,特性調査対象のアプリケーションプログラムに含まれている各専用領域獲得要求に対して,その要求を許可し,割り当てた専用キャッシュ領域を使用しながら命令を実行して,メモリアクセス頻度とキャッシュヒット率を計測する。この場合,キャッシュ割当管理部204は,専用キャッシュ領域のサイズを0から最大値まで変化させながらそれぞれのサイズでのメモリアクセス頻度とキャッシュヒット率を計測する(S303)。これにより,図5に示した特性グラフを生成する。
特性調査の開始に当たり,キャッシュ割当管理部204は,特性調査対象の専用領域獲得要求に対応したプロセスのセクタID変換テーブル131を読み出して,調査対象のローカルセクタIDに,割り当てる専用キャッシュ領域のキャッシュセクタIDを対応付け,その専用キャッシュ領域に設定したサイズを割り当てる(S304)。また,調査対象以外の専用領域獲得要求に対応したローカルセクタIDに対しては,共用キャッシュ領域を示すキャッシュセクタID=0を対応付ける。その結果,キャッシュメモリ130には,調査対象の処理のローカルセクタIDに対してのみ指定されたサイズの専用キャッシュ領域が生成される(S305)。
プロセス管理部202は,特性調査の開始の準備が整ったところで,調査対象プロセスの起動を行い(S306),アプリケーションプログラム22内の調査対象プロセスが実行される(S307)。この調査対象プロセスの実行中は,割り当てられた専用キャッシュ領域を使用してメモリアクセスが実行される。
全プロセスの全専用領域獲得要求の特性調査が終了するまで,処理S303-S307が繰り返し実行される。そして,全てが終了すると,キャッシュ割当管理部204は,調査対象プロセスのメモリアクセス頻度とキャッシュヒット率を記録して,特性調査を終了する(S308)。
図3に戻り,本番環境下でシステムを稼働すると(S10),次のような処理が実行される。OS12は,バックグランドで共用キャッシュ領域と専用領域獲得要求で獲得された専用キャッシュ領域のキャッシュヒット率を調査する(S11)。この調査で,共用キャッシュ領域と専用キャッシュ領域でのメモリアクセス頻度なども取得される。具体的には,各領域へのアクセス関数のカウンタや,キャッシュヒット回数のカウンタなどを利用して,調査する。
OS20は,上記の調査結果に基づいて,共用キャッシュ領域と専用キャッシュ領域の適正比率や,専用領域獲得要求毎の実キャッシュ有効利用度などを算出する。共用・専用領域の適正比率は,後で詳述するが,両領域へのメモリアクセス数の比率により算出される。また,実キャッシュ有効利用度は,専用キャッシュ領域を利用している場合と共用キャッシュ領域を利用している場合のキャッシュヒット率の差分に,メモリアクセス頻度を乗算し,さらに,優先度を乗算して求められる。後に詳述する。
そして,CPU12は,図4で説明したローカルセクタID付きの命令を実行する(S13)。この命令の実行については後で詳述する。
さらに,OS20は,キャッシュ領域の動的割当処理を行う(S14)。キャッシュメモリ内の領域の動的割当処理では,第1に,専用領域獲得要求が発行されたときに(S15),OS20内のキャッシュ割当管理部204が専用領域獲得要求について専用キャッシュ領域を割り当てるべきか否かの判定処理を行い,専用キャッシュ領域か,共用キャッシュ領域か,または攪乱処理キャッシュ領域かを割り当てる(S16)。
第2に,定期的な割当見直しタイミングで(S17),OS20内のキャッシュ割当管理部204が,定期割当見直し処理を実行する(S18)。この定期割当見直し処理には,(1)割当済み専用領域獲得要求の割当済み専用キャッシュ領域と未割当専用領域獲得要求が要求する未割当専用キャッシュ領域とを入れ替えるべきか否かの判定処理,(2)共用キャッシュ領域の一部を未割当専用領域獲得要求に専用キャッシュ領域として割り当てるべきか否かの判定処理,(3)その逆の,割当済み専用キャッシュ領域を開放して共用キャッシュ領域に変更すべきか否かの判定処理などが含まれる。そして,定期割当見直し処理S18では,キャッシュ割当管理部204が,判定結果に応じて,専用キャッシュ領域の置き換えや,専用キャッシュ領域の割当や開放を行う。
第3に,専用領域開放要求が発行されたときに(S19),キャッシュ割当管理部204が,要求された専用キャッシュ領域を開放して共用キャッシュ領域の一部にする開放要求処理を行う(S20)。
上記の工程S11-S20が,システム稼働が終了するまで繰り返される。
図6は,キャッシュ領域の構成と専用領域獲得要求についての割当について示す図である。キャッシュメモリ130は,共用キャッシュ領域130_1と,動的割当領域である専用キャッシュ領域130_2とを有する。専用キャッシュ領域130_2には,専用領域獲得要求に対して割り当てられる複数の専用キャッシュ領域と攪乱処理キャッシュ領域とが含まれる。つまり,攪乱処理キャッシュ領域は,一種の専用キャッシュ領域である。
キャッシュメモリ130は,共用キャッシュ領域と専用キャッシュ領域にセクタ分割されていて,各領域にはセクタIDが0から順に割り振られている。共用キャッシュ領域はセクタID=0である。共用キャッシュ領域は,複数のプロセスやプロセス内の対象処理が共通で使用するキャッシュ領域である。一方,専用キャッシュ領域は,判定により許可されたサイズを有し,割り当てられた専用領域獲得要求の対象プロセスが占有して使用するキャッシュ領域である。さらに,専用キャッシュ領域の一形態である攪乱処理キャッシュ領域は,専用領域獲得要求の対象処理のメモリアクセスが広範囲のアドレスに対して行われ,共用キャッシュ領域に割り当てるとその共用キャッシュ領域内の他のデータを追い出して攪乱してしまう場合に割り当てられる。したがって,複数の専用領域獲得要求に対して攪乱処理キャッシュ領域が割り当てられる場合がある。
専用領域獲得要求は,前述したとおり,アプリケーションプログラムAPL内のプロセス毎にあるいはプロセス内の対象処理毎に発行され,判定結果に応じて,専用領域獲得要求に専用キャッシュ領域が割り当てられる。したがって,必ずしも専用キャッシュ領域が割り当てられるとは限らず,共用キャッシュ領域が割り当てられて未割当専用領域獲得要求として専用キャッシュ領域の割当まで待たされる場合がある。キャッシュメモリ130は,サイズや分割可能数に上限があるからである。
図6に示した例では,プロセス1の専用領域獲得要求要求0,プロセス2の専用領域獲得要求0,3は,判定の結果共用キャッシュ領域130_1が割り当てられている。また,プロセス2の専用領域獲得要求1,2,4には,それぞれ専用キャッシュ領域であるセクタID=1,2,3が割り当てられている。また,プロセス3の専用領域獲得要求0に対しては,判定の結果,攪乱処理キャッシュ領域であるセクタID=4が割り当てられている。
図22は,図3の工程S13,S16,S19のサーバシステム内での処理を示す図である。また,図23は,図22のサーバシステム内の処理に対応するフローチャート図である。これらの図を参照して,専用領域獲得要求での専用キャッシュ領域の割当と,その専用キャッシュ領域を利用するメモリアクセスと,専用領域開放要求での専用キャッシュ領域の開放とを説明する。
[専用領域獲得要求での専用キャッシュ領域の割当S15,S16]
まず,アプリケーションプログラム22のプロセス内で,専用領域獲得要求が発行される(S400)。この専用領域獲得要求にはローカルセクタIDが付与されている。これに応答して,OS20内のキャッシュ割当管理部204は,専用キャッシュ領域の割当を許可するか否かの判定を実行する(S401)。この判定処理については,後述する。そして,割当が許可されると,キャッシュ割当管理部204は,割り当てる専用キャッシュ領域のキャッシュサイズをキャッシュセクタ情報設定部132に設定するとともに,キャッシュシステム13内のセクタID変換テーブル131に,ローカルセクタIDに対応するキャッシュセクタIDの欄に,割り当てた領域のセクタIDを設定する(S402)。
図7は,変換テーブルの一例を示す図である。図7中には,プロセスID=2,ローカルセクタID=2の専用領域獲得要求30に対して,プロセスID=2の変換テーブル131内のローカルセクタID=2に対してキャッシュセクタID=2の専用キャッシュ領域のセクタIDが記入されている。
[専用キャッシュ領域を利用するメモリアクセスS13]
アプリケーションプログラム22のプロセスが実行される場合,使用する専用キャッシュ領域を識別するローカルセクタID付きの命令(機械語命令)が発行される(S403)。そして,CPU12は,そのローカルセクタID付きの命令を解釈して実行する(S403-1)。この実行に際し,CPU12は,セクタID変換テーブル131を参照してローカルセクタIDに対応するキャッシュセクタIDを取得する(S403-2)。すなわち,図7中にS403-2として示す通りである。
そして,キャッシュアドレス変換部133が,メモリアクセスアドレスをキャッシュメモリ内のアドレスに変換して,キャッシュメモリ130内のキャッシュセクタID=2の専用領域獲得要求キャッシュ領域にキャッシュアクセスする(S403-3)。ここで,キャッシュミスヒットが発生すると,バスインターフェース14を介してメインメモリ16にアクセスする(S403-4)。キャッシュヒットの場合は,専用キャッシュ領域内のデータが読み出されまたは専用キャッシュ領域にデータが書き込まれる。
以上のように,専用キャッシュ領域が割り当てられている場合は,プロセス内の命令が割り当てられている専用キャッシュ領域を使用してメモリアクセスする。
[専用領域開放要求での専用キャッシュ領域の開放]
次に,アプリケーションプログラム22のプロセスで,専用領域開放要求が発行されると(S404),キャッシュ割当管理部204は,専用キャッシュ領域の開放処理を実行する(S405)。具体的には,セクタID変換テーブル内のローカルセクタIDに対応するキャッシュセクタIDを共用キャッシュ領域のID=0に変更する(S406)。すなわち,図7中にS406として示す通りである。また,キャッシュセクタ情報設定部132内の解放するキャッシュセクタIDのサイズが0に変更される。
[本実施の形態のキャッシュ領域の動的割当処理の詳細]
以下,キャッシュ領域の動的割当処理の詳細について説明する。動的割当処理は,図3で示されるとおり,専用領域獲得要求に対する判定処理S16と,定期的な割当見直しタイミングでの判定処理S18とがある。それらについて順に説明する前に,キャッシュ領域の割当判定の指標を説明する。
[キャッシュ領域の割当判定の指標]
[実キャッシュヒット数]
キャッシュメモリを共用キャッシュ領域と複数の専用キャッシュ領域(攪乱処理キャッシュ領域を含む)とに分割する目的は,キャッシュメモリ全体の単位時間当たりのキャッシュヒット数を最大化することにある。この単位時間当たりのキャッシュヒット数は,次の式により求めることができる。
単位時間当たりのキャッシュヒット数=キャッシュヒット率*メモリアクセス頻度 (1)
したがって,専用領域獲得要求に専用キャッシュ領域を割り当てた場合に,専用領域獲得要求の対象処理のキャッシュヒット数が高ければ,その要求に専用キャッシュ領域を割り当てることで全体のキャッシュヒット数を高めることができる。そして,キャッシュヒット率が高いがメモリアクセス頻度が低い対象処理に対して専用キャッシュ領域を割り当てるよりも,キャッシュヒット率が多少低くてもメモリアクセス頻度が高い対象処理に専用キャッシュ領域を割り当てた方が,式(1)を大きくすることができ,メインメモリにアクセスする時間を短縮する回数が多くなり,全体としてメモリアクセスが短縮できる。
一方,アプリケーションプログラムの処理には優先度があり,特定のアプリケーションプログラムや特定のプロセスを特に高速化したいなどの要求がある。この要求が高いほど処理の優先度が高い。したがって,実際には以下の実キャッシュヒット数を最大化することがキャッシュ領域の動的割当の目的になる。
実キャッシュヒット数=Σ(処理のキャッシュヒット数*処理優先度) (2)
すなわち,上記式(2)において,Σは,専用領域獲得要求の対象とする処理のキャッシュヒット数にその処理の優先度を乗算したものを,全処理分累積することを意味する。
[メモリアクセスの局所性]
次に,専用領域獲得要求の対象の処理には,メモリアクセスの局所性が高いものと低いものがある。メモリアクセスの局所性は,メモリアクセスのアドレスの領域が狭い範囲に集中していれば局所性は高く,広い範囲に分散していれば局所性は低くなる。対象処理のメモリアクセスの局所性が低いと,キャッシュヒット率は低くなる。ただし,キャッシュサイズを大きくすることで局所性が高まり,キャッシュヒット率が高くなる場合がある。
図5に示されたキャッシュサイズに対するキャッシュヒット率の特性曲線の一例をみれば,上記の局所性とキャッシュサイズとの関係が理解できる。この例では,キャッシュサイズが小さい場合は,メモリアクセスのアドレス範囲に比較してキャッシュサイズが小さいため,キャッシュヒット率は向上していない。しかし,キャッシュサイズを増大させることで,メモリアクセスのアドレス範囲に比較してキャッシュサイズが追いつき,キャッシュヒット率が向上している。そして,キャッシュサイズを基準値xよりさらに大きくしてもキャッシュヒット率は向上していない。
さらに,メモリアクセスの局所性が極端に高い場合は,キャッシュサイズを増大しても,キャッシュヒット率を向上させることができず,キャッシュミスヒット率が高止まりする。このようなキャッシュミスヒット率が高い処理を,共用キャッシュ領域に割り当てると,キャッシュミスヒットが頻発して他の処理のデータを追い出してしまうことになる。このような処理を攪乱処理と称する。
したがって,このような攪乱処理に対しては,共用キャッシュ領域を割り当てるよりも専用のキャッシュ領域を割り当てることが,共有キャッシュ領域のキャッシュヒット率向上に有益である。ただし,このような攪乱処理は,専用キャッシュ領域を割り当てられたとしてもキャッシュミスヒットを頻発するので,式(2)の実キャッシュヒット率は上がらない。そこで,攪乱処理には,攪乱処理用のキャッシュ領域を割り当て,しかも,複数の攪乱処理に,共通の攪乱処理用キャッシュ領域を割り当てて,それらの処理を他のキャッシュ領域から隔離することが有効である。
[キャッシュ有効利用度,実キャッシュ有効利用度,キャッシュ攪乱力]
次に,専用領域獲得要求に対して専用のキャッシュ領域を割り当てるか否かの判断の指標として,キャッシュ有効利用度,実キャッシュ有効利用度,キャッシュ攪乱力について説明する。
キャッシュ有効利用度は,専用のキャッシュ領域を割り当てた場合のキャッシュヒット数よりも,共用キャッシュ領域を割り当てた場合のキャッシュヒット数がどのくらい向上するかを示す度合いである。すなわち,キャッシュ有効利用度は次の式(3)のとおりである。
キャッシュ有効利用度={(専用領域時キャッシュヒット率−共用領域時キャッシュヒット率)*メモリアクセス頻度}/使用専用キャッシュ領域のサイズ (3)
つまり,キャッシュ有効利用度(度合い)とは,共用キャッシュ領域を割り当てた場合よりも専用キャッシュ領域を割り当てた場合のほうがどれくらいキャッシュヒット率が増大するかを示すキャッシュヒット率の差分に,メモリアクセス頻度(単位時間当たりのメモリアクセス数)を乗算したキャッシュヒット数の増大を,単位キャッシュ領域当たりで示す指標である。
この場合,専用領域時キャッシュヒット率とメモリアクセス頻度は,事前に行う特性調査結果から取得することができ,共用領域時キャッシュヒット率は,本番稼働時に取得することができる。また,既に専用キャッシュ領域が割り当てられている場合は,その割当済み専用キャッシュ領域について,キャッシュヒット率を取得することが可能である。したがって,割当済み専用キャッシュ領域については,割り当てられたキャッシュサイズに対する実際のキャッシュヒット率を取得し,事前の特性調査での同じキャッシュサイズに対するキャッシュヒット率との比率を,事前特性調査で得た全キャッシュサイズに対するキャッシュヒット率に乗算して,推定キャッシュヒット率を求めることができる。この推定キャッシュヒット率については,後で再度詳述する。
次に,アプリケーションプログラムのプロセスには前述した優先度が存在し,優先度が高い処理ほど,優先的にキャッシュヒット数を向上させることが必要になる。そこで,以下の式(4)に示すとおり,上記のキャッシュ有効利用度に,対応する処理の優先度を乗算することで,実キャッシュ有効利用度を算出することができる。
実キャッシュ有効利用度=キャッシュ有効利用度*対応処理優先度 (4)
式(3)(4)において,専用領域時キャッシュヒット率を図5のH(x)に,共用領域時キャッシュヒット率をBASEHに,メモリアクセス頻度をMACCESSに,使用専用キャッシュ領域のサイズをxに,対応処理優先度をPRIORITYに置き換えると,式(4)の実キャッシュ有効利用度は,次の通りになる。
実キャッシュ有効利用度=[{H(x)−BASEH}*MACCESS*PRIORITY]/x (4)
この実キャッシュ有効利用度についても,割当済み専用キャッシュ領域に対しては上記の推定キャッシュヒット率を利用することも可能である。
式(3)のキャッシュ有効利用度と,それに優先度を乗じた式(4)の実キャッシュ有効利用度とは,主に,専用領域獲得要求に対して専用領域を割り当てるべきか否かの判断指標として利用される。
次に,前述のメモリアクセスの局所性が極端に高いほど,他の処理と同じ共用キャッシュ領域に割り当てられると他の処理のデータを追い出す力が強くなる。この追い出す力をキャッシュ攪乱力とする。このキャッシュ攪乱力は,以下の式(5)に示したとおり,キャッシュミスヒット率(1−キャッシュヒット率)にメモリアクセス頻度を乗算して算出することができる。
キャッシュ攪乱力=(1−キャッシュヒット率)*メモリアクセス頻度 (5)
キャッシュ攪乱力は,キャッシュ有効利用度とは相反する値となる。そして,このキャッシュ攪乱力は,開発環境下での特性調査でキャッシュヒット率とメモリアクセス頻度が取得されるので,予め処理毎にまたはプロセス毎に算出しておくことができる。このキャッシュ攪乱力がある基準値以上の処理は,キャッシュ攪乱処理と見なして,共用キャッシュ領域や他の専用キャッシュ領域から隔離して,攪乱処理キャッシュ領域に割り当てることで,他の処理のキャッシュヒット率の低下を抑制することができる。
キャッシュ攪乱力は,専用領域獲得要求に対して,専用領域を割り当てるべきか判定するときに,攪乱処理用の専用領域に割り当てるべきか否かの判断指標として利用される。
[専用領域獲得要求判定処理S16(1)]
図8は,図3に示した専用領域獲得要求に対する判定処理S16について第1の例のフローチャート図である。この第1の判定処理では,OS20内のキャッシュ割当管理部204が,専用領域獲得要求の対象処理のキャッシュ攪乱力(式(5))を算出して判定し(S30),キャッシュ攪乱力がある第1の基準値より高い場合は(S31のYES),その専用領域獲得要求に攪乱処理キャッシュ領域を割り当てる(S32)。
さらに,キャッシュ割当管理部204は,キャッシュ攪乱力が第1の基準値以下の場合は(S31のNO),その専用領域獲得要求の対象処理の実キャッシュ有効利用度(式(4))を算出して判定し(S33),実キャッシュ有効利用度が第2の基準値より高い場合は(S34のYES),その専用領域獲得要求に専用キャッシュ領域を割り当て(S35),実キャッシュ有効利用度が第2の基準値以下の場合は(S34のNO),その専用領域獲得要求に共用キャッシュ領域を割り当てる(S36)。
図9は,専用領域獲得要求に専用キャッシュ領域を割り当てる場合を説明する図である。図9中(1)のキャッシュメモリ130の分割状態において,専用領域獲得要求30が発行されたとする。この場合,専用領域獲得要求の対象処理の実キャッシュ有効度を式(4)に基づいて算出する。そして,その実キャッシュ有効度が第2の基準値より高ければ,図9中(2)のキャッシュメモリ130のように,その専用領域獲得要求30に対してキャッシュセクタID=2の専用キャッシュ領域を割り当てる。その結果,この割り当てられた専用キャッシュ領域は,それ以降,割当済み専用領域と称し,割り当てられた専用領域獲得要求は割当済み専用領域獲得要求と称することとする。
さらに,割り当てる専用キャッシュ領域のサイズについて説明する。図5に示したとおり,処理のキャッシュヒット率は,キャッシュサイズを増大することで急激に上昇し,ある基準キャッシュサイズx1で飽和する。そこで,実キャッシュ有効利用度は,図5のキャッシュサイズ対キャッシュヒット率の特性曲線の基準キャッシュサイズx1でのキャッシュヒット率を元に算出することが望ましい。そして,そのようにして算出した実キャッシュ有効利用度が第2の基準値より大きい場合には,その専用領域獲得要求に対して割り当てる専用キャッシュ領域のサイズは,基準キャッシュサイズx1に設定するのが望ましい。
このように,専用キャッシュ領域のキャッシュサイズを自動的に基準キャッシュサイズx1に割り当てるようにすることで,最適なキャッシュサイズを割り当てることが可能になる。
図9によれば,実キャッシュ有効利用度が第2の基準値より高い専用領域獲得要求に次々と専用キャッシュ領域を割り当てていくと,キャッシュメモリ130が専用キャッシュ領域であふれることになる。そこで,後述する定期割当見直し処理(3)により,共用キャッシュ領域と専用キャッシュ領域とのバランスを適正化することで,キャッシュメモリが専用キャッシュ領域であふれることを回避することができる。
[専用領域獲得要求判定処理S16(2)]
図10は,図3に示した専用領域獲得要求に対する判定処理S16について第2の例のフローチャート図である。この第2の判定処理では,OS20内のキャッシュ割当管理部204が,専用領域獲得要求の対象処理のキャッシュ攪乱力を算出して第1の基準値より大きい場合に攪乱処理キャッシュ領域を割り当てる(S30,S31,S32)ことは同じである。そして,キャッシュ割当管理部204は,キャッシュ攪乱力が第1の基準値以下の場合に,専用領域獲得要求の対象処理と割当済専用領域の実キャッシュ有効利用度(望ましくは実キャッシュ有効利用値の増加率)を比較判定して(S37),入れ替えることがより効率的である場合は(S37のYES),専用領域獲得要求に専用領域を割り当て,割当済専用領域を開放して,両者を入れ替える(S39)。逆に,入れ替えるのが効率的ではない場合は(S37のNO),専用領域獲得要求に共用キャッシュ領域を割り当てる(S40)。
図11は,専用領域獲得要求と割当済専用領域獲得要求との間で専用キャッシュ領域を入れ替える処理を説明する図である。図11中(1)のキャッシュメモリ130のような分割状態において,専用領域獲得要求30が発行されると,その対象処理のキャッシュ攪乱力が第1の基準値以下の場合,割当済み専用領域と入れ替えて新たな専用領域を割り当てることで,キャッシュメモリ全体のキャッシュヒット数を増大できるか否かを判定する。
図11に示した例では,キャッシュセクタID=2の割当済専用領域の実キャッシュ有効利用度よりも,専用領域獲得要求の対象処理の実キャッシュ有効利用度のほうが,入れ替えに要するオーバーヘッド値を超えて高いため,割当済専用領域を開放して共用キャッシュ領域に移動し,代わりに,専用領域獲得要求に新たな専用キャッシュ領域を割り当てている。
そこで,上記の比較判定S37について説明する。
まず,専用キャッシュ領域が既に割り当てられている場合と,未だ割り当てられていない場合とでキャッシュヒット率の取り扱いを異ならせる。割当済専用領域に対しては,推定キャッシュヒット率を採用し,未割当専用領域に対しては,事前調査で取得したキャッシュヒット率を採用する。
図12は,推定キャッシュヒット率を示す図である。図中,横軸はキャッシュサイズ,縦軸はキャッシュヒット率である。実線のH(x)は,事前調査で取得したキャッシュサイズに対するキャッシュヒット率の特性曲線である。それに対して,割当済み専用キャッシュ領域の場合は,割り当てられたキャッシュサイズx2に対するキャッシュヒット率を,キャッシュシステム内のカウンタなどから取得することができる。
その場合は,キャッシュサイズx2での現在のキャッシュヒット率SH(x2)と,事前調査時のキャッシュヒット率H(x2)との比率SH(x2)/H(x2)を,事前調査時の全キャッシュサイズに対するキャッシュヒット率H(x)に乗じることで,推定キャッシュヒット率SH(x)を得ることができる。即ち,次の式(6)の通りである。
SH(x)={SH(x2)/H(x2)}*H(x) (6)
この推定キャッシュヒット率SH(x)を利用すれば,上記の式(4)から,割当済み専用キャッシュ領域の実キャッシュ有効利用度は,次の式(7)のように導くことができる。
CCn=[{SH(x)−BASEH}*MACCESSn*PRIORITYn]/x (7)
ここで,nは,専用領域獲得要求の対象処理を示す。したがって,式(7)はある一つの対象処理に対する推定キャッシュヒット率SH(x)を利用した実キャッシュ有効利用度である。そして,未割当の専用領域獲得要求に対する実キャッシュ有効利用度は,前述の式(4)のとおりであり,以下のようになる。
実キャッシュ有効利用度n=[{H(x)−BASEH}*MACCESSn*PRIORITYn]/x (4)
専用領域獲得要求にはあるサイズxの専用キャッシュ領域が割り当てられる。したがって,割当済み専用キャッシュ領域との入れ替えを判定するためには,単位領域当たりの実キャッシュ有効利用度の増加値(実キャッシュ有効利用度の増加率)を考慮することが有効である。これを利用することで,割当済専用キャッシュ領域のサイズを+1するか−1するかにより実キャッシュ有効利用度がどの程度変化するかを考慮することができる。
上記の実キャッシュ有効利用度の増加率CHHn(x)は,割り当てる専用キャッシュ領域のサイズをx−1からxに増加したときの実キャッシュ有効利用度の増加量であり,式(7)から次の式(8)のようになる。
CHHn(x)={SH(x)−SH(x-1)}*MACCESSn*PRIORITYn (8)
式(8)からわかるとおり,式(7)のように領域サイズxで除算していないので,CHHn(x)は,実キャッシュ有効利用数の増加率である。以下,式(8)を実キャッシュ有効利用数の増加率と称する。
専用領域獲得要求に専用領域が未割当の場合は,推定キャッシュヒット率SH(x)を利用できないので,事前調査でのキャッシュヒット率H(x)を利用して,上記式(8)の実キャッシュ有効数の増加率CHHn(x)は,次の式(9)のようになる。
CHHn(x)={H(x)−H(x-1)}*MACCESSn*PRIORITYn (9)
本実施の形態の判定工程S37では,式(8)の実キャッシュ有効利用数の増加率を割当済み専用キャッシュ領域について算出した割当済専用領域リストLIST-FREEを利用する。以下,この割当済専用領域リストLIST-FREEについて説明する。
図13は,割当済専用領域リストLIST-FREEと未割当専用領域リストLIST-DEMANDとを示す図である。図13の右側が割当済専用領域リストLIST-FREEを示す。キャッシュメモリ130において,割当済みの専用領域(キャッシュセクタID=1,2)を,共用キャッシュ領域(キャッシュセクタID=0)に入れ替える場合に,実キャッシュ有効利用数の増加率がどうなるかを式(8)によって算出しておき,その増加率が少ない順に割当済専用領域リストLIST-FREEに登録しておく。増加率が少ないとは,割当済専用領域を共用領域に単位領域だけ入れ替えた場合の実キャッシュヒット数の減少が少ないことを意味し,現在のキャッシュメモリの有効利用に寄与していないことを意味する。
以上のように,図13の右側の割当済専用領域リストLIST-FREEには,増加率が小さい順にその増加率(LIST-FREE.CHH)が並べられている。
図13の左側が未割当専用領域リストLIST-DEMANDを示す。キャッシュメモリ130において,専用領域獲得要求に対して専用領域が未割当の場合には共用領域が割り当てられているので,この未割当専用領域リストLIST-DEMANDに含まれる。さらに,専用領域獲得要求に対して一部のサイズだけ専用領域が割当られている場合には残りのサイズは共用領域に割り当てられているので,所定のサイズが専用領域に割り当てられている場合でも残りのサイズが専用領域に割り当てられていない未割当専用領域も,この未割当専用領域リストLIST-DEMANDに含まれる。例えば,ある専用領域獲得要求が6Wayの専用領域サイズの割当が適切である場合に,5Wayの専用領域しか割り当てられていない場合は,残りの1Wayを割り当てられた場合の実キャッシュ有効利用数の増加数が未割当専用領域リストLIST-DEMANDに含められる。
そして,それらの未割当専用領域を共用領域から専用領域に入れ替えた場合に,実キャッシュ有効利用数の増加率がどうなるかを式(9)によって算出しておき,その増加率が多い順に未割当専用領域リストLIST-DEMANDに登録しておく。増加率が多いとは,未割当専用領域を共用領域から専用領域に入れ替えた場合の実キャッシュヒット数の増加が多いことを意味し,入れ替えることによりキャッシュメモリの有効利用に大きく寄与することを意味する。
以上のように,図13の左側の未割当専用領域リストLIST-DEMANDには,増加率が大きい順にその増加率(LIST-DEMAND.CHH)が並べられている。
そこで,本実施の形態の判定工程S37では,専用領域獲得要求30に対して専用領域を割り当てた場合の実キャッシュ有効利用数の増加と,割当済専用領域リストLIST-FREEに登録されている割当済専用領域の実キャッシュ有効利用数の減少の差分が,入れ替えに要するオーバーヘッド値を超える場合は,入れ替えして専用領域獲得要求に専用領域を割り当てるべきと判断する。
この判断は,次の式(10)を満たすか否かにより行われる。
y*CCn(y)−Σ(m=1-y)LIST-FREEm.CHH>OVH2*{Σ(m=1-y)LIST-FREEm.PRIORITY} (10)
ここで,yは専用領域のサイズyを,mはリスト内の番号を示し,LIST-FREEm.CHH は実キャッシュ有効利用数の増加率を示し,OVH2は入れ替えに要するオーバーヘッド値を示し,LIST-FREEm.PRIORITYはその処理の優先度を示す。つまり,オーバーヘッド値OVH2が優先度で重み付けされている。
OS20内のキャッシュ割当部204は,y=1から式(10)を判定していき,式(10)の条件を満たす最大のサイズyを,専用領域獲得要求に割り当てる専用領域のサイズとする。すなわち,図13に示した専用領域獲得要求30と割当済専用領域リストLIST-FREEとの間の矢印で示した入れ替えを行う。その結果,サイズyに対応する割当済専用領域が共用領域に開放される。どのサイズyでも式(10)を満たさない場合は,専用領域獲得要求には専用領域を割り当てない。
図12に示されるとおり,キャッシュヒット率の特性は,キャッシュサイズをある程度大きくすると急激に増加する傾向にある。したがって,新たに割り当てる専用領域のサイズyを1から大きくすることで,式(10)の条件を満たすサイズyが見つかることがある。特に,サイズyが基準値x1の付近で式(10)の条件が満たされることがある。
式(10)の条件を満たすキャッシュサイズyと,専用領域獲得要求30が要求するキャッシュサイズとの関係は,例えば,次の通りである。条件を満たすキャッシュサイズyが要求するキャッシュサイズ以下であれば,キャッシュサイズyから要求するキャッシュサイズまでのサイズを割り当てることでキャッシュメモリの効率を向上することができる。一方,キャッシュサイズyが要求するキャッシュサイズを超えている場合は,式(10)の条件は満たされないと判定して専用領域を割り当てないのが好ましい。
図24は,本専用領域獲得要求判定処理S16(2)のフローチャート図である。図10と同じ処理には同じ番号を与えている。まず,キャッシュ割当管理部204は,キャッシュ攪乱力が第1の基準値を超えるか判定し(S30,31),超えていれば,専用の攪乱処理キャッシュ領域を割り当てる(S32)。その結果,セクタID変換テーブル131で,専用領域獲得要求のローカルセクタIDに,攪乱処理キャッシュ領域のキャッシュセクタIDが紐付けられる(S32-1)。
キャッシュ割当管理部204は,キャッシュ攪乱力が第1の基準値を超えていなければ,専用キャッシュ領域を割り当てるべきか否かの判定を,式(10)を満たすサイズyが存在するか否かで行う(S37,38)。キャッシュ割当管理部204は,条件を満たさない場合は,専用領域獲得要求に対して共用領域を割り当てて(S40),条件を満たす場合は,専用領域獲得要求に対してサイズyの専用領域を割り当てることをハードウエアに指示する(S39)。
ハードウエアでは,キャッシュ割当管理部204が,キャッシュセクタ情報設定部132に,新規に割り当てる専用キャッシュ領域とそのサイズyを設定する(S39-1)。また,入れ替え対象の割当済専用領域のキャッシュセクタIDの削除やサイズ変更も同時に行う(S39-1)。そして,キャッシュ割当管理部204が,セクタID変換テーブル131において,専用領域獲得要求のローカルセクタIDに,割り当てた専用キャッシュ領域のキャッシュセクタIDが紐付けられる(S39-2)。
[定期割当見直し処理S18]
次に,図3の定期割当見直し処理S18について3つの例を説明する。専用領域獲得要求に応答して,OS20内のキャッシュ割当管理部204は,専用キャッシュ領域を割り当てるべきか否か,割当済専用領域と入れ替えすべきか否かを判定した。
これに対して,キャッシュ割当管理部204は,定期的に,例えば2秒毎に,専用領域獲得要求に割り当てた割当済専用領域と,専用領域獲得要求に未だ割り当てていない未割当専用領域とを入れ替えるべきか否かの判定(例1,例2)と,共用領域と全専用領域とのサイズの比率がアクセス頻度の比率に基づく理想値とずれている場合に,共用領域を専用領域として未割当の専用領域獲得要求に新たに割り当てるか,または,割当済専用領域を開放して共用領域に入れ替えるかの判定(例3)とを行う。これらの判定において,前述の割当済専用領域リストLIST-FREEと未割当専用領域リストLIST-DEMANDを利用する。
[定期割当見直し処理S18(1)]
図14は,定期割当見直し処理S18の第1の例のフローチャート図である。図15は,定期割当見直し処理S18の第1の例を説明するための図である。図14において,定期的割当見直し処理S18では,キャッシュ割当管理部204は,未割当専用領域と割当済専用領域の入れ替え判定を行う(S50)。この判定処理では,図13で説明した未割当専用領域リストLIST-DEMAND内の未割当専用領域の実キャッシュ有効利用数の増加率CHHn(x)と,割当済専用領域リストLIST-FREE内の割当済専用領域の実キャッシュ有効利用数の増加率CHHn(x)とを比較する(S51)。比較対象は,例えば,図15に矢印で示されるとおり,未割当専用領域リストLIST-DEMAND内の最上位にある最大の増加率と,割当済専用領域リストLIST-FREE内の最上位にある最小の増加率とを比較し,さらに,下位にある増加率どうしを比較する。
そして,以下の式(11)の条件を満たす場合は,入れ替えで効率がアップすると見なすことができる(S52)。
LIST-DEMANDm.CHH - LIST-FREEm.CHH > OVH2 * LIST-FREEm.PRIORITY (11)
ここで,mはリストの順番を示し,OVH2は入れ替えに要するオーバヘッド値を示し,LIST-FREEm.PRIORITYは割当済専用領域リストLIST-FREE内の処理の優先度を示す。つまり,比較対象の未割当専用領域の増加率から割当済専用領域の増加率への差分が,入れ替えに伴うオーバーヘッド値OVH2を優先度で重み付けした値を超える場合は,入れ替えで効率がアップすると見なされる。
式(11)の条件が,両リストの先頭(m=1)から順番に判定され,この条件が満たされなくなる順番まで繰り返し判定される。ただし,式(11)には優先度LIST-FREEm.PRIORITYが算入されているので,右辺の値は優先度に応じて変動する。したがって,未割当専用領域リストLIST-DEMAND内の最上位にある最大の増加率CHHと比較される対象は,割当済専用領域リストLIST-FREE内の最上位の増加率CHHだけでなく,最上位から順に下位の増加率CHHも含まれる。式(11)を満たす組み合わせが見つかれば,それらが入れ替え対象になる。そして,未割当専用領域リストLIST-DEMAND内の次の増加率CHHについて,上記と同じ比較が行われ,式(11)を満たす組み合わせが検出される。
入れ替えで効率がアップすると見なされる場合は,キャッシュ割当管理部204は,未割当専用領域と割当済専用領域とを入れ替える処理を行う(S53)。具体的には,キャッシュセクタ情報設定部132に未割当専用領域に新たに専用領域を割り当てさせ,割り当てるサイズを登録させ,セクタID変換テーブル内の未割当専用領域獲得要求のローカルセクタIDに新たに割り当てる専用領域のキャッシュセクタIDを紐づける。逆に,キャッシュセクタ情報設定部132に割当済専用領域の登録を抹消させ,セクタID変換テーブル内の割当済専用領域獲得要求のローカルセクタIDに紐づけられているキャッシュセクタIDを共用領域のIDに変更する。
そして,入れ替え処理を行うと,入れ替えられた専用領域の増加率は,未割当専用領域リストLIST-DEMANDから割当済専用領域リストLIST-FREEに移動させ,同時に,割当済専用領域リストLIST-FREEから未割当専用領域リストLIST-DEMANDに移動させる。さらに,各リスト内で増加率CHHの値に基づいて,ソートし直しておく。
入れ替えで効率がアップすると見なされない場合は,キャッシュ割当管理部204は,未割当専用領域と割当済専用領域とを入れ替える処理は行わない(S54)。
[定期割当見直し処理S18(2)]
図16は,定期割当見直し処理S18の第2の例のフローチャート図である。図17は,定期割当見直し処理S18の第2の例を説明するための図である。図16において,定期的割当見直し処理S18では,キャッシュ割当管理部204は,未割当専用領域と割当済専用領域の入れ替え判定を行う(S60)。この判定処理では,図17に示したとおり,未割当専用領域リストLIST-DEMAND内の先頭の未割当専用領域の実キャッシュ有効利用数の増加率CHH1(x)の専用キャッシュ領域サイズxを増加させながら,割当済専用領域リストLIST-FREE内の割当済専用領域の実キャッシュ有効利用数の増加率CHHm(x)を先頭から増加させながら,両者の累積値の比較をする(S61)。
この判断S61は,次の式(10)を満たすか否かにより行われる。
Σ(x=1-y)LIST-DEMAND1.CHH(x)−Σ(m=1-y)LIST-FREEm.CHH >
OVH2*{Σ(m=1-y)LIST-FREEm.PRIORITY} (12)
ここで,yは専用領域のサイズyを,mはリスト内の番号を示し,LIST-DEMAND1.CHH, LIST-FREEm.CHH は実キャッシュ有効利用数の増加率を示し,OVH2は入れ替えに要するオーバーヘッド値を示し,LIST-FREEm.PRIORITYはその処理の優先度を示す。ここでも,オーバーヘッド値OVH2が優先度で重み付けされている。
OS20内のキャッシュ割当部204は,式(12)の判定をy=1から増加しながら行い,式(12)の条件を満たす最大のサイズyを検出する。すなわち,実キャッシュ有効利用数の増加率CHH1(x)は,単位サイズ増加させたときの実キャッシュ有効利用数の増加量である。そして,図12に示すとおり,専用キャッシュ領域のサイズxを増加させるほどキャッシュヒット率が上昇する傾向にあるので,未割当専用領域の実キャッシュ有効利用数の増加率CHH1(x)が最大化できる専用キャッシュ領域のサイズxに対して,同じサイズの割当済専用領域の増加率と比較して,入れ替え対象にする。式(10)と同じ考え方である。
上記式(12)を満たして入れ替えで効率がアップすると見なされる場合は,キャッシュ割当管理部204は,未割当専用領域と割当済専用領域とを入れ替える処理を行う(S63)。入れ替えで効率がアップすると見なされない場合は,キャッシュ割当管理部204は,入れ替え処理を行わない(S64)。
未割当専用領域獲得要求30が要求するキャッシュサイズと,式(12)を満たすキャッシュサイズyとの関係は,専用領域獲得要求判定処理(2)について図13で説明したのと同様である。つまり,式(12)を満たすキャッシュサイズyが要求するキャッシュサイズ以下であれば,サイズyと要求サイズとの間のサイズを割り当てる。また,キャッシュサイズyが要求キャッシュサイズを超える場合は,式(12)が満たされないとして,入れ替え処理は行わない。
[定期割当見直し処理S18(3)]
図18は,定期割当見直し処理S18の第3の例のフローチャート図である。図19は,定期割当見直し処理S18の第3の例を説明するための図である。定期割当見直し処理S18の第3の例では,現実の加重メモリアクセス比に基づく共用キャッシュ領域の理想サイズと,現実の共用キャッシュ領域のサイズとの間に乖離が発生している場合は,共用キャッシュ領域が理想のサイズ比に近づくように,共用キャッシュ領域を未割当専用領域獲得要求に専用キャッシュ領域として割り当てるか,割当済専用キャッシュ領域を開放して共用キャッシュ領域に割り当てるかの入れ替え処理を行う。
図19に示した左右のキャッシュメモリ130は,実線が実際のサイズ比を示し,破線が理想のサイズ比を示している。左側のキャッシュメモリ130は,共用キャッシュ領域が理想サイズよりも大きくなっているので,その分を専用領域として未割当専用領域獲得要求に割り当てることが望ましい。また,逆に,右側のキャッシュメモリ130は,共用キャッシュ領域が理想サイズよりも小さくなっているので,その分を割当済専用領域を開放して共用領域に変更することが望ましい。
共用キャッシュ領域の理想サイズは,次の式(13)(14)により求められる。
MACCESSXn=Σ(m=1-n)MACCESSm * PRIORITYm (13)
RSIZESHR=CEIL{(MACCESSXSHR/MACCESSXALL)* SIZEALL} (14)
ここで,MACCESSXnはn個の対象処理の加重メモリアクセス量の合計値を示し,MACCESSmは対象処理mのメモリアクセス量を示し,PRIORITYmは処理mの優先度を示す。さらに,RSIZESHRは共用キャッシュ領域(SHR)の理想的なサイズを示し,MACCESSXSHR,MACCESSXALL,SIZEALLは共有キャッシュ領域(SHR)へのアクセス量,全キャッシュ領域へのアクセス量,全キャッシュ領域のサイズを示す。またCEILは切り上げを意味する。
したがって,式(13)によりn個の対象処理の加重メモリアクセス量の合計値が求められるので,共用キャッシュ領域を使用する対象処理全ての加重メモリアクセス量は,式(13)により算出できる。同様に,全専用キャッシュ領域または全キャッシュ領域を使用する対象処理全ての加重メモリアクセス量も,同様に式(13)により算出できる。
そして,式(14)は,共用キャッシュ領域の理想サイズRSIZESHRを,全キャッシュ領域サイズ(SIZEALL)を共用領域と専用領域への加重メモリアクセス量で按分して(MACCESSXSHR/MACCESSXALL)求めている。したがって,共用キャッシュ領域の理想サイズRSIZESHRは,共用領域と専用領域との加重メモリアクセス数の比率に基づいて求められる。
そして,前述した,共用キャッシュ領域の理想サイズと,現実のサイズとを比較して,その差分が入れ替えに要するオーバーヘッド値OVH1を超えるか否かの判断が行われる。その判断は,以下の式(15)が満たされるか否かによって行われる。
ABS{MACCESSXSHR - MACCESSXALL*(SIZESHR/SIZEALL) > OVH1 (15)
ここで,ABSは絶対値を示している。
式(15)は,プロセス実行中における共用キャッシュ領域に割り当てられた対象処理でのメモリアクセス頻度を各対象処理の優先度で重み付けした第1の加重アクセス頻度MACCESSXSHRと,各対象処理のメモリアクセス頻度を各対象処理の優先度で重み付けした加重アクセス頻度の累計値MACCESSXALLを共用キャッシュ領域と前記専用キャッシュ領域のサイズ比(SIZESHR/SIZEALL)で按分した共用キャッシュ領域の第2の加重アクセス頻度MACCESSXALL*(SIZESHR/SIZEALL)との差分が,オーバーヘッド値OVH1より高い場合の条件式である。この条件式が満たされる場合に,その差分に対応したサイズだけ,割当済み専用キャッシュ領域を共用キャッシュ領域に入れ替えるか,または共用キャッシュ領域を未割当専用キャッシュ領域に入れ替える。
上記式(15)は,式全体にSIZEALL/MACCESSXALLを乗算すると,次の式(16)になる。
ABS{(MACCESSXSHR/MACCESSXALL)*SIZEALL - SIZESHR } > OVH1*( SIZEALL/MACCESSXALL) (16)
ABS{(RSIZESHR - SIZESHR )} > OVH1*( SIZEALL/MACCESSXALL) (16)
すなわち,現実の加重アクセス頻度比による共用キャッシュ領域の理想的なサイズRSIZESHRと,現実のサイズSIZESHRとの差分がオーバーヘッド値を超えるか否かを判定することと同じである。
そこで,上記式(15)または(16)が満たされる場合は,共用キャッシュ領域のサイズが理想的なサイズに近づくように,割当済み専用キャッシュ領域を共用キャッシュ領域に入れ替えるか,逆に,共用キャッシュ領域を未割当専用キャッシュ領域ュ領域に入れ替える。
そのために,本実施の形態では,図19の左側に示すように,共用領域の理想サイズに比較して現実のサイズが大きい場合は,専用領域候補リストのサイズ(WAY数)を増加し,定期的見直しでは未割当専用領域獲得要求に対して専用領域を割り当てることができることを記録する。逆に,図19の右側に示すように,共用領域の理想サイズに比較して現実のサイズが小さい場合は,専用領域借りリストのサイズ(WAY数)を増加し,定期的見直しでは割当済専用領域を共用領域を割り当てることができることを記録する。
そして,定期的見直しでは,図19の左側に示すように,専用領域候補リストのサイズ(WAY数)分だけ,未割当専用領域リストLIST-DEMANDの先頭から専用領域を割り当てる。あるいは,図19の右側に示すように,専用領域借りリストのサイズ(WAY数)分だけ,割当済専用領域リストLIST-FREEの先頭から専用領域を開放する。
図18のフローチャートにしたがって再度説明すると,キャッシュ割当管理部204は,共用領域の理想サイズと現実サイズとの差分に基づいて,共用領域と専用領域の入れ替えの必要性を判定する(S70)。具体的には,専用領域候補リストのサイズが正であれば(S71),未割当専用領域獲得要求に専用領域を割り当てる(S72)。一方,専用領域借りリストのサイズが正であれば(S73),割当済専用領域を開放する(S74)。
キャッシュ割当管理部204は,共用領域の理想サイズと現実サイズとの差分がオーバーヘッド値を超えてない場合は,図14,16で説明した定期割当見直し処理(1)(2)を実行する(S75)。
上記の第3の例では,専用領域候補リストに記録されたキャッシュサイズ(Way数)で割り当てることが望ましい。
[プロセス切り替え時のセクタID変換テーブルの入れ替え処理]
図25は,アプリケーションプログラムのプロセス22が切り替わるときのセクタID変換テーブルの入れ替え処理を示す図である。OS内のプロセス管理部202は,切り替え元の稼働プロセス22Aがプロセスを停止するときに,そのプロセスの停止処理を行い(S81),同時に,キャッシュ割当管理部204にセクタID変換テーブルの切替制御を指示し(S83),切り替え元の稼働プロセス22AのセクタID変換テーブルを,切り替え先の稼働プロセス22BのセクタID変換テーブルに入れ替えさせる(S84)。その後,プロセス管理部202は,切り替え先の稼働プロセス22Bのプロセス稼働を開始させる(S86)。
このように,プロセスが切り替わるときにプロセス管理部202がキャッシュ割当管理部204にセクタID変換テーブルを入れ替えさせ,切り替え先のプロセスがそのセクタID変換テーブルのキャッシュメモリ分割状態に基づいてメモリアクセスを行う。
第1の実施の形態では,図8の専用領域獲得要求に対する判定(1)では,専用領域獲得要求の対象処理の実キャッシュ有効利用度が第2の基準値を超えていれば,専用領域を割り当てた。この判定において,式(4)(7)において優先度を乗算していないキャッシュ有効利用度を指標にして専用領域の割当の有無を判断してもよい。
第1の実施の形態では,図10−13の専用領域獲得要求に対する判定(2)では,実キャッシュ有効利用数の増加率を判断指標にして,専用領域獲得要求に対して専用領域を割り当てるか否かを判断した。この判定においても,式(8)(9)において優先度を乗算していないキャッシュ有効利用数の増加率を指標にして専用領域の割当の有無を判断してもよい。
第1の実施の形態において,定期割当見直し(1)(2)(3)においても,同様に,優先度を考慮しない指標を利用して判断してもよい。
[第2の実施の形態]
次に,本願の発明を実施するための形態として,第2の実施の形態を説明する。第2の実施の形態におけるサーバの構成図は,図1のサーバ構成図と同様である。図1には明示されていないが,CPU12は複数のCPU(CPUコアまたはプロセッサコア)を有する。そして,複数のCPUが,キャッシュユニット13内のキャッシュメモリを利用してメモリアクセスを実行する。
図26は,第2の実施の形態におけるサーバのハードウエアとソフトウエアの構成図である。図2と異なるところは,ハードウエア1内のCPU12が,複数,例えば4つのCPU(CPUコアまたはプロセッサコア)CPU_0-CPU_3を有することと,OS20が,キャッシュセクタIDテーブル205を有することである。複数のCPU CPU_0-CPU_3はそれぞれ,アプリケーションプログラム内の複数のプロセスを時分割で実行する。すなわち,各CPUは,複数のプロセスを所定時間毎に,つまり定期的に切り替えて実行する。また,キャッシュセクタIDテーブル205は,キャッシュメモリのキャッシュセクタIDと,そのキャッシュセクタIDが割り当てられているプロセスIDとの対応と,どのキャッシュセクタIDが未だ割り当てられていない空きセクタ領域かを示すテーブルである。
図27は,第2の実施の形態における各CPU(CPUコアまたはプロセッサ)に対するプロセスキューを示す図である。近年のマルチCPU(マルチCPUコアまたはマルチプロセッサコア),マルチタスク(マルチプロセス)の環境下では,OS20が,複数のCPUに対して,図27のようなプロセスキューで各CPUが実行するプロセスの稼働スケジュールを管理する。
図27に示されるとおり,OS20によるマルチタスク(マルチプロセス)制御により,各CPU CPU_0-CPU_3は,実行すべきプロセスの待ち行列(プロセスキュー)を持ち,プロセスキューのうち先頭のプロセス(図中最も左側のプロセス)を各CPUが実行し,それ以外のプロセスは順番待ちしている待機中のプロセスとなる。OSによって所定の時間間隔毎にプロセスの切替を行うことで,各CPUは複数のプロセスを時分割で実行する。プロセス切替が行われると,実行中だったプロセスはプロセスキューの最後尾に移動し待機状態になり,次に並んでいたプロセスが新たな実行プロセスになる。このように,マルチCPU,マルチタスクの環境下では,多くのアプリケーションプログラムのプロセスが複数のCPUにより時分割で実行される。
図28,図29は,マルチCPUがキャッシュメモリを共用キャッシュ領域として共有して使用する場合の問題点を示す図である。この例では,複数のCPU CPU_0-CPU_3が,キャッシュメモリ130を共用キャッシュ領域として使用する。
図28は,通常のプロセス実行中を示し,図27に示したとおり,4つのCPU CPU_0-CPU_3がプロセスA,B,D,Eをそれぞれ実行中である。そのため,キャッシュメモリ130内には,メインメモリ16内に記憶されているプロセスA,B,D,Eのデータの一部が,キャッシュデータとして格納される。各CPU CPU_0-CPU_3は,メモリアクセスが発生すると,まずキャッシュメモリ130にアクセスしてキャッシュヒットすればキャッシュメモリ130に対して書き込みまたは読み出しを実行し,キャッシュミスヒットすればメインメモリ16に対して書き込みまたは読み出しを実行する。図28中,メインメモリ16内のプロセスC,Fのデータは,キャッシュメモリ130内にはほとんどない。
図29は,CPU CPU_3がプロセスEからプロセスFにプロセス切替を行った直後の状態を示す。CPU CPU_3は,破線の矢印で示すプロセスEの実行を中断し,実線の矢印で示すようにプロセスFの実行を再開する。それに伴い,キャッシュメモリ130内にはプロセスFのデータの一部であるキャッシュデータが未だ展開されていないので,プロセス切替直後は,キャッシュミスヒットを多発する。やがて,キャッシュメモリ130内の切替元のプロセスEのデータが切替先のプロセスFのデータに置き換えられると,図28のような通常状態に戻り,キャッシュミスヒットの発生は抑制される。
第2の実施の形態におけるキャッシュメモリ制御プログラムによれば,各CPUが実行するプロセス毎に専用キャッシュ領域を割り当てる。そのために,キャッシュメモリ制御プログラムは,キャッシュメモリ130をCPUの数に少なくとも1を加えた個数のセクタ領域に分割し,各CPUが実行するプロセス毎に1つのセクタ領域を割り当てて,各CPUが割り当てられたセクタ領域を専用キャッシュ領域として使用する。これにより,あるCPUでプロセス切替が発生しても,他のCPUのプロセスのキャッシュメモリ内のデータはそれぞれの専用キャッシュ領域内に格納されているので,他のプロセスの実行によりそのキャッシュデータが追い出されることは回避される。
さらに,プロセス切替が発生した直後にキャッシュミスヒットが多発しないようにするために,プロセス切替と同時にそれらのキャッシュメモリの内容も切り替えるように制御する。具体的には,プロセス切替処理に連動して,プロセス切替の直前で切替先のプロセスのデータをメインメモリから空きセクタ領域に転送し,転送後に切替元プロセスのCPUによる実行を中断させ,切替先プロセスのCPUによる実行を再開させる。それとともに,切替元プロセスのキャッシュデータをメインメモリに退避させて,次に実行再開される場合に備える。そして,切替元プロセスのキャッシュデータのメインメモリへの退避が完了したら,切替元プロセスに割り当てていたセクタ領域を開放して,他のプロセスに割当可能にする。その結果,その開放されたセクタ領域は空きセクタ領域に変更される。
一旦キャッシュデータを退避させた切替元プロセスがその後実行される場合は,上記と同様に退避中のデータを空きセクタ領域に転送してから,そのプロセスの実行を再開する。これにより,プロセス切替直後のキャッシュミスヒットの発生を抑制できる。しかも,プロセス切替処理を効率的に行うことができ,切替元プロセスと切替先プロセスが共に実行停止状態になる期間を最短にすることができる。
[第2の実施の形態の概略]
図30は,第2の実施の形態におけるプロセス切替時の制御の概略を示すフローチャート図である。図31,図32,図33,図34は,プロセス切替時の制御を示す図である。図31−34を参照しながら図30の概略フローチャートの処理を説明する。概略フローチャートの処理の説明後に,具体的な処理の説明をする。
OS内のキャッシュメモリ制御プログラムは,システム起動時において,キャッシュメモリ130をCPU数に1を加えた数のセクタ領域に分割する(S500)。そして,システム起動後に,各CPUが実行するプロセスにそれぞれのセクタ領域を専用キャッシュ領域として割り当てる(S501)。そのような状態で,通常のプロセス実行処理を行う(S502)。
各CPUが実行するプロセスに割り当てられる専用キャッシュ領域は,例えば,図5に示した基準キャッシュサイズx1に設定される。各プロセスを開発環境下で実行させて図5の特性グラフを取得することで,各プロセスに割り当てる専用キャッシュ領域のサイズを最適なサイズ,即ち最大のキャッシュヒット率が得られる最小のキャッシュサイズを事前に取得することができる。
ただし,各プロセスが実行中にキャッシュヒット率やメモリアクセス頻度が調査され,前述の式(8)に基づいて各プロセスに割り当てられている専用キャッシュ領域のセクタサイズを最適なサイズに変更するセクタサイズ最適化処理が実行される。具体的には後で詳述する。
図31には,工程S502の通常プロセス実行中の状態が示されている。これによれば,キャッシュメモリ130が,CPU数4に1を加えた5個のセクタ領域ID0-ID4に分割されている。キャッシュメモリには,セクタ分割という機能が備えられている。この機能によれば,キャッシュメモリを所望のサイズを有するセクタ領域に分割すると,各分割されたセクタのキャッシュ領域は,キャッシュメモリが仮想的に分離したように動作する。したがって,各セクタを1つのプロセスにだけ割り当てるようにすることで,各セクタに割り当てられたプロセスのメモリアクセスは,割り当てられたセクタを専用キャッシュ領域として使用して実行される。それにより,他のプロセスによるメモリアクセスのキャッシュミスヒットにより自分のプロセスのキャッシュデータが割り当てられたセクタから追い出されることはなく,自分のプロセスのメモリアクセスでキャッシュミスヒットが発生した場合にだけキャッシュデータが追い出される。つまり,分割されたセクタに一つのプロセスのみ割り当てることで,そのセクタは専用キャッシュ領域として利用することができる。
図31の例では,キャッシュメモリ130が5つのセクタに分離されそれぞれ専用キャッシュ領域として利用される。本実施の形態では,CPUの数4に1を加えた5個のセクタに分割することに限定されず,キャッシュメモリ130がCPUの数4に少なくとも1を加えた5個のセクタに分割されれば良い。例えば,CPUの数4に2を加えた6個のセクタに分割されてもよく,その場合は空きセクタが2個になり,同時に複数のプロセス切替が発生した場合に有効である。さらに,キャッシュメモリ130には,CPUの数4に1を加えた5個のセクタ領域以外にも,別の目的で共用キャッシュ領域や専用キャッシュ領域を設けても良い。
図31では,CPU CPU_0-CPU_3がプロセスA,B,D,Eをそれぞれ実行中であり,プロセスA,B,D,Eにキャッシュメモリ130のセクタID0,ID1,ID2,ID3がそれぞれ割り当てられ,セクタID4は空きセクタである。セクタID0,ID1,ID2,ID3には,それぞれ1つのプロセス,それを実行する1つのCPUが割り当てられており,他のプロセスには割り当てられず専用キャッシュ領域として利用される。ここで,専用キャッシュ領域とは,1つのプロセスしか割り当てられず,その割り当てられたプロセスを実行するCPUが専用に使用することができるキャッシュ領域であることを意味する。
メインメモリ16は,実行済みの全てのプロセスのデータを格納するプロセスデータ領域16_0を有する。さらに,メインメモリ16には,キャッシュメモリ内に格納されていたプロセスのキャッシュデータを退避させるキャッシュデータ退避領域16_1を有する。図31の例では,キャッシュデータ退避領域16_1内には,実行中のプロセスA,B,D,E以外の待機中のプロセスC,F,G,Hのキャッシュデータが格納されている。
図31には,キャッシュセクタIDテーブル205の例が示されている。キャッシュセクタIDテーブル205は,OS内のキャッシュメモリ制御プログラムが管理し参照するテーブルであり,分割したキャッシュセクタIDに対応してそのキャッシュセクタを割り当てられているプロセスIDが格納されている。そして,キャッシュセクタID4は,空きセクタ(空き専用キャッシュ領域)として設定されている。
図41は,専用キャッシュ領域のセクタサイズ最適化処理を説明する図である。通常プロセス実行処理中に,所定時間毎に,各プロセスに割り当てたセクタ領域(専用キャッシュ領域)のサイズの最適化処理が行われる。このセクタサイズ最適化処理では,複数のセクタ領域のサイズを,各セクタ領域に割り当てられているプロセスのキャッシュヒット率とメモリアクセス頻度に基づくキャッシュ有効利用数の総計が最大化するように変更する。つまり,複数のセクタ領域にそれぞれ割り当てられている複数のプロセスの単位時間あたりのキャッシュヒット数(キャッシュヒット率にメモリアクセス頻度を乗じた値)が最大化するように,各セクタサイズが最適化される。
まず,通常プロセス実行処理中に,各プロセスのキャッシュヒット率とメモリアクセス頻度が測定されている。その結果,図12に示した推定キャッシュヒット率のグラフと,メモリアクセス頻度とが,各セクタ領域毎に取得されている。
そこで,セクタサイズ最適化処理では,前述の式(8)を利用して,セクタサイズを例えば1way増加した場合の実キャッシュ有効利用数の増加量と,セクタサイズを1way減少した場合の実キャッシュ有効利用数の減少量とを求める。そして,図41に示されるように,セクタサイズ増加候補リストLIST-INCREASEには実キャッシュ有効利用数の増加量が大きい順に並べ,セクタサイズ減少候補リストLIST-DECREASEには実キャッシュ有効利用数の減少量を小さい順に並べる。
セクタサイズ増加候補リストLIST-INCREASEには,現在のセクタサイズxをx+1に増加した場合の実キャッシュ有効利用数の増加量(増加率)が大きい順に並べられる。一方,セクタサイズ減少候補リストLIST-DECREASEには,現在のセクタサイズxをx−1に減少した場合の実キャッシュ有効利用数の減少量(減少率)が小さい順に並べられる。図41に示した例では,実キャッシュ有効利用度の増加率は,セクタID0,ID1,ID2,ID3,ID4の順になり,減少率は,その逆でありセクタID4,ID3,ID2,ID1,ID0の順になっている。
そして,両方の候補リスト間で,例えば最大増加率と最小減少率とを比較して,図41に示されるような不等式の条件を満たす場合に,セクタサイズ増加候補リストLIST-INCREASEの対応するセクタサイズを1way増加させ,セクタサイズ減少候補リストLIST-DECREASEの対応するセクタサイズを1way減少させる。不等式は,以下のとおりである。
CHHn(x)={SH(x+1)−SH(x)}*MACCESSn*PRIORITYn > CHHn(x)={SH(x)−SH(x-1)}*MACCESSn*PRIORITYn+OVH
上記の不等式から分かるとおり,図12の推定キャッシュヒット率SH(x)の増加率または減少率とメモリアクセス頻度MACCESSと優先度PRIORITYとを乗じて求めた実キャッシュ有効利用数の増加率と減少率の差が,セクタサイズを変更するために必要なオーバーヘッドを超えて大きいのであれば,増加率が大きいプロセスのセクタサイズを例えば1way大きくし,減少率が小さいプロセスのセクタサイズを1way小さくする。
セクタサイズ最適化処理では,上記のようなセクタサイズの変更を行うペアを,図41の両リストの上位から順に上記の不等式を満たすか否かに基づいて検出し,不等式を満たす全てのペアのセクタサイズを増減する。そして,セクタサイズ変更後に,同様のリストを作成し再度セクタサイズ変更ペアを検出しセクタサイズを増減する処理を繰り返すことが望ましい。または,セクタサイズ最適化処理が所定時間毎に行われるので,1回のセクタサイズ最適化処理ではサイズ変更ペアの検出とセクタサイズの増減を行う処理を1回だけ行うようにしてもよい。
また,上記の実キャッシュ有効利用数の増加率と減少率に基づくセクタサイズ最適化処理を行うと,空きセクタID4はメモリアクセス頻度がゼロになるので,セクタサイズ減少リストの先頭にリストアップされて自然にそのセクタサイズが減少されゼロに近づくことになる。これにより,キャッシュメモリを有効に活用して,各プロセスを実行するCPUコアに最大限のセクタサイズを割り当てることができる。
なお,プロセスが切り替えられると,それに対応して,セクタサイズ最適化処理で参照するキャッシュヒット率SH(x)やメモリアクセス頻度MACCESSも切替先のプロセスに対応するものに切り替えられる。
図30において,通常プロセス実行処理中に(S502),いずれかのCPUにおいてプロセス切替が発生する前の段階で(S503のYES),OSは,プロセス切替直前処理S504,プロセス切替処理S505,プロセス切替直後処理S506を実行する。
図32は,プロセス切替直前処理S504を示している。図27に示されるとおり,CPU CPU_3は,実行するプロセスをプロセスEからプロセスFに切り替える。そのプロセス切替の直前で,OSのキャッシュメモリ制御プログラムは,メインメモリ16のキャッシュデータ退避領域16_1内に退避しているプロセスFのキャッシュデータを,キャッシュメモリ130内の空きセクタID4に転送する(S504)。プロセスFの退避中のキャッシュデータは,以前プロセスFが切り替えられた時にキャッシュメモリに格納していたデータである。また,キャッシュメモリ制御プログラムは,キャッシュセクタIDテーブル205を参照してどのセクタが空きセクタであるかを認識することができる。
図33は,プロセス切替処理S505を示している。OSは,実行中の切替元プロセスであるプロセスEのCPU CPU_3による実行を停止または中断し,切替先プロセスであるプロセスFにプロセスFのキャッシュデータが転送されたセクタID4を割り当てて,CPU CPU_3にプロセスFの実行を開始させる(S505)。これにより,CPU CPU_3は,プロセスFが以前中断したときにメインメモリに退避させたキャッシュデータを,キャッシュメモリ130内のセクタID4内に展開した状態でプロセスFを再稼働させることができ,プロセス切替直後にキャッシュミスヒットが多発することが回避される。この状態では,キャッシュセクタIDテーブル205では,キャッシュセクタID4にプロセスFが関連づけられる。
図33において,キャッシュメモリ制御プログラムは,CPU CPU_3による切替元プロセスであるプロセスEの実行を停止するとともに,キャッシュメモリ130内のキャッシュセクタID3内のプロセスEのキャッシュデータを,メインメモリ16内のキャッシュデータ退避領域16_1に転送開始させる。
図34は,プロセス切替直後処理S506及びその後の状態が示されている。キャッシュセクタID3内のプロセスEのキャッシュデータがメインメモリ16内のキャッシュデータ退避領域16_1内に転送完了し,キャッシュセクタID3がプロセスEの専用キャッシュ領域の状態から開放され,空きセクタとなっている。そして,キャッシュセクタIDテーブル205内のキャッシュセクタID3は空きセクタに変更されている。
その後,いずれかのCPUがプロセス切替をすることになると,再度,切替先プロセスのキャッシュデータをメインメモリ16のキャッシュデータ退避領域16_1から空きセクタID3に転送し,転送後,切替先プロセスのCPUによる実行を再開する。または,その後,退避済みのプロセスEが切替先プロセスとして切り替えられる場合は,プロセスEの退避したキャッシュデータをキャッシュメモリ130内の空きセクタに転送して展開して,プロセスEの実行を再開する。
上記のプロセス切替処理において,キャッシュデータの退避処理中にその専用キャッシュ領域のセクタサイズは一定にすることが望ましい。そのために,セクタサイズ最適化処理で参照されるキャッシュヒット率データSH(x)やメモリアクセス頻度MACCESSを,強制的に,例えば,稼働中のセクタサイズxaのキャッシュヒット率SH(xa)を最大の1にしそれ以外のセクタサイズxbのキャッシュヒット率SH(xb)を最小の0にし,メモリアクセス頻度MACCESSを最大値にする。その結果,上記の実キャッシュ有効利用数SHは,稼働中のセクタサイズxaからサイズをxa+1に増加した場合もxa−1に減少した場合も共に減少するので,セクタサイズ増加候補リストLIST-INCREASEとセクタサイズ減少候補リストLIST-DECREASEの最下位にリストアップされ,セクタサイズ増減ペアになることはなくなる。それにより,キャッシュデータの退避処理中にその専用キャッシュ領域サイズが変更されて退避すべきデータがキャッシュ制御で追い出されることはない。
一方,プロセス切替処理において,キャッシュデータの復元処理中は,それまで空きセクタ領域でサイズが小さくなっていたところに,メモリアクセスが活発に行われるようになるので,そのセクタサイズはセクタサイズ最適化処理により急速に大きく変更されることになる。また,キャッシュデータの復元処理対象のセクタ領域の実キャッシュ有効利用数の増加率が大きくなるような架空のキャッシュヒット率データSH(x)やメモリアクセス頻度MACCESSを強制的に設定することで,そのセクタサイズをセクタサイズ最適化処理によりより急速に大きく変更させることができる。
[第2の実施の形態の詳細]
上記の第2の実施の形態の概略から分かるとおり,第1の実施の形態のキャッシュメモリ制御のように,各プロセスまたはプロセス内の処理が専用領域獲得要求を発行して,OS内のキャッシュメモリ制御プログラムがその専用キャッシュ領域を割り当てるか否かの判定を行うこと,専用領域獲得要求に対して専用キャッシュ領域を割り当てたことと割り当てなかったことを定期的に見直して,専用キャッシュ領域を入れ替えるべきか否かの判定を行うこと,などは,第2の実施の形態のキャッシュメモリ制御プログラムは行わない。
第2の実施の形態のキャッシュメモリ制御プログラムは,各CPUが実行するプロセスに対してキャッシュメモリ内の1つのセクタ領域を必ず割り当てる。そして,プロセス切替時に切替先プロセスに空きセクタ領域を割り当てて,切替元プロセスに割り当てていたセクタ領域を開放する。このプロセス切替処理時でのキャッシュメモリのセクタ領域の割当の切替処理において,プロセスに対応するセクタID変換テーブル131を入れ替えて,プロセスによるメモリアクセス時にセクタID変換テーブルを参照して割り当てられているキャッシュセクタIDを取得し,割り当てられているキャッシュセクタIDにアクセスする処理については,第1の実施の形態のキャッシュメモリ制御プログラムの機能を利用する。
図35は,第2の実施の形態におけるサーバシステム内でのシステム起動の事前処理とシステム起動処理を示す図である。図36は,図35のサーバシステム内の処理に対応するフローチャート図である。
事前処理では,入力部17からアプリケーションプログラムであるソースプログラムを受け付けると(S511),コンパイラ21が,ソースプログラムをコンパイルして機械語命令(オブジェクトコード)に変換する(S512)。このコンパイル時に,各プロセス内の命令にはそのプロセス内のローカルセクタIDとしてID=0を割り当てる。
図37は,コンパイル処理S512について説明する図である。図37は,第1の実施の形態の図4に対応する図である。第2の実施の形態でのコンパイル処理S512では,図37に示されるとおり,アプリケーションプログラムのソースコードAPL_SCをコンパイルして,機械語(オブジェクトコード)APL_OCに変換する。その結果,プロセスPR1内の機械語の命令32には,ローカルセクタID=0が割り当てられる。同様に,他のプロセスPR2-PRm内の機械語の命令32にも,ローカルセクタID=0が割り当てられる。つまり,プロセス間でまたはプロセス内の処理間で,ローカルセクタIDが区別される必要はない。したがって,ローカルセクタID=0の代わりに,ローカルセクタID=1が割り当てられても良い。
図38は,コンパイルされた機械語の命令の実行を示す図である。後述するとおり,OS内のキャッシュメモリ制御プログラムは,CPUが実行するプロセス毎にキャッシュメモリ内のセクタ領域を専用キャッシュ領域として割り当てる。この割当処理は,プロセス毎にメインメモリ内に格納されているセクタID変換テーブル131で,コンパイル時に割り当てられたローカルセクタID=0に対して,そのプロセスに割り当てたセクタ領域のキャッシュセクタID,図38中ではID#,を設定することと,プロセスを実行する前にセクタID変換テーブル131を入れ替えることによって行われる。また,プロセスにキャッシュメモリ内のセクタ領域を割り当てると,図31−34で示したキャッシュセクタIDテーブル205にもそのプロセスIDが登録される。
そして,機械語の命令を実行するときに,実行するCPUがセクタID変換テーブル131を参照し,機械語命令のローカルセクタID=0に対応するキャッシュメモリのセクタIDを抽出し,そのセクタIDにメモリアクセスを行う。この点は,第1の実施の形態と同等である。
図35,図36に戻り,システム起動処理について説明する。まず,入力部17から本番環境でのシステム稼働指令を受け付ける(S513)。これに応答して,OS内のプロセス管理部202が通常のプロセス立ち上げ処理を実施してシステム稼働処理を行う(S514)。そして,キャッシュ割当管理部204が,キャッシュメモリをCPU数Nに少なくとも1を加えたN+1個のセクタに分割し,N+1個の,またはN+1以上の,専用キャッシュ領域を確保する(S515)。これに応答して,キャッシュメモリ130ではN+1個のセクタ領域,つまりキャッシュ領域が,キャッシュセクタ情報設定部132に設定される(S516)。この設定内容は,第1の実施の形態と同様であり,各セクタ領域のサイズ(具体的にはウエイ数)などが設定される。
そして,プロセス管理部202が,各プロセスを対応するCPUに実行させる(S517)。各CPUがプロセスを実行開始するときに,各プロセスに1つのセクタ領域が専用キャッシュ領域として割り当てられる。また,プロセス管理部202は,各CPUにおいてプロセス切替が発生すると,後述するプロセス切替処理を実行する(S517)。
図39は,第2の実施の形態におけるサーバシステム内でのプロセス切替処理を示す図である。図40は,図39のサーバシステム内の処理に対応するフローチャート図である。まず,切替元のプロセス22(PR1)は,プロセス切替直前までCPUによって実行されている(S521)。そして,あるCPUによるプロセス切替が近づくと,OS内のプロセス管理部202は,プロセス切替準備のために,キャッシュメモリ内のデータ切替制御を開始する(S522)。
この時に,切替元プロセスPR1のキャッシュデータの退避処理が行われるセクタ領域に対しては,前述のキャッシュヒット率データとメモリアクセス頻度を前述した架空のデータに強制的に書き換えるようにする。それにより,セクタサイズ最適化処理によりそのセクタ領域のサイズは一定に維持される。別の方法として,キャッシュデータの退避処理が行われるセクタ領域を,キャッシュデータ退避処理中だけセクタサイズ最適化処理の対象から外すようにしてもよい。
また,切替先プロセスPR2のメインメモリから退避キャッシュデータを転送されるセクタ領域に対しても,前述のとおりセクタサイズ最適化処理によりそのセクタサイズは増大される。
そして、キャッシュメモリ内のデータ切替制御で,OS内のキャッシュ割当管理部204が,メインメモリ16内のキャッシュデータ退避領域16_1内に格納されている切替先プロセスPR2の退避キャッシュデータを,キャッシュメモリ130内の空きセクタ領域(キャッシュ領域ID1)に転送するよう制御する(S523)。これに応答して,キャッシュメモリ130内の空きセクタ領域(キャッシュ領域ID1)にメインメモリから切替先プロセス22(PR2)の退避キャッシュデータが転送され,キャッシュデータとして復元される(S524)。転送完了後,完了したことがキャッシュ割当管理部204に通知される。また,キャッシュ割当管理部204は,キャッシュセクタIDテーブル205内の空きセクタだったセクタIDに,切替先プロセスのIDを設定する。これにより,空きセクタだったセクタ領域が切替先プロセスに割り当てられことになる。
その後,プロセス管理部202は,切替元プロセス22(PR1)から切替先プロセス22(PR2)へのプロセス切替処理を実行し(S515),まず,切替元プロセス22(PR1)の実行を停止する(S526)。これにより,切替元プロセス22(PR1)の実行が一時中断する。
それと共に,キャッシュ割当管理部204は,セクタID変換テーブル131について,切替元プロセスのセクタID変換テーブルを切替先プロセスのセクタID変換テーブルに入れ替える処理をする(S527)。そして,キャッシュ割当管理部204は,入れ替えた切替先プロセスのセクタID変換テーブル131の書き換えを行う(S528)。具体的には,図38で示したように,切替先プロセスのセクタID変換テーブル131のローカルセクタID=0に対応するキャッシュセクタIDに,切替先プロセスの退避キャッシュデータを転送した空きセクタIDを設定する。これにより,切替先プロセスの機械語命令が実行されると,セクタID変換テーブル131に設定された空きセクタだったセクタ領域,つまりキャッシュデータが復元されたセクタ領域を利用するメモリアクセスが可能になる。このとき,切替先プロセスのキャッシュヒット率データとメモリアクセス頻度を参照してセクタサイズ最適化処理が行われて,切替先プロセスの特性に従うキャッシュサイズに最適化される。
その後,プロセス管理部202は,切替先プロセス22(PR2)を再稼働するよう制御して(S529),切替先プロセス22(PR2)がCPUにより実行再開される(S529_1)。
そして,プロセス管理部202は,切替元プロセス22(PR1)が使用していた専用キャッシュ領域内データを退避させるために,そのキャッシュサイズの固定化を実施する。すなわち,前述したとおり,キャッシュヒット率データとメモリアクセス頻度を架空のデータに強制的に書き換えて,セクタサイズ最適化処理によってセクタサイズが変更されないようにする。
次に,プロセス管理部202は,切替元プロセス22(PR1)に割り当てられていた専用キャッシュ領域内のキャッシュデータを,メインメモリ16内のキャッシュデータ退避領域16_1内に転送して退避する制御を行う(S530)。それに応答して,キャッシュ割当管理部204が,切替元プロセス22(PR1)に割り当てられていた専用キャッシュ領域内のキャッシュデータを,メインメモリ16内のキャッシュデータ退避領域16_1内に転送する(S530_1)。キャッシュメモリ130内のキャッシュデータがメインメモリへ退避されると,完了が通知される(S531)。図39では,キャッシュ領域ID2内のキャッシュデータがキャッシュデータ退避領域16_1に退避されている。この時点でこのキャッシュ領域ID2は空きセクタ領域となるため,メモリアクセス頻度がゼロになり,セクタサイズ最適化処理により,キャッシュ領域ID2のキャッシュサイズが0となる。これにより,その他のプロセスが効率的により大きなキャッシュ領域を使用できるようになる。
以上の通り,第2の実施の形態によれば,キャッシュメモリを複数のセクタ領域に分割し,複数のCPUそれぞれが実行するプロセス毎に,その分割したセクタ領域を専用キャッシュ領域として割り当てる。したがって,あるプロセスによるメモリアクセスで,他のプロセスのキャッシュデータが追い出されることはない。さらに,第2の実施の形態によれば,キャッシュメモリをCPUの数に少なくとも1を加えた数のセクタ領域に分割し,プロセス切替時に,切替先プロセスの退避キャッシュデータを空きセクタ領域に転送してから,切替元プロセスの稼働を停止し切替先プロセスの稼働を開始する。したがって,プロセス切替に連動してキャッシュメモリ内のキャッシュデータの入れ替えを行うので,プロセス切替をスムーズに実行することができ,しかも切替後のプロセスによるメモリアクセスでは,既にそのキャッシュデータがキャッシュメモリ内に展開されているので,キャッシュミスヒットが多発することが回避される。
したがって,マルチCPUコア(またはマルチプロセッサコア),マルチタスク(マルチプロセス)のサーバシステムにおいて,キャッシュメモリを効率的に使用してキャッシュヒット率を向上させることができる。