以下、本発明の実施の形態を図面に基づいて詳細に説明する。
本発明では、ストレージシステムの全記憶領域のうち、一部の記憶領域についてのみブロック単位のアクセス数を管理するようにサーバを構成する。このとき、サーバは、キャッシュ効率が最適になるように、ストレージシステムの全記憶領域の中から、所定の単位のアクセス数を管理する記憶領域(ブロック)を決定する必要がある。
そこで、本発明では、ストレージシステムが提供する全記憶領域の中からアクセス数を取得する記憶領域を選択する。サーバは、選択された記憶領域について所定の単位の詳細なアクセス数を取得する。
実施例1では、サーバモジュール110(図1参照)と共有ストレージシステム130(図1参照)との間で、アクセス数を管理するためのアクセス管理情報(アクセスカウンタ)を階層化する。
サーバモジュール110(図1参照)は、ブロック単位のアクセス数を管理するためのアクセス管理情報(アクセスカウンタ)を有する。サーバモジュール110が有するアクセス管理情報(アクセスカウンタ)では、共有ストレージシステム130の一部の記憶領域のアクセス数が管理される。
一方、共有ストレージシステム130(図1参照)は、ブロックグループ単位のアクセス数を管理するためのアクセス管理情報(アクセスカウンタ)を有する。ここで、ブロックグループとは、複数のブロックから構成される記憶領域を示す。共有ストレージシステム130(図1参照)が有するアクセス管理情報(アクセスカウンタ)では、共有ストレージシステム130(図1参照)の全記憶領域のアクセス数が管理される。
サーバモジュール110のキャッシュドライバ210(図2参照)は、共有ストレージシステム130(図1参照)の全記憶領域のブロックグループ単位のアクセス数に基づいて、ブロック単位のアクセス数を管理するブロックグループを決定する。また、サーバモジュール110のキャッシュドライバ210(図2参照)は、決定されたブロックグループを構成するブロック毎のアクセス数を管理する。
これによって、アクセス数を保持するために必要なサーバ側のメインメモリの記憶容量の削減することできる。
図1は、本発明の実施例1における計算機システムのハードウェア構成の一例を示すブロック図である。図2は、本発明の実施例1における計算機システムのソフトウェア構成の一例を示す説明図である。
本発明の計算機システムは、サーバ装置10及び共有ストレージシステム130から構成される。サーバ装置10及び共有ストレージシステム130は、ネットワーク140を介して接続される。ネットワーク140は、WAN、LAN及びSAN等が考えられる。本発明は、ネットワークの種類に限定されない。なお、サーバ装置10及び共有ストレージシステム130は、直接接続されていてもよい。
サーバ装置10は、複数のサーバモジュール110、及びキャッシュメモリシステム120を備える。サーバモジュール110とキャッシュメモリシステム120との間は、例えば、PCI−SIGが策定したPCIExpress(PCIe)の規格の接続規格を用いるものとする。
サーバモジュール110は、所定のアプリケーション201を実行する計算機であり、プロセッサ111、メモリ112、ネットワークインタフェース113、及び接続インタフェース114を備え、各構成は内部経路を介して互いに接続される。なお、サーバモジュール110は、図示しない、記憶媒体、入出力装置等の他の構成を備えてもよい。
プロセッサ111は、メモリ112に格納されるプログラムを実行する。プロセッサ111が、メモリ112に格納されるプログラムを実行することによって、サーバモジュール110が有する機能が実現される。
メモリ112は、プロセッサ111によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ112は、プログラムが使用するワークエリアを含む。メモリ112に格納されるプログラム及び情報については、後述する。
ネットワークインタフェース113は、ネットワーク140を介して他の装置と接続するためのインタフェースである。
接続インタフェース114は、キャッシュメモリシステム120に接続するためのインタフェースである。前述した様に、本実施例では、サーバモジュール110及びキャッシュメモリシステム120は、PCIeバスとの通信経路を介して接続されているものとする。この場合、PCIeインタフェースが接続インタフェース114として用いられる。
キャッシュメモリシステム120は、サーバモジュール110が使用する記憶領域を提供する。キャッシュメモリシステム120は、フラッシュメモリ等の不揮発性メモリ(不揮発性の記憶素子)から構成される。なお、キャッシュメモリシステム120は、不揮発性メモリに対する制御を行うためのコントローラ(図示省略)を備える。
本実施例では、キャッシュメモリシステム120が提供する記憶領域は、共有ストレージシステム130のキャッシュとして用いられる。より具体的には、キャッシュメモリシステム120が提供する記憶領域には、LU(Logical Unit)の論理ブロック単位のキャッシュデータが格納される。
なお、論理ブロック単位のデータの管理方法としては、バッファキャッシュを用いることが考えられる。バッファキャッシュは、キャッシュメモリシステム120の記憶領域にバッファページを割り当て、所定のブロックサイズのブロックバッファに当該バッファページを分割することによって生成される。
バッファキャッシュには、共有ストレージシステム130における論理ブロック単位のデータの格納場所を特定するためのバッファヘッドが含まれる。なお、LUは、後述するように共有ストレージシステム130によって提供される。
以下の説明では、論理ブロックを単にブロックと記載し、また、論理ブロック単位のデータをブロックデータ、キャッシュメモリシステム120における論理ブロック単位の記憶領域をキャッシュ領域とも記載する。
また、本実施例では、複数のサーバモジュール110が、キャッシュメモリシステム120を共有して使用するものとする。なお、本発明はこれに限定されず、一つのサーバモジュール110に一つのキャッシュメモリシステム120を接続する構成でもよい。また、サーバモジュール110内部にキャッシュメモリシステム120が存在してもよい。さらに、サーバ装置10の外部にキャッシュメモリシステム120が存在してもよい。
また、本実施例では、不揮発性メモリから構成されるキャッシュメモリシステム120を用いているが、揮発性メモリから構成されるキャッシュメモリシステムを用いてもよい。
共有ストレージシステム130は、各サーバモジュール110上で実行されるアプリケーション201が使用するデータ等を格納する記憶領域を提供する。共有ストレージシステム130は、コントローラ131及び複数の記憶媒体136を備える。
コントローラ131は、共有ストレージシステム130を制御する。コントローラ131は、プロセッサ132、メモリ133、ネットワークインタフェース134、及びストレージインタフェース135を備え、各構成は内部経路を介して互いに接続される。
プロセッサ132は、メモリ133に格納されるプログラムを実行する。プロセッサ132が、メモリ133に格納されるプログラムを実行することによって、共有ストレージシステム130が有する機能が実現される。
メモリ133は、プロセッサ132によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ133は、プログラムが使用するワークエリアを含む。メモリ133に格納されるプログラム及び情報については、後述する。
ネットワークインタフェース134は、ネットワーク140を介して他の装置と接続するためのインタフェースである。
ストレージインタフェース135は、記憶媒体136に接続するためのインタフェースである。記憶媒体136は、データを格納する装置である。記憶媒体136は、例えばHDD(Hard Disk Drive)又はSSD(Solid State Drive)等が考えられる。ただし、データを格納できる装置であればどのような装置であってもよい。
次に、サーバモジュール110、キャッシュメモリシステム120、及び共有ストレージシステム130のソフトウェア構成について説明する。
まず、サーバモジュール110のソフトウェア構成について説明する。サーバモジュール110のメモリ112は、一つ以上のアプリケーション201、及びOS200を実現するプログラムを格納する。当該プログラムは、プロセッサ111によって実行される。
アプリケーション201は、例えば、データベースソフトウェア、ハイパーバイザ、仮想デスクトップインフラストラクチャなどが考えられる。なお、本発明は、アプリケーション201の種類に依存しない。
OS200は、サーバモジュール110全体を制御する。OS200は、キャッシュドライバ210を含む。
OS200は、共有ストレージシステム130によって提供されるLUを所定のファイルシステムにフォーマットする。このとき、OS200は、LUを所定の論理ブロックに分割し、各論理ブロックに識別番号を割り当てる。ファイルシステムは、一つ以上のブロックデータから構成されるデータをファイルとして管理する。
なお、OS200に含まれるファイルシステム等は、公知のものであるため説明を省略する。
キャッシュドライバ210は、キャッシュ領域におけるキャッシュデータを制御するドライバである。キャッシュドライバ210は、サーバアクセス計測部211、アクセスカウンタ入替制御部212、アクセス振り分け部213、キャッシュデータ入替制御部214、及びタイマ217を含み、また、サーバアクセス管理情報215、及びキャッシュ管理情報216を保持する。
サーバアクセス計測部211は、サーバモジュール110が管理する記憶領域(ブロック)のアクセス数を計測する。アクセスカウンタ入替制御部212は、所定の条件に基づいて、サーバモジュール110がアクセス数を計測するブロックを入れ替える。
アクセス振り分け部213は、アプリケーション201から入力されたI/O要求の出力先を振り分ける。キャッシュデータ入替制御部214は、キャッシュメモリシステム120のキャッシュ領域に格納するデータの入れ替えを制御する。
タイマ217は、アクセスカウンタ入替制御部212及びキャッシュデータ入替制御部214の処理開始の契機を管理する。
サーバアクセス管理情報215は、サーバモジュール110が管理するブロックのアクセス数等に関する情報を格納する。サーバアクセス管理情報215の詳細は図3を用いて後述する。
キャッシュ管理情報216は、キャッシュメモリシステム120に格納されるキャッシュデータに関する情報を格納する。キャッシュ管理情報216の詳細は図4を用いて後述する。
次に、共有ストレージシステム130のソフトウェア構成について説明する。共有ストレージシステム130のメモリ133は、ストレージ制御部250を実現するプログラムを格納する。当該プログラムは、プロセッサ132によって実行される。
ストレージ制御部250は、共有ストレージシステム130を制御する。本実施例では、複数の記憶媒体136を用いてRAIDが構成される。ストレージ制御部250は、RAIDボリュームを論理的に分割することによって、複数のLUを生成し、生成された複数のLUをサーバモジュール110に提供する。また、ストレージ制御部250は、LUと記憶媒体136との対応関係を示す管理情報(図示省略)を保持する。
また、ストレージ制御部250は、ストレージアクセス計測部251を含み、また、ストレージアクセス管理情報252を保持する。
ストレージアクセス計測部251は、共有ストレージシステム130が管理する記憶領域(ブロックグループ)のアクセス数を計測する。
ストレージアクセス管理情報252は、共有ストレージシステム130が管理するブロックグループのアクセス数等に関する情報を格納する。ストレージアクセス管理情報252の詳細は図5を用いて後述する。
なお、ストレージ制御部250は、LUの管理機能、及びデータ転送機能等の各種機能を有するが、公知の技術であるため詳細な説明を省略する。
本実施例では、ストレージ制御部250は、複数のブロックから構成されるブロックグループ単位に全記憶領域のアクセス数を管理する。また、キャッシュドライバ210は、アプリケーション201によってアクセスされたブロックグループのうち、所定の条件に基づいて、アクセス数を管理するブロックグループを決定し、決定されたブロックグループを構成するブロックのアクセス数を管理する。すなわち、キャッシュドライバ210は、共有ストレージシステム130の全記憶領域(LUの全ブロック)のうち、一部の記憶領域(ブロック)のアクセス数のみを管理する。
以下の説明では、アプリケーション201によってアクセスされたブロックグループのうち、詳細なアクセス数を管理するブロックグループとして決定されたブロックグループを対象ブロックグループと記載し、対象ブロック以外のブロックグループを対象外ブロックグループとも記載する。
図3は、本発明の実施例1におけるサーバアクセス管理情報215の一例を示す説明図である。
サーバアクセス管理情報215は、アクセスカウンタエントリ最大数300、ブロックサイズ310、ブロックグループサイズ320、サーバアクセスカウンタ330、及びサーバアクセス領域340を含む。
アクセスカウンタエントリ最大数300は、サーバアクセスカウンタ330に登録可能なエントリ数である。すなわち、キャッシュドライバ210が、管理可能な対象ブロックグループの数を示す。後述するように、本実施例では、キャッシュドライバ210は、アクセスカウンタエントリ最大数300の数の範囲内で対象ブロックグループを決定する。
ブロックサイズ310は、ブロックのサイズである。本実施例では、キャッシュメモリシステム120には、ブロック単位にデータが格納される。ブロックグループサイズ320は、ブロックグループのサイズである。
サーバアクセスカウンタ330は、対象ブロックグループを構成するブロック毎のアクセス数を管理するための情報である。サーバアクセスカウンタ330は、ブロックグループアドレス331、エントリ有効ビット332、共有ストレージアドレス333、リード回数334、及びライト回数335を含む。
本実施例のブロックグループは、アドレスが連続する複数のブロックから構成されるものとする。なお、本実施例のブロックグループの構成は、一例であって、アドレスが連続しない複数のブロックから構成されてもよい。
ブロックグループアドレス331は、ブロックグループの先頭のアドレスである。
エントリ有効ビット332は、ブロックグループアドレス331に対応する対象ブロックグループのエントリが有効であるか否かを示すビットである。本実施例では、エントリ有効ビット332が「1」の場合、エントリが有効であることを示し、エントリ有効ビット332が「0」の場合、エントリが無効であることを示す。
エントリ有効ビット332が「0」のエントリには、後述するアクセスカウンタ入替処理において、新たな対象ブロックグループの情報が格納されることとなる。
共有ストレージアドレス333は、ブロックグループアドレス331に対応する対象ブロックグループを構成する各ブロックの先頭アドレスである。
リード回数334は、共有ストレージアドレス333に対応するブロックに対するリード処理の回数である。ライト回数335は、共有ストレージアドレス333に対応するブロックに対するライト処理の回数である。
サーバアクセス領域340は、サーバモジュール110がアクセスしたブロックグループに関する情報である。サーバアクセス領域340は、ブロックグループアドレス341、アクセスビット342、及びサーバアクセスカウンタ存在ビット343を含む。
ブロックグループアドレス341は、ブロックグループの先頭アドレスである。
アクセスビット342は、ブロックグループアドレス341に対応するブロックグループにアクセスしたか否かを示すビットである。
本実施例では、アクセスビット342が「1」の場合、サーバモジュール110がブロックグループアドレス341に対応するブロックグループにアクセスしたことを示し、アクセスビット342が「0」の場合、サーバモジュール110がブロックグループアドレス341に対応するブロックグループにアクセスしていないことを示す。
サーバアクセスカウンタ存在ビット343は、ブロックグループアドレス341に対応するブロックグループを構成するブロックのアクセス数が管理されているか否かを示すビットである。すなわち、ブロックグループアドレス341に対応するブロックグループが対象ブロックグループとしてサーバアクセスカウンタ330に登録されているか否かを示すビットである。
本実施例では、サーバアクセスカウンタ存在ビット343が「1」の場合、ブロックグループアドレス341に対応するブロックグループのエントリがサーバアクセスカウンタ330に登録されていることを示し、サーバアクセスカウンタ存在ビット343が「0」の場合、ブロックグループアドレス341に対応するブロックグループのエントリがサーバアクセスカウンタ330に登録されていないことを示す。
サーバアクセス領域340には、ストレージ制御部250が管理する全てのブロックグループに対応するエントリが登録される。これによって、サーバモジュール110は、どのブロックグループにアクセスしたかを把握することができる。
図4は、本発明の実施例1におけるキャッシュ管理情報216の一例を示す説明図である。
キャッシュ管理情報216は、キャッシュエントリ最大数400及びキャッシュ対応テーブル410を含む。
キャッシュエントリ最大数400は、キャッシュ対応テーブル410に登録可能なエントリ数である。すなわち、キャッシュドライバ210が管理するキャッシュ領域の数を示す。
キャッシュ対応テーブル410は、共有ストレージシステム130上のアドレスとキャッシュメモリシステム120との対応を示す。キャッシュ対応テーブル410は、キャッシュメモリアドレス411、共有ストレージアドレス412、及びキャッシュ有効ビット413を含む。
キャッシュメモリアドレス411は、キャッシュメモリシステム120のキャッシュ領域の先頭アドレスである。
共有ストレージアドレス412は、キャッシュメモリアドレス411に対応するキャッシュ領域に格納されたデータの共有ストレージシステム130における格納位置、すなわち、ブロックの先頭アドレスである。
キャッシュ有効ビット413は、キャッシュメモリアドレス411に対応するキャッシュ領域に読み出し可能なデータが格納されているか否かを示すビットである。本実施例では、キャッシュ有効ビット413が「1」の場合、キャッシュ領域に読み出し可能なデータが格納されていることを示し、キャッシュ有効ビット413が「0」の場合、キャッシュ領域に読み出し可能なデータが格納されていないことを示す。
図5は、本発明の実施例1におけるストレージアクセス管理情報252の一例を示す説明図である。
ストレージアクセス管理情報252は、ブロックグループサイズ500及びストレージアクセスカウンタ510を含む。
ブロックグループサイズ500は、ブロックグループのサイズであり、サーバアクセス管理情報215のブロックグループサイズ320と同一のものである。本実施例では、ストレージ制御部250は、ブロックグループ毎にアクセス数を管理する。
ストレージアクセスカウンタ510は、ストレージ制御部250がブロックグループ毎のアクセス数を管理するための情報である。ストレージアクセスカウンタ510は、ブロックグループアドレス511、リード回数512、及びライト回数513を含む。
ブロックグループアドレス511は、ブロックグループの先頭アドレスである。リード回数512は、ブロックグループに対するリード処理の回数である。ライト回数513は、ブロックグループに対するライト処理の回数である。リード回数512及びライト回数513は、それぞれ、ブロックグループを構成するブロックに対するリード処理の回数及びライト処理の回数の合計値を表す。
本実施例では、複数のサーバモジュール110に対して一つのストレージアクセス管理情報252を保持するものとする。なお、ストレージ制御部250は、サーバモジュール110毎にストレージアクセス管理情報252を保持してもよい。
図3及び図4に示すように、キャッシュドライバ210は、アプリケーション201によってアクセスされたブロックグループの中の一部のブロックグループ(対象ブロックグループ)について、ブロック単位のアクセス数を管理し、当該一部のブロックグループを構成するブロックのアクセス数に基づいて、キャッシュメモリシステム120へのキャッシュ制御を行う。
また、図5に示すように、ストレージ制御部250は、ブロックグループ単位のアクセス数を管理する。
図6は、本発明の実施例1におけるタイマ217の構成例を示す説明図である。
タイマ217は、タイマ・カウンタ600、アクセスカウンタ入替処理割込タイミング610、及びキャッシュデータ入替処理割込タイミング620を含む。
アクセスカウンタ入替処理割込タイミング610は、後述するアクセスカウンタ入替処理の実行タイミングである。キャッシュデータ入替処理割込タイミング620は、後述するキャッシュデータ入替処理の実行タイミングである。
タイマ・カウンタ600は、各割込タイミングにしたがって、処理の開始を指示する。具体的には、タイマ・カウンタ600は、アクセスカウンタ入替処理割込タイミング610に示される時間毎に、アクセスカウンタ入替制御部212に処理開始の割込を発生させ、また、キャッシュデータ入替処理割込タイミング620で示される時間毎に、キャッシュデータ入替制御部214に処理開始の割込を発生させる。
本実施例では、計測されたアクセス数を管理するアクセス管理情報(アクセスカウンタ)がサーバアクセス管理情報215とストレージアクセス管理情報252との二つに分かれている点に特徴である。
ストレージアクセス管理情報252では、共有ストレージシステム130の全ての記憶領域に対するアクセス数が、ブロックグループ単位に管理される。一方、サーバアクセス管理情報215では、共有ストレージシステム130の一部のブロックグループのアクセス数が、ブロック単位に管理される。
そのため、サーバモジュール110は、共有ストレージシステム130の全ての記憶領域のアクセス数をブロック単位で管理する場合と比較して、メモリ112の使用容量を削減することができる。また、共有ストレージシステム130自身がアクセス数を管理しているため、共有ストレージシステム130は、当該アクセス数を用いて独自に共有ストレージシステム130内のデータの配置を決めることができる。
前述したようなアクセス数の管理方法を実現するためには、サーバモジュール110が、共有ストレージシステム130の記憶領域(ブロックグループ)の中から、ブロック単位のアクセス数を管理する記憶領域(対象ブロックグループ)を適切に決定し、また、アクセス状況に応じて対象ブロックグループを動的に変更する必要がある。
次に、図7、図8及び図9を用いて、アプリケーション201からI/O要求が発行された場合に実行される処理を説明する。
図7は、本発明の実施例1におけるサーバアクセス計測部211が実行するアクセス数計測処理を説明するフローチャートである。
アプリケーション201からI/O要求が発行されると、まず、キャッシュドライバ210のサーバアクセス計測部211に当該I/O要求が入力される。このとき、サーバアクセス計測部211は、アクセス数計測処理を開始する。
サーバアクセス計測部211は、サーバアクセスカウンタ330を参照し、I/O要求の宛先アドレスに一致するエントリを検索する(ステップS100)。
具体的には、サーバアクセス計測部211は、共有ストレージアドレス333がI/O要求の宛先アドレスに一致するエントリを検索する。
本実施例では、キャッシュドライバ210は、共有ストレージシステム130の全記憶領域のうち、一部の記憶領域(対象ブロックグループを構成するブロック)のアクセス数のみを管理する。そのため、サーバアクセス管理情報215には、共有ストレージシステム130の対象ブロックグループを構成するブロックのアクセス数が格納される。したがって、I/O要求の宛先アドレスが対象ブロックグループを構成するブロックを示すアドレスでない場合、サーバアクセスカウンタ330にはI/O要求の宛先アドレスに一致するエントリが存在しないこととなる。
以下、実施例1におけるキャッシュドライバ210及びストレージ制御部250が実行する処理について説明する。
サーバアクセス計測部211は、検索結果に基づいて、サーバアクセスカウンタ330にI/O要求の宛先アドレスに一致するエントリが存在するか否かを判定する(ステップS101)。
サーバアクセスカウンタ330にI/O要求の宛先アドレスに一致するエントリが存在しないと判定された場合、サーバアクセス計測部211は、ステップS103に進む。
サーバアクセスカウンタ330にI/O要求の宛先アドレスに一致するエントリが存在すると判定された場合、サーバアクセス計測部211は、I/O要求の種別に基づいて、当該エントリのリード回数334又はライト回数335の値を「1」加算する(ステップS102)。
具体的には、サーバアクセス計測部211は、I/O要求の種別がリードの場合にはリード回数334の値を「1」加算し、I/O要求の種別がライトの場合にはライト回数335の値を「1」加算する。
サーバアクセス計測部211は、サーバアクセス領域340を参照し、I/O要求の宛先アドレスに対応するエントリのアクセスビット342を更新し(ステップS103)、処理を終了する。具体的には以下のような処理が実行される。
サーバアクセス計測部211は、サーバアクセス領域340のブロックグループアドレス341を参照し、I/O要求の宛先アドレスが含まれるブロックグループに対応するエントリを検索する。例えば、I/O要求のアドレスが「0x10002000」の場合、図3に示すサーバアクセス領域340の一番上のエントリが当該宛先アドレスに対応するエントリとして検索される。
サーバアクセス計測部211は、検索されたエントリのアクセスビット342を参照し、アクセスビット342が「0」の場合には「1」に更新する。なお、アクセスビット342が「1」の場合には特に処理は実行されない。
以上が、ステップS103の処理の説明である。なお、ステップS103の処理結果は、後述するようにアクセスカウンタ入替制御部212によって利用される。
図8は、本発明の実施例1におけるアクセス振り分け部213が実行するアクセス振り分け処理を説明するフローチャートである。
I/O要求は、サーバアクセス計測部211の次に、アクセス振り分け部213に入力される。このとき、アクセス振り分け部213は、アクセス振り分け処理を開始する。
まず、アクセス振り分け部213は、キャッシュ管理情報216のキャッシュ対応テーブル410を参照し、I/O要求の宛先アドレスに一致するエントリを検索する(ステップS200)。
具体的には、アクセス振り分け部213は、共有ストレージアドレス412がI/O要求の宛先アドレスと一致するエントリを検索する。エントリが存在する場合、アクセス振り分け部213は、さらに、検索されたエントリのキャッシュ有効ビット413が「1」であるか否かを判定する。
アクセス振り分け部213は、検索結果に基づいて、キャッシュ対応テーブル410にI/O要求の宛先アドレスに一致するエントリが存在し、かつ、当該エントリのキャッシュ有効ビット413が「1」であるか否かを判定する(ステップS201)。すなわち、I/O要求の宛先アドレスに対応するブロックのブロックデータが、キャッシュメモリシステム120に格納されているか否かが判定される。
キャッシュ対応テーブル410にI/O要求の宛先アドレスに一致するエントリが存在しない場合、又は、キャッシュ対応テーブル410にI/O要求の宛先アドレスに一致するエントリが存在するが、当該エントリのキャッシュ有効ビット413が「1」ではない場合、アクセス振り分け部213は、入力されたI/O要求を共有ストレージシステム130に出力し、処理を終了する。すなわち、キャッシュメモリシステム120に対象となるブロックデータが格納されていない場合には、I/O要求は、そのまま、共有ストレージシステム130に送信される。
キャッシュ対応テーブル410にI/O要求の宛先アドレスに一致するエントリが存在し、かつ、当該エントリのキャッシュ有効ビット413が「1」であると判定された場合、すなわち、キャッシュメモリシステム120にI/O要求の対象となるブロックデータが格納されていると判定された場合、アクセス振り分け部213は、I/O要求の種別がリードであるか否かを判定する(ステップS202)。
I/O要求の種別がリードであると判定された場合、アクセス振り分け部213は、I/O要求をキャッシュメモリシステム120へのI/O要求(リード要求)に変換し(ステップS203)、処理を終了する。
具体的には、アクセス振り分け部213は、I/O要求の宛先アドレスを、ステップS200において検索されたエントリのキャッシュメモリアドレス411に格納されるアドレスに変更する。さらに、アクセス振り分け部213は、変換されたI/O要求をキャッシュメモリシステム120に入力する。
これによって、キャッシュメモリシステム120からI/O要求の対象となるブロックデータが読み出される。
ステップS202において、I/O要求の種別がライトであると判定された場合、アクセス振り分け部213は、キャッシュメモリシステム120へのI/O要求(ライト要求)を生成し(ステップS204)、処理を終了する。
具体的には、アクセス振り分け部213は、I/O要求の宛先アドレスに、ステップS200において検索されたエントリのキャッシュメモリアドレス411に格納されるアドレスが設定されたI/O要求を生成する。さらに、アクセス振り分け部213は、最初に入力されたI/O要求を共有ストレージシステム130に入力し、また、新たに生成されたI/O要求をキャッシュメモリシステム120に入力する。
これによって、共有ストレージシステム130及びキャッシュメモリシステム120の双方に格納されるブロックデータが更新される。
S204において、共有ストレージシステム130にもI/O要求を送信する理由は、キャッシュメモリシステム120において障害が発生した場合に、共有ストレージシステム130から更新後のデータを取得することができ、データの可用性を向上させることができるためである。
なお、ステップS204の処理の代わりに、アクセス振り分け部213が、キャッシュ対応テーブル410から検索されたエントリのキャッシュ有効ビット413を「0」に変更することによって、当該エントリを無効化する処理、又は、I/O要求の宛先アドレスをキャッシュメモリシステム120に変更する処理を実行してもよい。
図9は、本発明の実施例1におけるストレージアクセス計測部251が実行するアクセス計測処理を説明するフローチャートである。
ストレージ制御部250は、サーバモジュール110から出力されたI/O要求を受け付けると、当該I/O要求を、ストレージアクセス計測部251に入力する。このとき、ストレージアクセス計測部251は、アクセス計測処理を開始する。
ストレージアクセス計測部251は、ストレージアクセスカウンタ510を参照し、I/O要求の宛先アドレスに対応するエントリを検索する(ステップS300)。
具体的には、ストレージアクセス計測部251は、ストレージアクセスカウンタ510のブロックグループアドレス511を参照し、I/O要求の宛先アドレスが含まれるブロックグループに対応するエントリを検索する。
ストレージアクセスカウンタ510には、共有ストレージシステム130の全記憶領域(全ブロックグループ)のアクセス数が管理されているため、ステップS300の処理では、必ずいずれか一つのエントリが検索される。
ストレージアクセス計測部251は、I/O要求の種別に基づいて、検索されたエントリのリード回数512又はライト回数513の値を「1」加算し(ステップS301)、処理を終了する。
具体的には、ストレージアクセス計測部251は、I/O要求の種別がリードの場合にはリード回数512の値を「1」加算し、I/O要求の種別がライトの場合にはライト回数513の値を「1」加算する。
図7、図8及び図9を用いて説明したように、アプリケーション201から発行されたI/O要求に対して、サーバアクセス計測部211はブロック単位にアクセス数を計測し、ストレージアクセス計測部251はブロックグループ単位にアクセス数を計測し、アクセス振り分け部213はキャッシュヒット/ミスヒットの判定を行う。
以下、図10を用いてアクセスカウンタ入替処理について説明し、図11を用いてキャッシュデータの入替処理について説明する。
図10は、本発明の実施例1におけるアクセスカウンタ入替制御部212が実行するアクセスカウンタ入替処理を説明するフローチャートである。
アクセスカウンタ入替処理では、アクセスカウンタ入替制御部212が、アプリケーション201によってアクセスされたブロックグループを特定し、特定されたブロックグループのアクセス数に基づいて対象ブロックグループを決定する。
このとき、対象ブロックグループのアクセス数はサーバアクセス管理情報215から取得され、対象外ブロックグループのアクセス数はストレージアクセス管理情報252から取得される。これは、以下のような理由のためである。
(理由1)対象ブロックグループを構成するブロックは、キャッシュ制御の対象となる。そのため、対象ブロックグループを構成するブロックのブロックデータがキャッシュメモリシステム120に格納された場合、当該ブロックデータに対するアクセス数は、サーバモジュール110によって管理されるため、共有ストレージシステム130側では正確なアクセス数を把握できない。例えば、リード要求の対象となるデータがキャッシュメモリシステム120に格納される場合、共有ストレージシステム130にはリード要求が送信されないため、共有ストレージシステム130は当該リード要求を把握できない。したがって、対象ブロックグループのアクセス数は、サーバアクセス管理情報215から取得される。
(理由2)一方、サーバモジュール110は、対象ブロックグループのアクセス数のみを管理するため、対象外ブロックグループのアクセス数を把握できない。したがって、対象外ブロックグループのアクセス数は、ストレージアクセス管理情報252から取得される。
以下、アクセスカウンタ入替処理の具体的な処理について説明する。
タイマ・カウンタ600は、アクセスカウンタ入替処理割込タイミング610にしたがって、アクセスカウンタ入替制御部212に、処理の開始を通知する割り込みを発生させる。
アクセスカウンタ入替制御部212は、タイマ・カウンタ600からの割り込みを受け付けると(ステップS400)、処理を開始する。
アクセスカウンタ入替制御部212は、サーバアクセスカウンタ330を参照し、対象ブロックグループのアクセス数を取得する(ステップS401)。
具体的には、アクセスカウンタ入替制御部212は、サーバアクセスカウンタ330を参照し、対象ブロックグループを構成するブロックのアクセス数を取得し、取得された各ブロックのアクセス数の合計値を算出する。すなわち、アクセスカウンタ入替制御部212は、ブロックグループアドレス331に含まれる各共有ストレージアドレス333のリード回数334及びライト回数335を取得し、取得されたリード回数334の合計値及び取得されたライト回数335の合計値を算出する。
例えば、図3に示す例では、ブロックグループアドレス331が「0x10000000」のブロックグループのリード回数は、共有ストレージアドレス333に対応する五つのブロックのリード回数334を合計することによって「17」と算出され、当該ブロックグループのライト回数は、共有ストレージアドレス333に対応する五つブロックのライト回数335を合計することによって「12」と算出される。
アクセスカウンタ入替制御部212は、サーバモジュール110によってアクセスされたブロックを含むブロックグループの中から、対象外ブロックグループを特定する(ステップS402)。これは、サーバモジュール110が一部のブロックグループ、すなわち、対象ブロックグループのアクセス数のみを管理しているためである。
具体的には、アクセスカウンタ入替制御部212は、サーバアクセス領域340を参照し、アクセスビット342が「1」、かつ、サーバアクセスカウンタ存在ビット343が「0」であるエントリを検索する。
ここで、本実施例では、ストレージアクセス管理情報252には、複数のサーバモジュール110がアクセスしたブロックグループのアクセス数も管理されている。そのため、サーバモジュール110は、自身がアクセスしたブロックグループのアクセス数のみを取得すればよい。したがって、ステップS402において、アクセスカウンタ入替制御部212は、アクセスビット342が「1」であるエントリの中から対象外ブロックグループを検索する。
アクセスカウンタ入替制御部212は、共有ストレージシステム130から、特定された対象外ブロックグループのアクセス数を取得する(ステップS403)。
具体的には、アクセスカウンタ入替制御部212は、検索されたエントリのブロックグループアドレス341が含まれる取得要求を、共有ストレージシステム130に送信する。
このとき、ストレージ制御部250は、当該取得要求を受け付けると、ストレージアクセス管理情報252のストレージアクセスカウンタ510を参照し、ブロックグループアドレス511が、取得要求に含まれるブロックグループアドレス341と一致するエントリを検索する。さらに、ストレージ制御部250は、検索されたエントリのリード回数512及びライト回数513をアクセスカウンタ入替制御部212に送信する。
次に、アクセスカウンタ入替制御部212は、サーバアクセスカウンタ330及びストレージアクセスカウンタ510のそれぞれから取得されたブロックグループのアクセス数に基づいて、サーバアクセスカウンタ330に登録するブロックグループ、すなわち、対象ブロックグループを決定する(ステップS404)。
例えば、アクセスカウンタ入替制御部212は、ブロックグループのリード回数及びライト回数の合計値が大きい順に、アクセスカウンタエントリ最大数300の範囲内で対象ブロックグループを決定する。
なお、前述した判定方法は一例であって、本発明はこれに限定されない。例えば、リード回数が大きい順に対象ブロックグループが決定されてもよい。
アクセスカウンタ入替制御部212は、決定された対象ブロックグループの情報に基づいて、サーバアクセスカウンタ330を更新することによって、対象ブロックグループを入れ替える(ステップS405)。具体的には、以下のような処理が実行される。
アクセスカウンタ入替制御部212は、入れ替え前の対象ブロックグループのアドレスと、ステップS404において決定された対象ブロックグループのアドレスとを比較することによって、対象ブロックグループから除外されるブロックグループ、すなわち、サーバアクセスカウンタ330から削除されるブロックグループを特定する。さらに、アクセスカウンタ入替制御部212は、削除されるブロックグループのエントリのエントリ有効ビット332に「0」を設定する。
アクセスカウンタ入替制御部212は、ステップS404において決定された対象ブロックグループのうち、サーバアクセスカウンタ330に未登録の対象ブロックグループに対応するエントリを、当該サーバアクセスカウンタ330に登録する。
より具体的には、アクセスカウンタ入替制御部212は、エントリ有効ビット332が「0」のエントリのブロックグループアドレス331に未登録の対象ブロックグループのアドレスを設定する。さらに、アクセスカウンタ入替制御部212は、当該ブロックグループをブロック単位に分割し、各ブロックのアドレスを当該エントリの共有ストレージアドレス333に設定する。さらに、アクセスカウンタ入替制御部212は、当該エントリのリード回数334及びライト回数335に初期値を設定する。
初期値は、例えば、リード回数334及びライト回数335のそれぞれに「0」を設定してもよいし、下式(2)及び下式(3)に基づいて算出された値を設定してもよい。
なお、式(2)のリード回数、ブロックグループサイズ、及びブロックサイズには、リード回数512の値、ブロックグループサイズ320の値、及びブロックサイズ310の値が代入される。また、式(3)のライト回数、ブロックグループサイズ、及びブロックサイズには、ライト回数513の値、ブロックグループサイズ320の値、及びブロックサイズ310の値が代入される。
その後、アクセスカウンタ入替制御部212は、サーバアクセスカウンタ330に新たに登録された対象ブロックグループに対応するエントリのエントリ有効ビット332に「1」を設定する。
以上がステップS405の処理の説明である。
次に、アクセスカウンタ入替制御部212は、サーバアクセス領域340を更新し(ステップS406)、処理を終了する。
具体的には、アクセスカウンタ入替制御部212は、サーバアクセス領域340の全てのエントリのアクセスビット342に「0」を設定する。さらに、アクセスカウンタ入替制御部212は、サーバアクセスカウンタ330に登録されている対象ブロックグループに対応するエントリのサーバアクセスカウンタ存在ビット343に「1」を設定し、サーバアクセスカウンタ330に登録されていない対象外ブロックグループに対応するエントリのサーバアクセスカウンタ存在ビット343に「0」を設定する。
なお、ストレージ制御部250がサーバモジュール110毎にストレージアクセス管理情報252を保持する場合、アクセスカウンタ入替制御部212は、ステップS402の処理の代わりに、サーバモジュール110の識別情報とを送信してもよい。このとき、ストレージ制御部250は、当該サーバモジュール110に対応するストレージアクセス管理情報252をアクセスカウンタ入替制御部212に送信することとなる。
図11は、本発明の実施例1におけるキャッシュデータ入替制御部214が実行するキャッシュデータ入替処理を説明するフローチャートである。
タイマ・カウンタ600は、キャッシュデータ入替処理割込タイミング620にしたがって、キャッシュデータ入替制御部214に、処理の開始を通知する割り込みを発生させる。
キャッシュデータ入替制御部214は、タイマ・カウンタ600からの割り込みを受け付けると、処理を開始する(ステップS500)。
キャッシュデータ入替制御部214は、サーバアクセスカウンタ330に基づいて、キャッシュメモリシステム120に格納するブロックデータを決定する(ステップS501)。具体的には、以下のような処理が実行される。
キャッシュデータ入替制御部214は、サーバアクセスカウンタ330を参照し、共有ストレージアドレス333毎、すなわち、ブロック毎にリード回数334及びライト回数335を取得する。すなわち、ブロック毎のリード回数及びライト回数が取得される。
キャッシュデータ入替制御部214は、各ブロックのリード回数及びライト回数に基づいて、キャッシュエントリ最大数400の範囲内で、キャッシュメモリシステム120に格納するブロックデータを決定する。
例えば、リード回数334及びライト回数335の合計値が大きい順、若しくは、リード回数334の値が大きい順に決定する方法、又は、重み付けが行われたリード回数334及びライト回数335に基づいて決定する方法などが考えられる。なお、前述した方法は一例であって、本発明はこれに限定されない。
以上がステップS501の処理の説明である。
次に、キャッシュデータ入替制御部214は、キャッシュ対応テーブル410を参照し、ステップS501の処理結果に基づいて、キャッシュ領域から追い出されるブロックデータに対応するエントリを更新する(ステップS502)。具体的には、以下のような処理が実行される。
キャッシュデータ入替制御部214は、現在キャッシュ領域に格納されるブロックデータのアドレスのリスト(第1アドレスリスト)と、新たにキャッシュ領域に格納されるブロックデータのアドレスのリスト(第2アドレスリスト)とを比較する。
キャッシュデータ入替制御部214は、比較の結果に基づいて、現在キャッシュ領域に格納されるブロックデータの中から、第2アドレスリストに含まれないブロックデータを検索する。キャッシュデータ入替制御部214は、検索されたブロックデータをキャッシュ領域から追い出されるブロックデータに決定する。
キャッシュデータ入替制御部214は、キャッシュ対応テーブル410を参照し、キャッシュメモリアドレス411が、決定されたブロックデータを格納するキャッシュ領域のアドレスと一致するエントリのキャッシュ有効ビット413に「0」を設定する。
以上がステップS502の処理の説明である。
キャッシュデータ入替制御部214は、キャッシュメモリシステム120に、新たなブロックデータを格納し(ステップS503)、処理を終了する。具体的には、以下のような処理が実行される。
キャッシュデータ入替制御部214は、キャッシュ有効ビット413が「0」であるエントリの共有ストレージアドレス412に、共有ストレージシステム130における新たなブロックデータのアドレスを登録する。
キャッシュデータ入替制御部214は、当該エントリの共有ストレージアドレス412に対応する記憶領域(ブロック)からブロックデータを読み出し、キャッシュメモリアドレス411に対応するキャッシュ領域に読み出されたデータを格納する。また、キャッシュデータ入替制御部214は、当該エントリのキャッシュ有効ビット413に「1」を設定する。
なお、キャッシュデータ入替処理の実行中に、新たなブロックデータが格納されるキャッシュ領域へのライト要求が発行された場合、キャッシュデータ入替制御部214は、キャッシュメモリシステム120へのライト処理をキャンセルし、代わりに当該キャッシュ領域へのライトが行われるように制御する。
図12を用いて、実施例1における計算機システムの初期化処理について説明する。
図12は、本発明の実施例1におけるキャッシュドライバ210が実行する初期化処理を説明するフローチャートである。
キャッシュドライバ210は、管理者から設定情報の入力を受け付けると(ステップS600)、初期化処理を開始する。
設定情報には、サーバアクセスカウンタ330のエントリ数、ブロックのサイズ、ブロックグループのサイズ、キャッシュメモリシステム120のキャッシュ容量、キャッシュメモリシステム120におけるキャッシュ領域のアドレス範囲、共有ストレージシステム130の記憶領域のアドレス範囲、アクセスカウンタ入替処理の実行間隔、及びキャッシュデータ入替処理の実行間隔等が含まれる。
なお、管理者は、サーバモジュール110に対して直接、設定情報を入力してもよいし、管理サーバ(図示省略)を用いて、設定情報を入力してもよい。
キャッシュドライバ210は、設定情報に基づいて、サーバアクセス管理情報215を初期化する(ステップS601)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、アクセスカウンタエントリ最大数300に設定情報に含まれるサーバアクセスカウンタ330のエントリ数を設定する。キャッシュドライバ210は、ブロックサイズ310及びブロックグループサイズ320のそれぞれに、設定情報に含まれるブロックのサイズ及びブロックグループのサイズを設定する。
キャッシュドライバ210は、サーバアクセスカウンタ330にアクセスカウンタエントリ最大数300の数だけエントリを生成し、生成されたエントリのエントリ有効ビット332に「0」を設定する。
キャッシュドライバ210は、ブロックグループのサイズ、共有ストレージシステム130の記憶領域のアドレス範囲に基づいて、サーバアクセス領域340のブロックグループアドレス341に、ブロックグループサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのアクセスビット342及びサーバアクセスカウンタ存在ビット343に「0」を設定する。
以上がステップS601の処理の説明である。
次に、キャッシュドライバ210は、キャッシュ管理情報216を初期化する(ステップS602)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、キャッシュエントリ最大数400に、下式(4)を用いて算出される値を設定する。なお、式(4)のブロックサイズには、ブロックサイズ310の値が代入される。また、式(4)のキャッシュメモリシステムのキャッシュ容量には、設定情報に含まれるキャッシュメモリシステム120のキャッシュ容量が代入される。
キャッシュドライバ210は、ブロックのサイズ、及びキャッシュメモリシステム120の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル410のキャッシュメモリアドレス411に、ブロックサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのキャッシュ有効ビット413に「0」を設定する。
以上がステップS602の処理の説明である。
次に、キャッシュドライバ210は、ストレージ制御部250に設定情報を通知することによって、ストレージアクセス管理情報252の初期化を指示する(ステップS603)。
このとき、ストレージ制御部250は、ブロックグループサイズ500に、設定情報に含まれるブロックグループのサイズを設定する。また、ストレージ制御部250は、ブロックグループのサイズ、及び共有ストレージシステム130の記憶領域のアドレス範囲に基づいて、ストレージアクセスカウンタ510のブロックグループアドレス511に、ブロックグループサイズ毎のアドレスが設定されたエントリを生成する。また、ストレージ制御部250は、生成されたエントリのリード回数512及びライト回数513に「0」を設定する。
なお、RAIDの設定、及びLUの設定等、共有ストレージシステム130の初期化処理は、キャッシュドライバ210の初期化処理の前に実行されているものとする。共有ストレージシステム130の初期化は公知の技術を用いればよいため詳細な説明は省略する。
キャッシュドライバ210は、タイマ217を初期化し(ステップS604)、処理を終了する。
具体的には、キャッシュドライバ210は、アクセスカウンタ入替処理割込タイミング610及びキャッシュデータ入替処理割込タイミング620に、設定情報に含まれるアクセスカウンタ入替処理の実行間隔及びキャッシュデータ入替処理の実行間隔を設定する。
以上説明したように、実施例1によれば、サーバモジュール110は、共有ストレージシステム130の記憶領域のうち、一部の記憶領域(対象ブロックグループ)についてのみブロック単位のアクセス数を管理する。これによって、サーバモジュール110のメモリ112の使用量を削減できる。
また、サーバモジュール110は、ブロックグループ単位のアクセス数に基づいて、アプリケーション201によってアクセスされたブロックグループの中から、動的に対象ブロックグループを変更することによって、キャッシュ効率が高いブロックに対するキャッシュ制御を実現することができる。
次に、本発明の実施例2について説明する。
実施例2では、サーバモジュール110内で、アクセス管理情報(アクセスカウンタ)を階層化する点が実施例1と異なる。より具体的には、実施例1のブロックを下位階層ブロックとし、実施例1のブロックグループを上位階層ブロックとして、サーバモジュールが上位階層ブロック及び下位階層ブロックのアクセス数を管理する。
実施例2では、対象ブロックグループを対象上位階層ブロックと記載し、対象外ブロックグループを対象外上位ブロックと記載する。
以下、実施例1との差異を中心に説明する。なお、同一の符号を付した構成又は処理は、実施例1と同一の構成又は同一の処理であることを示す。
実施例2における計算機システムの構成、及び計算機システムのハードウェア構成は実施例1と同一であるため説明を省略する。
図13は、本発明の実施例2における計算機システムのソフトウェア構成の一例を示す説明図である。
実施例2では、キャッシュドライバ210の一部の構成が異なる。具体的には、実施例2のキャッシュドライバ210は、アクセスカウンタ入替制御部212の代わりにアクセス階層化カウンタ入替制御部1312を含み、また、サーバアクセス管理情報215の代わりにサーバアクセス階層化管理情報1315を保持する。その他の構成は実施例1と同一である。
また、実施例2では、共有ストレージシステム130はアクセス数を管理する必要がないため、実施例2のストレージ制御部250は、ストレージアクセス計測部251及びストレージアクセス管理情報252を有さない。
図14は、本発明の実施例2におけるサーバアクセス階層化管理情報1315の一例を示す説明図である。
サーバアクセス階層化管理情報1315は、下位階層アクセスカウンタエントリ最大数1400、下位階層ブロックサイズ1410、上位階層ブロックサイズ1420、下位階層サーバアクセスカウンタ1430、上位階層サーバアクセスカウンタ1440を含む。
下位階層アクセスカウンタエントリ最大数1400は、下位階層サーバアクセスカウンタ1430に登録可能なエントリ数である。すなわち、キャッシュドライバ210が管理可能な上位階層ブロックの数を示す。
下位階層ブロックサイズ1410は、下位階層ブロックのサイズである。本実施例では、キャッシュメモリシステム120には、下位階層ブロック単位にデータが格納される。上位階層ブロックサイズ1420は、上位階層ブロックのサイズである。
下位階層サーバアクセスカウンタ1430は、対象上位階層ブロックを構成する下位階層ブロック毎のアクセス数を管理するための情報であり、実施例1のサーバアクセスカウンタ330に対応する情報である。下位階層サーバアクセスカウンタ1430は、上位階層ブロックアドレス1431、データ有効ビット1432、下位階層ブロックアドレス1433、リード回数1434、及びライト回数1435を含む。
上位階層ブロックアドレス1431は、上位階層ブロックの先頭アドレスである。
データ有効ビット1432は、上位階層ブロックアドレス1431に対応する上位階層ブロックのエントリが有効であるか否かを示すビットである。
本実施例では、データ有効ビット1432が「1」の場合、エントリが有効であることを示し、データ有効ビット1432が「0」の場合、エントリが無効であることを示す。
下位階層ブロックアドレス1433は、上位階層ブロックアドレス1431に対応する上位階層ブロックを構成する下位階層ブロックの先頭アドレスである。
リード回数1434は、下位階層ブロックアドレス1433に対応する下位階層ブロックに対するリード処理の回数である。ライト回数1435は、下位階層ブロックアドレスに対応する下位階層ブロックに対するライト処理の回数である。
上位階層サーバアクセスカウンタ1440は、上位階層ブロック毎のアクセス数を管理するための情報であり、実施例1のストレージアクセスカウンタ510に対応する情報である。上位階層サーバアクセスカウンタ1440は、上位階層ブロックアドレス1441、リード回数1442、及びライト回数1443を含む。
上位階層ブロックアドレス1441は、上位階層ブロックの先頭アドレスである。リード回数1442は、上位階層ブロックに対するリード処理の回数である。ライト回数1443は、上位階層ブロックに対するライト処理の回数である。リード回数1442及びライト回数1443は、それぞれ、上位階層ブロックを構成する下位階層ブロックに対するリード処理の回数及びライト処理の回数の合計値を表す。
以下、実施例2におけるキャッシュドライバ210が実行する処理について説明する。
実施例2のアクセス数計測処理は、ステップS102の処理が実施例1のアクセス数計測処理と異なる。具体的には、サーバアクセス計測部211は、実施例1のステップS102と同様の処理によって、下位階層サーバアクセスカウンタ1430を更新する。またサーバアクセス計測部211は、実施例1のストレージ制御部250が実行するアクセス数計測処理と同一の処理に基づいて、上位階層サーバアクセスカウンタ1440を更新する。
実施例2のアクセス振り分け処理は、図8に示す実施例1の処理と同一であるため説明を省略する。
実施例2では、サーバモジュール110内でアクセス数を管理するアクセスカウンタが階層化される。すなわち、上位階層サーバアクセスカウンタ1440では、共有ストレージシステム130の全ての記憶領域に対するアクセス数が、上位階層ブロック単位に管理される。一方、下位階層サーバアクセスカウンタ1430では、共有ストレージシステム130の一部の上位階層ブロックのアクセス数が、ブロック単位に管理される。
そのため、サーバモジュール110は、共有ストレージシステム130の全ての記憶領域のアクセス数をブロック単位で管理する場合と比較して、メモリ112の使用容量を削減することができる。
前述したようなアクセス数の管理方法を実現するためには、サーバモジュール110は、共有ストレージシステム130の全ての記憶領域(全ての上位階層ブロック)の中から、下位階層ブロック単位のアクセス数を管理する記憶領域(対象上位階層ブロック)を適切に決定し、また、アクセス状況に応じて対象上位階層ブロックを動的に変更する必要がある。
以下、図15を用いて実施例2のアクセスカウンタ入替処理について説明する。
図15は、本発明の実施例2におけるアクセス階層化カウンタ入替制御部1312が実行するアクセスカウンタ入替処理を説明するフローチャートである。
タイマ・カウンタ600は、アクセスカウンタ入替処理割込タイミング610にしたがって、アクセス階層化カウンタ入替制御部1312に、処理の開始を通知する割り込みを発生させる。
アクセス階層化カウンタ入替制御部1312は、タイマ・カウンタ600からの割り込みを受け付けると(ステップS700)、処理を開始する。
アクセス階層化カウンタ入替制御部1312は、上位階層サーバアクセスカウンタ1440を参照し、各上位階層ブロックのアクセス数を取得する(ステップS701)。
アクセス階層化カウンタ入替制御部1312は、上位階層サーバアクセスカウンタ1440から取得された各上位階層ブロックのアクセス数に基づいて、下位階層サーバアクセスカウンタ1430にて管理する上位階層ブロック、すなわち、対象上位階層ブロックを決定する(ステップS702)。
例えば、アクセス階層化カウンタ入替制御部1312は、上位階層ブロックのリード回数及びライト回数の合計値が大きい順に、下位階層アクセスカウンタエントリ最大数1400の範囲内で対象上位階層ブロックを決定する。
なお、前述した判定方法は一例であって、本発明はこれに限定されない。例えば、リード回数が大きい順に対象上位階層ブロックが決定されてもよい。
アクセス階層化カウンタ入替制御部1312は、決定された対象上位階層ブロックの情報に基づいて、下位階層サーバアクセスカウンタ1430を更新することによって、対象上位階層ブロックを入れ替える(ステップS703)。その後、アクセス階層化カウンタ入替制御部1312は、処理を終了する。具体的には、以下のような処理が実行される。
アクセス階層化カウンタ入替制御部1312は、対象上位階層ブロックから除外される上位階層ブロック、すなわち、下位階層サーバアクセスカウンタ1430から削除される上位階層ブロックを特定する。さらに、アクセス階層化カウンタ入替制御部1312は、削除される上位階層ブロックのエントリのデータ有効ビット1432に「0」を設定する。なお、削除される上位ブロックの特定方法は、ステップS405と同一の方法である。
アクセス階層化カウンタ入替制御部1312は、ステップS702において決定された対象上位階層ブロックのうち、下位階層サーバアクセスカウンタ1430に未登録の対象上位階層ブロックに対応するエントリを、当該下位階層サーバアクセスカウンタ1430に登録する。
より具体的には、アクセス階層化カウンタ入替制御部1312は、データ有効ビット1432が「0」のエントリの上位階層ブロックアドレス1431に未登録の対象上位階層ブロックのアドレスを設定する。さらに、アクセス階層化カウンタ入替制御部1312は、当該上位階層ブロックを下位階層ブロック単位に分割し、各下位階層ブロックのアドレスを当該エントリの下位階層ブロックアドレス1433に設定する。さらに、アクセス階層化カウンタ入替制御部1312は、当該エントリのリード回数1434及びライト回数1435に初期値を設定する。
初期値は、例えば、リード回数1434及びライト回数1435のそれぞれに「0」を設定してもよいし、下式(5)及び(6)に基づいて算出された値を設定してもよい。
なお、式(5)のリード回数、上位階層ブロックサイズ、及び下位階層ブロックサイズには、リード回数1442の値、上位階層ブロックサイズ1420の値、及び下位階層ブロックサイズ1410の値が代入される。また、式(6)のライト回数、上位階層ブロックサイズ、及び下位階層ブロックサイズには、ライト回数1443の値、上位階層ブロックサイズ1420の値、及び下位階層ブロックサイズ1410の値が代入される。
その後、アクセス階層化カウンタ入替制御部1312は、下位階層サーバアクセスカウンタ1430に新たに登録された対象上位階層ブロックに対応するエントリのデータ有効ビット1432に「1」を設定する。
以上が、ステップS703の処理の説明である。
実施例2のキャッシュデータ入れ替え処理は、図11に示す実施例1の処理と同一のものであるため説明を省略する。
図16は、本発明の実施例2におけるキャッシュドライバ210が実行する初期化処理を説明するフローチャートである。サーバアクセス階層化管理情報1315を初期化する処理以外の処理は、実施例1と同一の処理である。
キャッシュドライバ210は、管理者から設定情報の入力を受け付けると(ステップS800)、処理を開始する。
設定情報には、下位階層サーバアクセスカウンタ1430のエントリ数、下位階層ブロックのサイズ、上位階層ブロックのサイズ、キャッシュメモリシステム120のキャッシュ容量、キャッシュメモリシステム120におけるキャッシュ領域のアドレス範囲、共有ストレージシステム130の記憶領域のアドレス範囲、アクセスカウンタ入替処理の実行間隔、及びキャッシュデータ入替処理の実行間隔等が含まれる。
なお、管理者は、サーバモジュール110に対して直接、設定情報を入力してもよいし、管理サーバ(図示省略)を用いて、設定を入力してもよい。
キャッシュドライバ210は、設定情報に基づいて、サーバアクセス階層化管理情報1315を初期化する(ステップS801)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、下位階層アクセスカウンタエントリ最大数1400に設定情報に含まれる下位階層サーバアクセスカウンタ1430のエントリ数を設定する。キャッシュドライバ210は、下位階層ブロックサイズ1410及び上位階層ブロックサイズ1420のそれぞれに、設定情報に含まれる下位階層ブロックのサイズ及び上位階層ブロックのサイズを設定する。
キャッシュドライバ210は、下位階層サーバアクセスカウンタ1430に下位階層アクセスカウンタエントリ最大数1400に数だけエントリを生成し、生成されたエントリのデータ有効ビット1432を「0」に設定する。
キャッシュドライバ210は、上位階層ブロックのサイズ、共有ストレージシステム130の記憶領域のアドレス範囲に基づいて、上位階層サーバアクセスカウンタ1440の上位階層ブロックアドレス1441に、上位階層ブロックサイズ毎のアドレスが設定されるエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのリード回数1442及びライト回数1443に「0」を設定する。
以上が、ステップS801の処理の説明である。
次に、キャッシュドライバ210は、キャッシュ管理情報216を初期化する(ステップS802)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、キャッシュエントリ最大数400に、下式(7)を用いて算出される値を設定する。なお、式(7)の下位階層ブロックサイズには、下位階層ブロックサイズ1410の値が代入される。また、式(7)のキャッシュメモリシステムのキャッシュ容量には、設定情報に含まれるキャッシュメモリシステム120のキャッシュ容量が代入される。
キャッシュドライバ210は、下位階層ブロックのサイズ、キャッシュメモリシステム120の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル410のキャッシュメモリアドレス411に、下位階層ブロックサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのキャッシュ有効ビット413に「0」を設定する。
以上が、ステップS802の処理の説明である。
キャッシュドライバ210は、タイマ217を初期化し(ステップS803)、処理を終了する。
具体的には、キャッシュドライバ210は、アクセスカウンタ入替処理割込タイミング610及びキャッシュデータ入替処理割込タイミング620に、設定情報に含まれるアクセスカウンタ入替処理の実行間隔及びキャッシュデータ入替処理の実行間隔を設定する。
実施例2では、キャッシュドライバ210は、共有ストレージシステム130の全記憶領域については上位階層ブロック単位にアクセス数を管理し、一部の上位階層ブロックについてのみ、下位階層ブロック単位のアクセス数を管理する。したがって、実施例1と同様に、サーバモジュール110のメモリ112の使用量を削減できる。また、サーバモジュール110は、キャッシュ効率が高いブロックに対するキャッシュ制御を実現することができる。
次に、本発明の実施例3について説明する。
実施例3では、サーバモジュール110が、共有ストレージシステム130の一部の記憶領域のブロック単位のアクセス数を管理するためのアクセス管理情報(アクセスカウンタ)を有する。
サーバモジュール110のキャッシュドライバ210は、時分割で、アクセス管理情報を用いてブロック単位のアクセス数を管理するブロックグループを決定する。また、サーバモジュール110のキャッシュドライバ210は、決定されたブロックグループを構成するブロック毎のアクセス数を管理する。
これによって、アクセス数を保持するために必要なサーバ側のメインメモリの記憶容量の削減することできる。
以下、実施例1との差異を中心に説明する。なお、同一の符号を付した構成又は処理は、実施例1と同一の構成又は同一の処理であることを示す。
実施例3における計算機システムの構成、及び計算機システムのハードウェア構成は実施例1と同一であるため説明を省略する。
図17は、本発明の実施例3における計算機システムのソフトウェア構成の一例を示す説明図である。
実施例3では、キャッシュドライバ210の一部の構成が異なる。具体的には、実施例3のキャッシュドライバ210は、サーバアクセス計測部211、アクセスカウンタ入替制御部212、キャッシュデータ入替制御部214の代わりに、サーバアクセス時分割計測部1711、アクセス時分割カウンタ入替制御部1712、キャッシュデータ時分割入替制御部1714を含む。また、実施例3のキャッシュドライバ210は、サーバアクセス管理情報215の代わりに、サーバアクセス時分割管理情報1715を保持する。その他の構成は実施例1と同一である。
また、実施例3では、共有ストレージシステム130は、アクセス数を管理する必要がないため、実施例3のストレージ制御部250は、ストレージアクセス計測部251及びストレージアクセス管理情報252を有さない。
図18は、本発明の実施例3におけるサーバアクセス時分割管理情報1715の一例を示す説明図である。
サーバアクセス時分割管理情報1715は、ブロックサイズ1810、ブロックグループ数1820、サーバ時分割アクセスカウンタ1830、及び対象ブロックグループ1840を含む。
ブロックサイズ1810は、ブロックのサイズである。ブロックグループ数1820は、ブロックグループの数である。ブロックグループ数1820は、また、時分割の数にも対応する。
実施例3では、キャッシュメモリシステム120の全記憶領域がブロックグループ数1820にしたがって分割される。図18に示す例では、共有ストレージシステム130の全記憶領域が四つのブロックグループに分割され、所定の時間周期毎に、各ブロックグループのアクセス数が管理される。
本実施例では、共有ストレージシステム130の全記憶領域のアドレスを、ブロックサイズ1810で除算することによって算出される余りをブロックグループ数1820で分類することによって、ブロックグループを構成するものとする。図18に示す例では、余りが「0」のブロックグループ、余りが「1」のブロックグループ、余りが「2」のブロックグループ、余りが「3」のブロックグループの四つのブロックグループが存在することとなる。
以下の説明では、現在、アクセス数が管理されるブロックグループを対象ブロックグループとも記載する。
実施例3では、キャッシュメモリシステム120の記憶領域もブロックグループ数1820と同一の数だけ分割される。例えば、下式(8)及び下式(9)を用いてキャッシュメモリシステム120のキャッシュ領域が分割される。すなわち、各ブロックグループには、式(8)の値から式(9)の値までの範囲のキャッシュメモリシステム120のキャッシュ領域が対応付けられる。
なお、式(8)及び式(9)のキャッシュエントリ最大数、及び対象ブロックグループには、キャッシュエントリ最大数400の値、及び対象ブロックグループ1840の値が代入される。
サーバ時分割アクセスカウンタ1830は、現在、アクセス数が管理されるブロックグループ、すなわち、対象ブロックグループを構成するブロック毎のアクセス数を管理するための情報である。サーバ時分割アクセスカウンタ1830は、共有ストレージアドレス1831、リード回数1832、及びライト回数1833を含む。
共有ストレージアドレス1831は、ブロックグループの先頭アドレスである。
本実施例では、前述したように、共有ストレージシステム130の全記憶領域のアドレスをブロックサイズ1810で除算した余りに基づいて、ブロックが分類される。したがって、アドレスが連続する複数のブロックは、それぞれ異なるブロックグループに所属する。図18に示す例では、余りが「0」のアドレスに対応するブロックの次にブロックは、余りが「1」のブロックグループに所属する。
そこで、本実施例では、時間周期毎に、サーバ時分割アクセスカウンタ1830において管理するブロックグループを変更する。
したがって、サーバ時分割アクセスカウンタ1830には、下式(10)を用いて算出されるアドレス範囲毎に一つのエントリが登録される。なお、式(10)のブロックサイズ、及びブロックグループ数には、ブロックサイズ1810の値、及びブロックグループ数1820の値が代入される。
リード回数1832は、共有ストレージアドレス1831に対応するブロックに対するリード処理の回数である。ライト回数1833は、共有ストレージアドレス1831に対応するブロックに対するライト処理の回数である。
対象ブロックグループ1840は、対象ブロックグループを識別するための識別番号である。
本実施例では、所定の時間周期毎に、対象ブロックグループを変更する。
例えば、共有ストレージシステム130の全記憶領域が、ブロックグループAとブロックグループBとの二つのブロックグループに分割された場合、キャッシュドライバ210は、ある時間にブロックグループAを対象ブロックグループとしてブロック単位のアクセス数を管理する。所定の時間周期が経過した後、キャッシュドライバ210は、対象グループをブロックグループBに変更し、当該ブロックグループBのブロック単位のアクセス数を管理する。
また、ブロックグループAには「0」から「9999」までの範囲のキャッシュメモリシステム120の記憶領域が対応付けられ、ブロックグループBには「10000」から「19999」までの範囲のキャッシュメモリシステム120の記憶領域が対応付けられる。
以下、実施例3におけるキャッシュドライバ210が実行する処理について説明する。
図19は、本発明の実施例3におけるサーバアクセス時分割計測部1711が実行するアクセス数計測処理を説明するフローチャートである。
アプリケーション201からI/O要求が発行されると、まず、キャッシュドライバ210のサーバアクセス時分割計測部1711に当該I/O要求が入力される。このとき、サーバアクセス時分割計測部1711は、アクセス数計測処理を開始する。
サーバアクセス時分割計測部1711は、I/O要求の宛先アドレスに対応するブロックが含まれるブロックグループを特定する(ステップS900)。
本実施例では、サーバアクセス時分割計測部1711は、下式(11)に基づいて、I/O要求の宛先アドレスに対応するブロックが含まれるブロックグループを特定する。なお、式(11)のブロックサイズ、及びブロックグループ数には、ブロックサイズ1810の値、及びブロックグループ数1820の値が代入される。
サーバアクセス時分割計測部1711は、特定されたブロックグループが、対象ブロックグループであるか否かを判定する(ステップS901)。
具体的には、サーバアクセス時分割計測部1711は、式(11)の値が時分割タイミング1814と一致するか否かを判定する。式(11)の値が時分割タイミング1814と一致する場合、特定されたブロックグループが、管理対象のブロックグループに一致すると判定される。
特定されたブロックグループが対象ブロックグループではないと判定された場合、サーバアクセス時分割計測部1711は、処理を終了する。これは、I/O要求の宛先アドレスに対応するブロックは、現在、管理対象でないためである。
特定されたブロックグループが対象ブロックグループにあると判定された場合、サーバアクセス時分割計測部1711は、サーバ時分割アクセスカウンタ1830を参照し、I/O要求の宛先アドレスに一致するエントリを検索する(ステップS902)。
具体的には、サーバアクセス時分割計測部1711は、共有ストレージアドレス1831がI/O要求の宛先アドレスに一致するエントリを検索する。
サーバアクセス時分割計測部1711は、I/O要求の種別に基づいて、当該エントリのリード回数1834又はライト回数1835の値を「1」加算し(ステップS903)、処理を終了する。ステップS903の処理は、ステップS102と同一の処理である。
実施例3のアクセス振り分け処理は、図8に示す実施例1の処理と同一であるため説明を省略する。
図20は、本発明の実施例3におけるアクセス時分割カウンタ入替制御部1712が実行するアクセスカウンタ入替処理を説明するフローチャートである。
実施例3のアクセスカウンタ入替処理では、所定の周期毎に、対象ブロックグループを変更する。
タイマ・カウンタ600は、アクセスカウンタ入替処理割込タイミング610にしたがって、アクセス時分割カウンタ入替制御部1712に、処理の開始を通知する割り込みを発生させる。
アクセス時分割カウンタ入替制御部1712は、タイマ・カウンタ600からの割り込みを受け付けると(ステップS1000)、処理を開始する。
アクセス時分割カウンタ入替制御部1712は、サーバ時分割アクセスカウンタ1830を初期化する(ステップS1001)。具体的には、アクセス時分割カウンタ入替制御部1712は、サーバ時分割アクセスカウンタ1830の全てエントリのリード回数1832及びライト回数1833に「0」を設定する。
アクセス時分割カウンタ入替制御部1712は、対象ブロックグループ1840を更新することによって、アクセスカウンタを割り当てるブロックグループを切り替える(ステップS1002)。具体的には、以下のような処理が実行される。
アクセス時分割カウンタ入替制御部1712は、対象ブロックグループ1840の値がブロックグループ数1820の値から「1」減算した値に等しい場合、対象ブロックグループ1840に「0」を設定し、対象ブロックグループ1840の値がブロックグループ数1820の値から「1」減算した値より小さい場合、対象ブロックグループ1840の値を「1」加算する。
前述した処理によって、所定の周期毎に、サーバ時分割アクセスカウンタ1830がクリアされ、さらに、当該サーバ時分割アクセスカウンタ1830を割り当てるブロックグループが変更される。
図21は、本発明の実施例3におけるキャッシュデータ時分割入替制御部1714が実行するキャッシュデータ入替処理を説明するフローチャートである。
実施例3のキャッシュデータ入替処理では、キャッシュデータ時分割入替制御部1714は、キャッシュメモリシステム120のキャッシュ領域をブロックグループの数だけ分割し、各ブロックグループに対応付けられるキャッシュ領域に対してキャッシュ制御を行う。
タイマ・カウンタ600は、キャッシュデータ入替処理割込タイミング620にしたがって、キャッシュデータ時分割入替制御部1714に、処理の開始を通知する割り込みを発生させる。
キャッシュデータ時分割入替制御部1714は、タイマ・カウンタ600からの割り込みを受けると、処理を開始する(ステップS1100)。
キャッシュデータ時分割入替制御部1714は、サーバ時分割アクセスカウンタ1830に基づいて、キャッシュメモリシステム120に格納するブロックデータを決定する(ステップS1101)。具体的には以下のような処理が実行される。
キャッシュデータ時分割入替制御部1714は、サーバ時分割アクセスカウンタ1830を参照し、共有ストレージアドレス1831毎にリード回数1832及びライト回数1833を取得する。すなわち、ブロック毎のリード回数及びライト回数が取得される。
キャッシュデータ時分割入替制御部1714は、各ブロックのリード回数及びライト回数に基づいて、下式(12)の値を超えない範囲で、キャッシュメモリシステム120に配置するデータを決定する。なお、式(12)のキャッシュエントリ最大数、及びブロックグループ数には、キャッシュエントリ最大数400の値、及びブロックグループ数1820の値が代入される。
式(12)が示す範囲は、対象ブロックグループに対応付けられるキャッシュ領域に格納可能なブロックの数を示す。
以上がステップS1001の処理の説明である。
次に、キャッシュデータ時分割入替制御部1714は、ステップS1101の処理結果に基づいて、対象ブロックグループに対応付けられるキャッシュ領域から追い出されるブロックデータに対応するエントリを更新する(ステップS1102)。ステップS502と同一の処理である。
以上の処理によって、対象ブロックグループに対応付けられるキャッシュ領域のデータのみを入れ替えることが可能となる。
以上がステップS1102の処理の説明である。
次に、キャッシュデータ時分割入替制御部1714は、対象ブロックグループに対応付けられるキャッシュ領域に、新たなブロックデータを格納し(ステップS1103)、処理を終了する。具体的には、以下のような処理が実行される。
キャッシュデータ時分割入替制御部1714は、キャッシュメモリアドレス411がブロックグループに対応付けられるキャッシュ領域内のアドレスであり、かつ、キャッシュ有効ビット413が「0」であるエントリの共有ストレージアドレス412に、新たなブロックデータのアドレスを登録する。
キャッシュデータ時分割入替制御部1714は、当該エントリの共有ストレージアドレス412に対応する記憶領域(ブロック)からブロックデータを読み出し、キャッシュメモリアドレス411に対応するキャッシュ領域に読み出されたデータを格納する。また、キャッシュデータ時分割入替制御部1714は、当該エントリのキャッシュ有効ビット413に「1」を設定する。
以上がステップS1103の処理の説明である。
図22は、本発明の実施例3におけるキャッシュドライバ210が実行する初期化処理を説明するフローチャートである。サーバアクセス時分割管理情報1715を初期化する処理以外の処理は、実施例1と同一の処理である。
キャッシュドライバ210は、管理者から設定情報の入力を受け付けると(ステップS1200)、処理を開始する。
設定情報には、ブロックサイズ、ブロックグループの数、キャッシュメモリシステム120のキャッシュ容量、キャッシュメモリシステム120におけるキャッシュ領域のアドレス範囲、アクセスカウンタ入替処理の実行間隔、及びキャッシュデータ入替処理の実行間隔等が含まれる。
なお、管理者は、サーバモジュール110に対して直接、設定情報を入力してもよいし、管理サーバ(図示省略)を用いて、設定を入力してもよい。
キャッシュドライバ210は、設定情報に基づいて、サーバアクセス時分割管理情報1715を初期化する(ステップS1201)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、ブロックサイズ1810及びブロックグループ数1820に、設定情報に含まれるブロックサイズ及びブロックグループの数をそれぞれ設定する。
キャッシュドライバ210は、サーバ時分割アクセスカウンタ1830に、共有ストレージアドレス1831に、式(10)を用いて算出されるサイズ毎のアドレスが設定されるエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのリード回数1832及びライト回数1833に「0」を設定する。
キャッシュドライバ210は、対象ブロックグループ1840に「0」を設定する。
以上が、ステップS1201の処理の説明である。
次に、キャッシュドライバ210は、キャッシュ管理情報216を初期化する(ステップS1202)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、キャッシュエントリ最大数400に式(13)を用いて算出される値を設定する。なお、式(13)のブロックサイズには、ブロックサイズ1810の値が代入される。また、式(13)のキャッシュメモリシステムのキャッシュ容量には、設定情報に含まれるキャッシュメモリシステム120のキャッシュ容量が代入される。
キャッシュドライバ210は、ブロックのサイズ、キャッシュメモリシステム120の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル410のキャッシュメモリアドレス411に、ブロックサイズ毎のアドレスが設定されたエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのキャッシュ有効ビット413に「0」を設定する。
キャッシュドライバ210は、タイマ217を初期化し(ステップS1203)、処理を終了する。
具体的には、キャッシュドライバ210は、アクセスカウンタ入替処理割込タイミング610及びキャッシュデータ入替処理割込タイミング620に、設定情報に含まれるアクセスカウンタ入替処理の実行間隔及びキャッシュデータ入替処理の実行間隔を設定する。
以上説明したように、実施例3によれば、サーバモジュール110は、共有ストレージシステム130の記憶領域を複数のブロックグループに分割し、一つのブロックグループについてのみブロック単位のアクセス数を管理する。これによって、サーバモジュール110のメモリ112の使用量を削減できる。
また、サーバモジュール110は、周期的に、対象ブロックグループを変更することによって、対象ブロックグループを構成するブロックに対するキャッシュ制御を実現することができる。
また、サーバモジュール110は、対象ブロックグループに対応付けられるキャッシュ領域に対してキャッシュ制御を行うため、各ブロックグループに対して、キャッシュ効率が高いキャッシュ制御を実現できる。
実施例3も実施例1と同様に、一部の記憶領域(対象ブロックグループ)についてのみブロック単位のアクセス数を管理する。これによって、サーバモジュール110のメモリ112の使用量を削減できる。また、サーバモジュール110は、キャッシュ効率が高いブロックに対するキャッシュ制御を実現することができる。
次に、本発明の実施例4について説明する。
実施例4では、サーバモジュール110が、共有ストレージシステム130の一部の記憶領域のブロック単位のアクセス数を管理するためのアクセス管理情報(アクセスカウンタ)を有する。
サーバモジュール110のキャッシュドライバ210は、キャッシュアルゴリズムに基づいて、アクセス管理情報を用いてブロック単位のアクセス数を管理するブロックを決定する。
本実施例では、キャッシュアルゴリズムとして、LRU方式を用いるものとする。また、LRU方式を実現するために連結リストを用いるものとする。連結リストは、キャッシュ対応テーブル2450において管理される一部のブロックの連結リストであるため、メモリ112の使用量は十分小さいものとなる。
これによって、アクセス数を保持するために必要なサーバ側のメインメモリの記憶容量の削減することできる。
以下、実施例1との差異を中心に説明する。なお、同一の符号を付した構成又は処理は、実施例1と同一の構成又は同一の処理であることを示す。
実施例4における計算機システムの構成、及び計算機システムのハードウェア構成は実施例1と同一であるため説明を省略する。
図23は、本発明の実施例4における計算機システムのソフトウェア構成の一例を示す説明図である。
実施例4のキャッシュドライバ210は、アクセス振り分け部213、キャッシュデータ入替制御部214、及びタイマ217を含む。また、実施例4のキャッシュドライバ210は、キャッシュ管理情報2316を保持する。
実施例4のタイマ217は、アクセスカウンタ入替処理割込タイミング610を含まない。LRU方式では、アクセス管理情報に新たなブロックを追加できない場合、すなわち、アクセスカウンタに空きがない場合に、ブロックが入れ替えられるためである。
また、実施例4の共有ストレージシステム130は、アクセス数を管理する必要がないため、実施例4のストレージ制御部250は、ストレージアクセス計測部251及びストレージアクセス管理情報252を有さない。
図24A及び図24Bは、本発明の実施例4におけるキャッシュ管理情報2316の一例を示す説明図である。
キャッシュ管理情報2316は、アクセスカウンタエントリ最大数2400、ブロックサイズ2410、ピン止め制御キャッシュエントリ最大数2420、ピン止め用キャッシュアドレスリスト2430、先頭ポインタ2440、キャッシュ対応テーブル2450を含む。
アクセスカウンタエントリ最大数2400は、キャッシュ対応テーブル2450に登録可能なエントリ数である。すなわち、アクセスカウンタエントリ最大数2400は、キャッシュドライバ210が管理可能なブロックの数を示す。ブロックサイズ2410は、ブロックのサイズである。
ピン止め制御キャッシュエントリ最大数2420は、ピン止め方式に基づいてキャッシュ制御を行うブロックデータとして、キャッシュ対応テーブル2450に登録可能なエントリ数である。ピン止め用キャッシュアドレスリスト2430は、ピン止め方式に基づいてキャッシュ制御を行うデータを格納するキャッシュ領域のアドレスリストである。先頭ポインタ2440は、連結リストの先頭へのポインタである。
キャッシュ対応テーブル2450は、ブロック毎のアクセス数を管理するための情報である。キャッシュ対応テーブル2450は、キャッシュメモリアドレス2451、共有ストレージアドレス2452、エントリ有効ビット2453、キャッシュ有効ビット2454、リード回数2455、ライト回数2456、次エントリポインタ2457、及び前エントリポインタ2458を含む。なお、キャッシュ対応テーブル2450に格納されるエントリは、連結リストによって管理される。
キャッシュメモリアドレス2451は、キャッシュメモリシステム120のキャッシュ領域の先頭アドレスである。
共有ストレージアドレス2452は、キャッシュメモリアドレス2451に対応するキャッシュ領域に格納されたデータの共有ストレージシステム130における格納位置、すなわち、ブロックの先頭アドレスである。
エントリ有効ビット2453は、キャッシュメモリアドレス2451に対応するキャッシュ領域のエントリが有効であるか否かを示すビットである。本実施例では、エントリ有効ビット2453が「1」の場合、エントリが有効であることを示し、エントリ有効ビット2453が「0」の場合、エントリが無効であることを示す。
キャッシュ有効ビット2454は、キャッシュメモリアドレス2451に対応するキャッシュ領域に読み出し可能なデータが格納されているか否かを示すビットである。本実施例では、キャッシュ有効ビット2454が「1」の場合、キャッシュ領域に読み出し可能なデータが格納されていることを示し、キャッシュ有効ビット2454が「0」の場合、キャッシュ領域に読み出し可能なデータが格納されていないことを示す。
リード回数2455は、共有ストレージアドレス2452に対応するブロックに対するリード処理の回数である。ライト回数2456は、共有ストレージアドレス2452に対応するブロックに対するライト処理の回数である。
次エントリポインタ2457は、連結リストにおける次のエントリを示すポインタである。前エントリポインタ2458は、連結リストにおける前のエントリを示すポインタである。
実施例4では、LRU方式等のキャッシュ制御アルゴリズムに基づいて、アクセス数を管理するブロックの入れ替えを制御する。これによって、アクセス数を管理する管理情報のサイズを小さくできるため、サーバモジュール110のメモリ112の使用量を削減できる。
具体的には、キャッシュドライバ210は、キャッシュ対応テーブル2450に、キャッシュメモリシステム120の記憶容量に格納可能なブロックの数より数倍程度大きい数のブロックを管理するためのキャッシュ対応テーブル2450(アクセスカウンタ)を保持する。キャッシュドライバ210は、連結リストを用いたLRU方式に基づいて、キャッシュ対応テーブル2450において管理されるブロックを入れ替える。
したがって、共有ストレージシステム130の一つのブロックに対し、以下のような三つの状態を取り得る。
(状態1)キャッシュメモリシステム120のキャッシュ領域にデータが格納され、かつ、当該ブロックデータのアクセス数がサーバモジュール110上で管理されている状態。
(状態2)ブロックデータのアクセス数はサーバモジュール110上で管理されているが、キャッシュメモリシステム120のキャッシュ領域に当該ブロックデータが格納されていない状態。
(状態3)キャッシュメモリシステム120のキャッシュ領域にブロックデータが格納されてなく、かつ、当該ブロックデータのアクセス数がサーバモジュール110上で管理されていない状態。
なお、(状態1)は、エントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「1」の状態に対応し、(状態2)は、エントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「0」の状態に対応する。(状態3)は、エントリ有効ビット2453が「0」、かつ、キャッシュ有効ビット2454が「0」の状態、又は、キャッシュ対応テーブル2450にブロックに対応するエントリが存在しない状態に対応する。
前述した、(状態1)、(状態2)及び(状態3)の間の状態の遷移、すなわち、サーバモジュール110がアクセス数を管理するブロックデータの入れ替えは、LRU方式に基づいて制御される。
以下の説明では、キャッシュ対応テーブル2450においてブロックのアクセス数が管理されているエントリが存在することをアクセスカウンタヒットと記載し、キャッシュ対応テーブル2450においてブロックのアクセス数が管理されているエントリが存在しないことをアクセスカウンタミスヒットとも記載する。
なお、本実施例は、LRU方式を用いて、アクセス数を管理するブロックデータの入れ替えを制御しているが、他のキャッシュアルゴリズムを用いてもよい。また、キャッシュ対応テーブル2450のデータ構造として連結リストを用いているが、適用するキャッシュアルゴリズムに応じてデータ構造を変更してもよい。
以下、実施例4におけるキャッシュドライバ210が実行する処理について説明する。
図25は、本発明の実施例4におけるアクセス振り分け部213が実行するアクセス振り分け処理を説明するフローチャートである。
アプリケーション201からI/O要求が発行されると、まず、キャッシュドライバ210のアクセス振り分け部213に当該I/O要求が入力される。このとき、アクセス振り分け部213は、アクセス振り分け処理を開始する。
まず、アクセス振り分け部213は、キャッシュ管理情報2316のキャッシュ対応テーブル2450を参照し、I/O要求に対応するエントリを検索する(ステップS1300)。
具体的には、アクセス振り分け部213は、共有ストレージアドレス2452がI/O要求の宛先アドレスに一致するエントリを検索する。
アクセス振り分け部213は、検索結果に基づいて、キャッシュ対応テーブル2450にI/O要求に対応するエントリが存在するか否かを判定する(ステップS1301)。
キャッシュ対応テーブル2450にI/O要求に対応するエントリが存在しないと判定された場合、アクセス振り分け部213は、キャッシュミスヒットかつアクセスカウンタミスヒット時のI/O処理を実行し(ステップS1306)、処理を終了する。キャッシュミスヒットかつアクセスカウンタミスヒット時のI/O処理については、図28を用いて後述する。
キャッシュ対応テーブル2450にI/O要求に対応するエントリが存在すると判定された場合、アクセス振り分け部213は、当該エントリのエントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「1」であるか否かを判定する(ステップS1302)。すなわち、(状態1)のブロックであるか否かが判定される。
検索されたエントリのエントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「1」であると判定された場合、アクセス振り分け部213は、キャッシュヒット時のI/O処理を実行し(ステップS1303)、処理を終了する。キャッシュヒット時のI/O処理については、図26を用いて後述する。
エントリのエントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「1」でないと判定された場合、アクセス振り分け部213は、エントリのエントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「0」であるか否かを判定する(ステップS1304)。すなわち、(状態2)のブロックであるか否かが判定される。
エントリのエントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「0」であると判定された場合、アクセス振り分け部213は、キャッシュミスヒットかつアクセスカウンタヒット時のI/O処理を実行し(ステップS1305)、処理を終了する。キャッシュミスヒットかつアクセスカウンタヒット時のI/O処理については、図27を用いて後述する。
エントリのエントリ有効ビット2453が「1」、かつ、キャッシュ有効ビット2454が「0」でないと判定された場合、アクセス振り分け部213は、キャッシュミスヒットかつアクセスカウンタミスヒット時のI/O処理を実行し(ステップS1306)、処理を終了する。
図26は、キャッシュヒット時のアクセス振り分け部213が実行するキャッシュヒット時のI/O処理を説明するフローチャートである。
まず、アクセス振り分け部213は、I/O要求の種別に基づいて、ステップS1300において検索されたエントリのリード回数2455又はライト回数2456の値を「1」加算する(ステップS1400)。ステップS1400の処理は、ステップS102の処理と同一の処理である。
アクセス振り分け部213は、I/O要求の種別がリードであるか否かを判定する(ステップS1401)。
I/O要求の種別がリードであると判定された場合、アクセス振り分け部213は、I/O要求をキャッシュメモリシステム120へのI/O要求(リード要求)に変換し(ステップS1402)、ステップS1403に進む。ステップS1402の処理は、ステップS203と同一の処理である。
I/O要求の種別がライトであると判定された場合、アクセス振り分け部213は、キャッシュメモリシステム120へのI/O要求(ライト要求)を生成し(ステップS1404)、ステップS1403に進む。ステップS1403の処理は、ステップS204の処理と同一の処理である。
アクセス振り分け部213は、検索されたエントリを連結リストの先頭に配置し(ステップS1403)、処理を終了する。具体的には以下のような処理が実行される。
アクセス振り分け部213は、検索されたエントリ(第1エントリ)の前エントリポインタ2458に対応するエントリ(第2エントリ)を検索する。アクセス振り分け部213は、第1エントリの次エントリポインタ2457に格納されるポインタを、第2エントリの次エントリポインタ2457に設定する。
アクセス振り分け部213は、先頭ポインタ2440に対応するエントリ(第3エントリ)を検索し、第3エントリの前エントリポインタ2458に第1エントリを示すポインタに設定する。
アクセス振り分け部213は、第1エントリの次エントリポインタ2457に、第3エントリの次エントリポインタ2457に格納されるポインタを設定する。
アクセス振り分け部213は、第1エントリの前エントリポインタ2458に、先頭ポインタ2440に格納されるポインタを設定する。
アクセス振り分け部213は、先頭ポインタ2440に、第1エントリを示すポインタを設定する。
本実施例では、キャッシュ対応テーブル2450のエントリが更新された場合、当該エントリを連結リストの先頭に移動させる。また、エントリを削除する場合には、連結リストの最後尾のエントリが対象となる。以上のような処理によって、キャッシュ対応テーブル2450のエントリに対して、LRU方式に対応した制御を実現できる。
図27は、本発明の実施例4のアクセス振り分け部213が実行するキャッシュミスかつアクセスカウンタヒット時のI/O処理を説明するフローチャートである。
アクセス振り分け部213は、I/O要求の種別に基づいて、ステップS1300において検索されたエントリのリード回数2455又はライト回数2456の値を「1」加算する(ステップS1500)。ステップS1500の処理はステップS102の処理と同一の処理である。
アクセス振り分け部213は、検索されたエントリを連結リストの先頭に配置し(ステップS1501)、処理を終了する。
図28は、本発明の実施例4のアクセス振り分け部213が実行するキャッシュミスかつアクセスカウンタミスヒット時のI/O処理を説明するフローチャートである。
アクセス振り分け部213は、I/O要求に対応するエントリが存在するか否かを判定する(ステップS1600)。これは、ステップS1301の判定結果を用いればよい。
I/O要求に対応するエントリが存在すると判定された場合、アクセス振り分け部213は、ステップS1604に進む。
I/O要求に対応するエントリが存在しないと判定された場合、アクセス振り分け部213は、キャッシュ対応テーブル2450を参照し、エントリ有効ビット2453が「0」であるエントリを検索する(ステップS1601)。
アクセス振り分け部213は、検索結果に基づいて、キャッシュ対応テーブル2450にエントリ有効ビット2453が「0」であるエントリが存在するか否かを判定する(ステップS1602)。
エントリ有効ビット2453が「0」であるエントリが存在すると判定された場合、アクセス振り分け部213は、エントリを一つ選択し(ステップS1603)、その後、ステップS1604に進む。
エントリ有効ビット2453が「0」であるエントリが存在しないと判定された場合、アクセス振り分け部213は、キャッシュ対応テーブル2450の連結リストの最後尾のエントリを取得し、当該エントリのキャッシュ有効ビット2454が「1」であるか否かを判定する(ステップS1606)。
連結リストの最後尾のエントリのキャッシュ有効ビット2454が「1」でないと判定された場合、アクセス振り分け部213は、ステップS1608に進む。
連結リストの最後尾のエントリのキャッシュ有効ビット2454が「1」であると判定された場合、アクセス振り分け部213は、当該エントリのキャッシュメモリアドレス2451に格納されるアドレスを、ピン止め用キャッシュアドレスリスト2430に登録する(ステップS1607)。
アクセス振り分け部213は、キャッシュ対応テーブル2450の連結リストの最後尾のエントリを初期化し(ステップS1608)、その後、ステップS1604に進む。具体的には、アクセス振り分け部213は、当該エントリのエントリ有効ビット2453、キャッシュ有効ビット2454、リード回数2455、及びライト回数2456のそれぞれに「0」を設定する。
アクセス振り分け部213は、I/O要求の対象のブロックに対応するエントリを更新する(ステップS1604)。ステップS1604では、分岐によって更新する内容が異なる。具体的には、以下のような処理が実行される。
ステップS1600の分岐の場合、アクセス振り分け部213は、当該エントリのエントリ有効ビット2453に「1」を設定する。また、アクセス振り分け部213は、I/O要求の種別に基づいて、当該エントリのリード回数2455又はライト回数2456の値を「1」加算する。
ステップS1603の分岐の場合、アクセス振り分け部213は、選択されたエントリの共有ストレージアドレス2452にI/O要求の宛先アドレスを設定し、さらに、エントリ有効ビット2453に「1」を設定する。また、アクセス振り分け部213は、I/O要求の種別に基づいて、当該エントリのリード回数2455又はライト回数2456の値を「1」加算する。
ステップS1608の分岐の場合、アクセス振り分け部213は、初期化されたエントリの共有ストレージアドレス2452にI/O要求の宛先アドレスを設定し、さらに、エントリ有効ビット2453に「1」を設定する。また、アクセス振り分け部213は、I/O要求の種別に基づいて、当該エントリのリード回数2455又はライト回数2456の値を「1」加算する。
以上がステップS1604の処理の説明である。
アクセス振り分け部213は、ステップS1604において更新されたエントリを連結リストの先頭に配置し(ステップS1605)、処理を終了する。
ステップS1600又はステップS1608の分岐の場合、ステップS1605の処理は、ステップS1403と同様の処理である。
ステップS1603の分岐の場合、ステップS1605では以下のような処理が実行される。
まず、アクセス振り分け部213は、先頭ポインタ2440に対応するエントリ(第4エントリ)を検索し、第4エントリの前エントリポインタ2458に、更新されたエントリ(第5エントリ)を示すポインタを設定する。
アクセス振り分け部213は、第5エントリの次エントリポインタ2457に、第4エントリの次エントリポインタ2457に格納されるポインタを設定する。
アクセス振り分け部213は、第5エントリの前エントリポインタ2458に、先頭ポインタ2440に格納されるポインタを設定する。
アクセス振り分け部213は、先頭ポインタ2440に、第5エントリを示すポインタを設定する。
図29は、本発明の実施例4のキャッシュデータ入替制御部214が実行するキャッシュデータ入替処理を説明するフローチャートである。
タイマ・カウンタ600は、キャッシュデータ入替処理割込タイミング620にしたがって、キャッシュデータ入替制御部214に、処理の開始を通知する割り込みを発生させる。
キャッシュデータ入替制御部214は、タイマ・カウンタ600からの割込を受け付けると、処理を開始する(ステップS1700)。
キャッシュデータ入替制御部214は、キャッシュ対応テーブル2450に基づいて、キャッシュメモリシステム120に格納するブロックデータを決定する(ステップS1701)。具体的には、以下のような処理が実行される。
キャッシュデータ入替制御部214は、キャッシュ対応テーブル2450を参照し、共有ストレージアドレス2452毎にリード回数2455及びライト回数2456を取得する。すなわち、ブロック毎のリード回数及びライト回数が取得される。
キャッシュデータ入替制御部214は、各ブロックのリード回数及びライト回数に基づいて、ピン止め制御キャッシュエントリ最大数2420の範囲内で、キャッシュメモリシステム120に格納するブロックデータを決定する。
以上が、ステップS1701の処理の説明である。
次に、キャッシュデータ入替制御部214は、キャッシュ対応テーブル2450を参照し、ステップS1701の処理結果に基づいて、キャッシュ領域から追い出されるブロックデータに対応するエントリを更新する(ステップS1702)。
追い出されるブロックデータの決定方法は、ステップS502と同一の方法である。ステップS1702では、エントリの更新内容が異なる。具体的には、キャッシュデータ入替制御部214は、キャッシュ対応テーブル2450を参照し、キャッシュメモリアドレス2451が、決定されたブロックデータを格納するキャッシュ領域のアドレスと一致するエントリのキャッシュ有効ビット2454に「0」を設定する。これによって、ブロックデータは、(状態1)から(状態2)に遷移する。さらに、キャッシュデータ入替制御部214は、更新されたエントリのキャッシュメモリアドレス2451をピン止め用キャッシュアドレスリスト2430に登録する。
次に、キャッシュデータ入替制御部214は、新たにキャッシュメモリシステム120に格納するブロックデータのエントリをキャッシュ対応テーブル2450に登録する(ステップS1703)。具体的には以下のような処理が実行される。
キャッシュデータ入替制御部214は、キャッシュ対応テーブル2450を参照し、空のエントリ又はエントリ有効ビット2453が「0」のエントリを検索する。キャッシュデータ入替制御部214は、検索されたエントリの共有ストレージアドレス2452に新たに格納されるブロックデータのアドレスを設定し、また当該エントリのエントリ有効ビット2453に「1」を設定する。
キャッシュデータ入替制御部214は、ピン止め用キャッシュアドレスリスト2430から一つのアドレスを取得する。キャッシュデータ入替制御部214は、検索されたエントリのキャッシュメモリアドレス2451に当該取得されたアドレスを設定する。
以上がステップS1703の処理の説明である。
次に、キャッシュデータ入替制御部214は、キャッシュメモリシステム120に、新たなブロックデータを格納し(ステップS1704)、処理を終了する。
具体的には、キャッシュデータ入替制御部214は、ステップS1703において更新されたエントリの共有ストレージアドレス2452に対応する記憶領域(ブロック)からブロックデータを読み出し、キャッシュメモリアドレス2451に対応するキャッシュ領域に読み出されたデータを格納する。また、キャッシュデータ入替制御部214は、当該エントリのキャッシュ有効ビット2454に「1」を設定する。
図30は、本発明の実施例4におけるキャッシュドライバ210が実行する初期化処理を説明するフローチャートである。
キャッシュドライバ210は、管理者から設定情報の入力を受け付けると(ステップS1800)、初期化処理を開始する。
設定情報には、アクセスカウンタエントリ数、ブロックサイズ、ピン止め制御キャッシュエントリ数、キャッシュメモリシステム120のキャッシュ容量、キャッシュメモリシステム120におけるキャッシュ領域のアドレス範囲、及びキャッシュデータ入替処理の実行間隔等が含まれる。
キャッシュドライバ210は、設定情報に基づいて、キャッシュ対応テーブル2450を初期化する(ステップS1801)。具体的には、以下のような処理が実行される。
キャッシュドライバ210は、アクセスカウンタエントリ最大数2400及びピン止め制御キャッシュエントリ最大数2420に、設定情報に含まれるアクセスカウンタエントリ数及びピン止め制御キャッシュエントリ数をそれぞれ設定する。
キャッシュドライバ210は、ブロックサイズ2410に設定情報に含まれるブロックサイズを設定する。キャッシュドライバ210は、ブロックサイズ2410及びピン止め制御キャッシュエントリ最大数2420に基づいて、ピン止め用キャッシュアドレスリスト2430に、ブロックサイズ毎のアドレスが設定されるエントリを設定する。
キャッシュドライバ210は、ブロックのサイズ、キャッシュメモリシステム120の記憶領域のアドレス範囲に基づいて、キャッシュ対応テーブル2450に、キャッシュ領域の数だけエントリを生成する。また、キャッシュドライバ210は、生成されたエントリのエントリ有効ビット2453及びキャッシュ有効ビット2454のそれぞれに「0」設定する。
キャッシュドライバ210は、タイマ217を初期化し(ステップS1802)、処理を終了する。
具体的には、キャッシュドライバ210は、キャッシュデータ入替処理割込タイミング620に、設定情報に含まれるキャッシュデータ入替処理の実行間隔を設定する。
なお、本実施例で例示した種々のソフトウェアは、電磁的、電子的及び光学式等の種々の記録媒体(例えば、非一時的な記憶媒体)に格納可能であり、インターネット等の通信網を通じて、コンピュータにダウンロード可能である。
さらに、本実施例では、ソフトウェアによる制御を用いた例について説明したが、その一部をハードウェアによって実現することも可能である。
以上、本発明を添付の図面を参照して詳細に説明したが、本発明はこのような具体的構成に限定されるものではなく、添付した請求の範囲の趣旨内における様々な変更及び同等の構成を含むものである。