(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023172674
(43)【公開日】2023-12-06
(54)【発明の名称】ストレージ装置,キャッシュ管理プログラム及びキャッシュ管理方法
(51)【国際特許分類】
G06F 12/0866 20160101AFI20231129BHJP
G06F 12/0868 20160101ALI20231129BHJP
G06F 12/02 20060101ALI20231129BHJP
G06F 3/06 20060101ALI20231129BHJP
【FI】
G06F12/0866 100
G06F12/0868
G06F12/02 510A
G06F3/06 302A
G06F3/06 301S
G06F3/06 301Z
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022084639
(22)【出願日】2022-05-24
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100092978
【弁理士】
【氏名又は名称】真田 有
(74)【代理人】
【識別番号】100189201
【弁理士】
【氏名又は名称】横田 功
(72)【発明者】
【氏名】大黒谷 秀治郎
(72)【発明者】
【氏名】阿部 圭馬
【テーマコード(参考)】
5B160
5B205
【Fターム(参考)】
5B160AA12
5B205JJ11
5B205MM11
(57)【要約】
【課題】ストレージ装置の立ち上げ時間を短縮する。
【解決手段】キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、ポインタによって参照された位置のレコードを獲得し、レコードの獲得に応じて、ポインタをキャッシュ管理テーブル内の更に次のレコードの位置に移動させる。
【選択図】
図6
【特許請求の範囲】
【請求項1】
キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、
前記ポインタによって参照された位置のレコードを獲得し、
前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる、
ストレージ装置。
【請求項2】
前記キャッシュ管理テーブル内から獲得した前記レコードの状態を、不定値から使用中に変更して記憶する、
請求項1に記載のストレージ装置。
【請求項3】
前記ポインタの位置が前記キャッシュ管理テーブル内における最終アドレスである場合には、未使用のレコードが登録されているキューの中から先頭のレコードを獲得する、
請求項1に記載のストレージ装置。
【請求項4】
前記キューの中から獲得した前記レコードの状態を、未使用から使用中に変更して記憶する、
請求項3に記載のストレージ装置。
【請求項5】
獲得した前記レコードの解放の際に、当該レコードを未使用のレコードが登録されているキューに登録して、当該レコードの状態を使用中から未使用に変更して記憶する、
請求項1~4のいずれか一項に記載のストレージ装置。
【請求項6】
前記キャッシュメモリ内のレコードの状態のうち少なくとも一部を保持しながら当該ストレージ装置の起動を行う場合には、前記ポインタとして、前記起動の前に参照していたレコードの位置を第1のポインタとして保持すると共に、前記起動の後に参照するレコードの位置を第2のポインタとして保持し、
前記第1のポインタと前記第2のポインタとの位置に応じて、レコードを獲得する、
請求項1~4のいずれか一項に記載のストレージ装置。
【請求項7】
獲得した前記レコードの解放の際に、当該レコードのアドレスが前記第2のポインタの位置以前である場合には当該レコードを未使用のレコードが登録されているキューに登録して当該レコードの状態を使用中から未使用に変更して記憶する一方、当該レコードのアドレスが前記第2のポインタの位置よりも後である場合には当該レコードを前記キューに登録せずに当該レコードの状態を使用中から未使用に変更して記憶する、
請求項6に記載のストレージ装置。
【請求項8】
キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、
前記ポインタによって参照された位置のレコードを獲得し、
前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる、
処理をコンピュータに実行させる、キャッシュ管理プログラム。
【請求項9】
キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、
前記ポインタによって参照された位置のレコードを獲得し、
前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる、
処理をコンピュータが実行する、キャッシュ管理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージ装置,キャッシュ管理プログラム及びキャッシュ管理方法に関する。
【背景技術】
【0002】
ドライブやメモリといった容量が存在する部品の資源を管理するために、データ用のキャッシュは、ホストInput/Output(I/O)に使われるブロックアドレスと、メモリ上にデータを格納するメモリアドレスとを対応(別言すれば、マッピング)させる制御を行う。
【0003】
ファームウェアでのキャッシュは、マッピング関係をテーブルに登録することで行われる。このテーブルの各要素(別言すれば、レコード)には、ホストのブロックアドレス一つとメモリアドレス一つとをセットにして書き込めるフィールドがある。このレコードの一つ一つがキャッシュページの制御単位となる。
【0004】
レコードの総数が管理できるキャッシュページ数であり、一つのキャッシュページのサイズをレコード総数にかけたものがキャッシュの総容量となる。
【0005】
常に全てのデータがキャッシュにページングされているわけではないので、個々のレコードには、未使用か使用中といった状態を表すフィールドも存在している。
【0006】
運用を考えると、未使用のレコードを簡単に取り出せるようにするため、キュー(別言すれば、フリーキュー)を用意して全ての未使用のレコードをこれにリンクしておくようにする。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】国際公開公報第2015/145532号
【特許文献2】特開2007-272551号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
装置のコントローラがPower ONする時に、全キャッシュを網羅できる数のレコードを持つテーブルを用意して、全レコードを先に述べたフリーキューにリンクさせていくという初期化処理を想定する。
【0009】
この処理のファームウェアの実装は、登録するレコード数だけループを回していくような処理になる。そのため、レコード数に比例した時間を要する。つまり、キャッシュのサイズが大きいほどリンクのための所要時間が長くなることになる。
【0010】
また、メモリサイズは年を追うごとに大きくなっており、この反面、Central Processing Unit(CPU)のクロック数は頭打ちの傾向が強く、上述の初期化処理の時間は次第に長くなっているという課題がある。
【0011】
1つの側面では、ストレージ装置の立ち上げ時間を短縮することを目的とする。
【課題を解決するための手段】
【0012】
1つの側面では、ストレージ装置は、キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、前記ポインタによって参照された位置のレコードを獲得し、前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる。
【発明の効果】
【0013】
1つの側面では、ストレージ装置の立ち上げ時間を短縮することができる。
【図面の簡単な説明】
【0014】
【
図1】関連例におけるレコードに含まれるメンバを例示するテーブルである。
【
図2】関連例におけるストレージ装置の初期化処理を説明する図である。
【
図3】関連例におけるストレージ装置の運用処理を説明する図である。
【
図4】実施形態におけるストレージ装置の構成例を模式的に示すブロック図である。
【
図5】実施形態におけるストレージ装置の初期化処理を説明する図である。
【
図6】実施形態におけるストレージ装置の運用処理を説明する図である。
【
図7】実施形態におけるストレージ装置の初期化処理を説明するフローチャートである。
【
図8】実施形態におけるストレージ装置のレコード獲得処理を説明するフローチャートである。
【
図9】実施形態におけるストレージ装置のレコード解放処理を説明するフローチャートである。
【
図10】変形例におけるストレージ装置のレコード獲得処理を説明するフローチャートである。
【
図11】変形例におけるストレージ装置のレコード解放処理を説明するフローチャートである。
【発明を実施するための形態】
【0015】
〔A〕関連例
図1は、関連例におけるレコードに含まれるメンバを例示するテーブルである。
【0016】
図1に示すように、一つのレコードには、未使用か使用中かを示す状態,Logical Unit Number(LUN)番号,LUNのブロックアドレス,メモリアドレス,リンク用ポインタ・前及びリンク用ポインタ・後が含まれる。
【0017】
このレコードが、キャッシュページ数だけ集まったものがテーブルとなる。
【0018】
図2は、関連例におけるストレージ装置の初期化処理を説明する図である。
【0019】
符号A1に示すように、符号A11に示すテーブル先頭と符号A12に示すテーブル末尾とが特定されることにより、キャッシュの容量から必要なテーブルが求められ、テーブル範囲が決定される。符号A13に示すように、フリーキューにおいて、キュー先頭及びキュー末尾が終端に設定される。
【0020】
次に、符号A2に示す処理がレコード数だけ繰り返される。符号A21に示すように、テーブル先頭のレコードが未使用に設定される。符号A22に示すように、テーブル上のレコードがフリーキューに繋がれる。符号A23に示すように、次のレコードへインクリメントが行われる。
【0021】
そして、符号A3に示すように、最終的には、全てのレコードがフリーキューに繋がれた状態となる。
【0022】
図3は、関連例におけるストレージ装置の運用処理を説明する図である。
【0023】
符号B1に示すフリーキューにおいて、フリーキューからレコードを抜くと、キュー先頭は次に移る。なお、フリーキューにレコードが無かった場合は、全て使用中なので、レコードが解放されるまで待ち合わせが行われる。
【0024】
符号B21に示すように、フリーキューからレコードが抜かれる。符号B22に示すように、フリーキューから抜かれたレコードが獲得される。符号B23に示すように、レコードに必要な情報(ブロックアドレス、メモリアドレス等)が設定される。符号B24に示すように、レコードが使用中に変更され、獲得したレコードにキャッシュページ情報が保持される。
【0025】
符号B3に示すように、レコード解放時は、レコードが未使用に変更されて、フリーキューに繋げ直される。
【0026】
Power ON時間を想定してシステムを組んでいると、機種交換時に装置全体のPower ONでオンラインになるまでの時間が長くなった場合に、システムのエラーが発生するおそれがある。
【0027】
例えば、装置Power ON時間が5分のストレージ装置があったとして、システム管理者はストレージの電源を入れてから(5+α)分後にホストサーバ装置からストレージ装置にアクセスするようにシステムを構築しているとする。
【0028】
ここで、ストレージ装置のメモリ増設や、メモリ容量の大きい後継機にリプレースした場合に、今まで5分で装置Power ONできていたものが10分かかるようになったとすると、ホストサーバ装置からストレージ装置へのアクセスタイミングで、ストレージ装置がオンラインになっていないためにシステムがエラーしてしまう。
【0029】
〔B〕実施形態
以下、図面を参照して一実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【0030】
〔B-1〕構成例
図4は、実施形態におけるストレージ装置100の構成例を模式的に示すブロック図である。
【0031】
ストレージ装置100は、コントローラ1及び複数(
図4に示す例では4つ)のドライブ装置140を備える。
【0032】
コントローラ1は、IO制御部11,キャッシュメモリ12,システム制御部13,バックエンドInterface(IF)14,メンテナンスLocal Area Network(LAN)15,インタコネクトIF16及びLAN/ホストIF17を備える。また、コントローラ1は、ドライブ装置140の接続状態を管理するための構成情報101を保持する。
【0033】
キャッシュメモリ12は、例示的に、Read Only Memory(ROM)及びRandom Access Memory(RAM)を含む記憶装置である。RAMは、例えばDynamic RAM(DRAM)であってよい。キャッシュメモリ12のROMには、Basic Input/Output System(BIOS)等のプログラムが書き込まれてよい。キャッシュメモリ12のソフトウェアプログラムは、IO制御部11に適宜に読み込まれて実行されてよい。また、キャッシュメモリ12のRAMは、一次記録メモリあるいはワーキングメモリとして利用されてよい。
【0034】
システム制御部13は、IO制御部11やメンテナンスLAN15,インタコネクトIF16を管理する。
【0035】
バックエンドIF14は、ドライブ装置140に対するデータの読み書きを中継する。
【0036】
メンテナンスLAN15は、不図示の別のコントローラとの通信を中継する。
【0037】
インタコネクトIF16は、不図示のメンテナンスPersonal Computer(PC)との通信を中継する。
【0038】
LAN/ホストIF17は、外部ネットワークとの通信を中継する。
【0039】
IO制御部11は、プロセッサの一例であり、キャッシュ制御部110としての機能を有する。キャッシュ制御部110は、フリーキュー管理部111,テーブル管理部112,レコード獲得解放管理部113及びレコード情報設定管理部114として機能する。
【0040】
プロセッサ(IO制御部11)は、例示的に、種々の制御や演算を行なう処理装置であり、キャッシュメモリ12に格納されたOperating System(OS)やプログラムを実行することにより、種々の機能を実現する。
【0041】
なお、プロセッサにおけるキャッシュ制御部11(フリーキュー管理部111,テーブル管理部112,レコード獲得解放管理部113及びレコード情報設定管理部114)としての機能を実現するためのプログラムは、例えばフレキシブルディスク、CD(CD-ROM、CD-R、CD-RW等)、DVD(DVD-ROM、DVD-RAM、DVD-R、DVD+R、DVD-RW、DVD+RW、HD DVD等)、ブルーレイディスク、磁気ディスク、光ディスク、光磁気ディスク等の、コンピュータ読取可能な記録媒体に記録された形態で提供されてよい。そして、コンピュータ(本実施形態ではプロセッサ)は上述した記録媒体から図示しない読取装置を介してプログラムを読み取って内部記録装置または外部記録装置に転送し格納して用いてよい。また、プログラムを、例えば磁気ディスク,光ディスク,光磁気ディスク等の記憶装置(記録媒体)に記録しておき、記憶装置から通信経路を介してコンピュータに提供してもよい。
【0042】
フリーキュー管理部111,テーブル管理部112,レコード獲得解放管理部113及びレコード情報設定管理部114としての機能を実現する際には、内部記憶装置(本実施形態ではキャッシュメモリ12)に格納されたプログラムがコンピュータ(本実施形態ではプロセッサ)によって実行されてよい。また、記録媒体に記録されたプログラムをコンピュータが読み取って実行してもよい。
【0043】
プロセッサは、ストレージ装置100全体の動作を制御する。プロセッサは、マルチプロセッサであってもよい。プロセッサは、例えばCentral Processing Unit(CPU)やMicro Processing Unit(MPU),Digital Signal Processor(DSP),Application Specific Integrated Circuit(ASIC),Programmable Logic Device(PLD),Field Programmable Gate Array(FPGA)のいずれか一つであってもよい。また、プロセッサは、CPU,MPU,DSP,ASIC,PLD,FPGAのうちの2種類以上の要素の組み合わせであってもよい。
【0044】
フリーキュー管理部111は、フリーキューの管理を行う。獲得したレコードの解放の際に、フリーキュー管理部111は、レコードを未使用のレコードが登録されているキューに登録する。
【0045】
テーブル管理部112は、キャッシュメモリ12上のテーブルを管理する。テーブル管理部112は、キャッシュメモリ12の未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照する。テーブル管理部112は、レコードの獲得に応じて、ポインタをキャッシュ管理テーブル内の更に次のレコードの位置に移動させる。
【0046】
レコード獲得解放管理部113は、レコード獲得処理及びレコード解放処理を実行する。レコード獲得解放管理部113は、ポインタによって参照された位置のレコードを獲得する。レコード獲得解放管理部113は、ポインタの位置がキャッシュ管理テーブル内における最終アドレスである場合には、未使用のレコードが登録されているキューの中から先頭のレコードを獲得する。獲得したレコードの解放の際に、レコード情報設定管理部114はレコードの状態を使用中から未使用に変更して記憶する。
【0047】
レコード情報設定管理部114は、レコードにおける未使用か使用中かの状態を管理する。レコード情報設定管理部114は、キャッシュ管理テーブル内から獲得したレコードの状態を、不定値から使用中に変更して記憶する。レコード情報設定管理部114は、キューの中から獲得したレコードの状態を、未使用から使用中に変更して記憶する。
【0048】
実施形態においては、コントローラPower ON時のキャッシュの初期化時間を小さくすることで、上述した関連例における問題を解決する。
【0049】
初期化処理では、以下の情報の設定が行われる。
【0050】
(1)テーブルのメモリ範囲の最初のアドレスを覚えておく。この情報を入れておく変数は以後リードポインタと呼称する。
【0051】
(2)テーブルのメモリ範囲の最後のアドレスを覚えておく。
【0052】
(3)フリーキューを空にする。(キューの先頭末尾に終端の情報を設定する。)
キャッシュとして使えるテーブル領域はハード構成とOS・ファームウェアから計算できるので、上記の設定のみであれば、テーブル上のレコードをフリーキューにつなぐ時間が不要となり、短時間で設定が終了する。
【0053】
そして、運用中の動作においては、キャッシュのページングを行うためにはレコードが必要になるが、最初はメモリ上のテーブルから直接確保する。リードポインタの位置からレコードを切り出して、このレコードにページングのための情報(LUNのブロックアドレスとメモリアドレス)を書き込み、使用中の状態にする。最後にリードポインタを次のレコードの位置までインクリメントする。
【0054】
もし、リードポインタの値が上述の最後のアドレスに達した場合は、次から関連例における処理と同様にフリーキューからレコードを確保していく。
【0055】
そして、ページングを解除した場合には、関連例と同様にレコードはフリーキューに戻していく。
【0056】
図5は、実施形態におけるストレージ装置100の初期化処理を説明する図である。
【0057】
符号C1に示すようにリードポインタがテーブルの先頭を参照し、符号C2に示すようにテーブルの最終アドレスが特定されることにより、キャッシュの容量から必要なテーブルが求められ、テーブル範囲が決定される。そして、符号C3に示すように、フリーキューの終端の初期化が行われる。
【0058】
レコード毎の処理は存在せず、固定時間で処理が完了する。
【0059】
関連例における初期化処理の一部(別言すれば、レコード毎の処理)は、実施形態における初期化処理では不要となる。
【0060】
実施形態においては、テーブル上のレコードを先頭から順番に使っていくことを利用して、テーブルにあるレコード列を疑似的なキューとして扱っている。
【0061】
つまり、実施形態においては、フリーキューと合わせて二つのキュー(別言すれば、フリーキューと上記の疑似的キュー)が存在していて、最初は疑似的キューの方からレコードを獲得して使っていき、使い切ったら次にフリーキューを使っていく。
【0062】
また、リードポインタとテーブルの最終アドレスとから、この間に挟まれているレコードは、内容が不定値であっても「未使用」であるということを判断できる。そのため、関連例における初期化処理のように全レコードに初期値(別言すれば、「未使用」)を書き込む必要もない。
【0063】
図6は、実施形態におけるストレージ装置100の運用処理を説明する図である。
【0064】
符号D1に示すように、リードポインタが確認される。符号D11に示すようにリードポインタがテーブルの最後ではないとき(つまり、テーブルにレコードが残っている場合)には、符号D12に示すようにレコードがテーブルから確保される。符号D13に示すように、リードポインタのインクリメントされることにより、次のリードポインタが指すようにされる。符号D14に示すように、レコードに必要な情報(ブロックアドレス、メモリアドレス等)が設定される。そして、符号D15に示すように、レコードが使用中に変更される。獲得したレコードには、キャッシュページ情報が持たせられる。
【0065】
符号D21に示すようにリードポインタがテーブルの最後のとき(つまりテーブルにレコードが残っていない場合)には、全て使用中なので、レコードが解放されるまで待ち合わせが行われる。符号D22に示すように、フリーキューからレコードが抜かれる。符号D23に示すように、フリーキューから抜かれたレコードが確保される。符号D24に示すように、レコードに必要な情報(ブロックアドレス、メモリアドレス等)が設定される。そして、符号D25に示すように、レコードが使用中に変更される。獲得したレコードには、キャッシュページ情報が持たせられる。
【0066】
レコード解放の際には関連例と同様に、レコードが未使用に変更されて、フリーキューに繋げ直される。
【0067】
〔B-2〕動作例
実施形態におけるストレージ装置100の初期化処理を、
図7に示すフローチャート(ステップS1~S2)に従って説明する。
【0068】
図4に示したIO制御部11のテーブル管理部112は、キャッシュの容量から必要なテーブルを求め、テーブル範囲を決定する(ステップS1)。
【0069】
IO制御部11のフリーキュー管理部111は、フリーキューの終端の初期化を行う(ステップS2)。そして、初期化処理は終了する。
【0070】
次に、実施形態におけるストレージ装置100のレコード獲得処理を、
図8に示すフローチャート(ステップS11~S21)に従って説明する。
【0071】
図4に示したIO制御部11のテーブル管理部112は、リードポインタの位置を確認する(ステップS11)。
【0072】
テーブル管理部112は、リードポインタの位置がテーブルの最後であるかを判定する(ステップS12)。
【0073】
リードポインタの位置がテーブルの最後でない場合には(ステップS12のNOルート参照)、IO制御部11のレコード獲得解放管理部113は、リードポインタ位置のレコードをテーブルから確保し記憶する(ステップS13)。
【0074】
テーブル管理部112は、リードポインタを次のレコード位置になるようにインクリメントする(ステップS14)。そして、処理はステップS20へ進む。
【0075】
ステップS12において、リードポインタの位置がテーブルの最後である場合には(ステップS12のYESルート参照)、IO制御部11のフリーキュー管理部111は、フリーキューを確認する(ステップS15)。
【0076】
フリーキュー管理部111は、フリーキューにレコードがあるかを判定する(ステップS16)。
【0077】
フリーキューにレコードがない場合には(ステップS16のNOルート参照)、レコード獲得解放管理部113は、他のレコードが解放され、使用可能となるまで待ち合わせる(ステップS17)。そして、レコード獲得処理は終了する。
【0078】
一方、フリーキューにレコードがある場合には(ステップS16のYESルート参照)、フリーキュー管理部111は、レコードをデキューする(ステップS18)。
【0079】
レコード獲得解放管理部113は、レコードを確保する(ステップS19)。
【0080】
IO制御部11のレコード情報設定管理部114は、レコードにキャッシュのマッピング情報(ブロックアドレス、メモリアドレス等)を設定する(ステップS20)。
【0081】
レコード情報設定管理部114は、レコードを使用中に設定する(ステップS21)。そして、レコード獲得処理は終了する。
【0082】
次に、実施形態におけるストレージ装置100のレコード解放処理を、
図9に示すフローチャート(ステップS31,S32)に従って説明する。
【0083】
図4に示したIO制御部11のレコード獲得解放管理部113はレコードを解放して、IO制御部11のフリーキュー管理部111はレコードをフリーキューにエンキューする(ステップS31)。
【0084】
IO制御部11のレコード情報設定管理部114は、レコードを未使用に設定する(ステップS32)。そして、レコード解放処理は終了する。
【0085】
〔B-3〕変形例
上述した実施形態では、コントローラがcold start、つまりキャッシュ上に何のデータも入っていない空の状態で起動することを前提としていた。
【0086】
ストレージ装置100の状況によってはwarm start、つまりキャッシュの全部または一部について使用中の状態を保持しながらコントローラを起動することも考えられる。このwarm startに対応した変形例における制御処理について説明する。
【0087】
変形例における制御処理では、上述した実施形態における制御処理に加えて以下の(1)~(3)の処理を行うようにする。
【0088】
(1)旧リードポインタという変数を追加する。cold startの時の初期値はリードポインタと同値とする。一方、warm startの時は初期化せずにリブート前の値から変更しない。リードポインタが旧リードポインタを追い越した場合には、旧リードポインタの値をリードポインタの値に変更する。これにより、リードポインタは旧リードポインタと同じか小さい値をとる。
【0089】
(2)テーブルからレコードを獲得する時にレコードの状態を見て、未使用の状態のレコードを獲得するようにする。ただし、リードポインタが旧リードポインタと同じであれば、リードポインタの位置のレコードの状態は不定値なので、状態を確認せずにリードポインタの位置からレコードを獲得する。
【0090】
(3)レコードの解放では、リードポインタ以降にあるレコードはフリーキューに繋がないようにする。
【0091】
ここで、レコードについて補足する。通常はコントローラをwarm startさせた場合はコントローラのメモリが保持されるため、レコードの状態は未使用か使用中のいずれかになっていると考えられる。ただし、cold startさせてからリードポインタがテーブルの最後に到達する前にwarm startでリブートさせるケースを考慮すると、テーブル後方のレコードの状態が不定値のままという場合もあり得る。このために旧リードポインタを用いて制御する。更に、warm startの後にwarm startでリブートする場合も考慮して、旧リードポインタの値を適宜更新するようにしている。
【0092】
レコードを獲得する際に、リードポインタの位置がテーブルの最後ではなく、旧リードポインタとも離れているケースでは、ループして検索する必要がある。レコードの状態を確認して使用中であれば、そのレコードは放置してリードポインタを次の位置に移動させる。そして、またリードポインタ位置のレコードの状態を確認するという動作を未使用のレコードを見つけるまで繰り返していく。もし上述のリードポインタの移動によってテーブルの最後に到達した場合には、今度はフリーキューからの獲得を試みる。
【0093】
リードポインタの位置がテーブルの最後ではなく、リードポインタと旧リードポインタが一致するケースは、上述した実施例の動作が行われる。ただし、リードポインタが旧リードポインタを超えないように旧リードポインタの値も更新しておく。
【0094】
レコードを解放する際は、解放対象レコードのアドレスをリードポインタと比較して、リードポインタより若番アドレスの場合は、レコードはフリーキューに繋がれる。リードポインタと同じアドレスか老番アドレスの場合はフリーキューへの操作は行われない。
【0095】
別言すれば、テーブル管理部112は、キャッシュメモリ内のレコードの状態のうち少なくとも一部を保持しながらストレージ装置100の起動を行う場合には、ポインタとして、起動の前に参照していたレコードの位置を第1のポインタとして保持すると共に、起動の後に参照するレコードの位置を第2のポインタとして保持する。レコード獲得解放管理部113は、第1のポインタと第2のポインタとの位置に応じて、レコードを獲得する。
【0096】
また、獲得したレコードの解放の際に、レコードのアドレスが第2のポインタの位置以前である場合には、フリーキュー管理部111はレコードを未使用のレコードが登録されているキューに登録して、レコード情報設定管理部114はレコードの状態を使用中から未使用に変更して記憶する。獲得したレコードの解放の際に、レコードのアドレスが第2のポインタの位置よりも後である場合には、フリーキュー管理部111はレコードをキューに登録せずに、レコード情報設定管理部114はレコードの状態を使用中から未使用に変更して記憶する。
【0097】
変形例におけるストレージ装置100のレコード獲得処理を、
図10に示すフローチャート(ステップS41~S59)に従って説明する。
【0098】
図4に示したIO制御部11のテーブル管理部112は、リードポインタの位置を確認する(ステップS41)。
【0099】
テーブル管理部112は、リードポインタの位置がテーブルの最後であるかを判定する(ステップS42)。
【0100】
リードポインタの位置がテーブルの最後でない場合には(ステップS42のNOルート参照)、テーブル管理部112は、リードポインタと旧リードポインタとの位置を確認する(ステップS43)。
【0101】
テーブル管理部112は、リードポインタと旧リードポインタとが同じであるかを判定する(ステップS44)。
【0102】
リードポインタと旧リードポインタとが同じでない場合には(ステップS44のNOルート参照)、IO制御部11のレコード情報設定管理部114は、リードポインタの位置のレコードの状態を確認する(ステップS45)。
【0103】
レコード情報設定管理部114は、リードポインタの位置のレコードが未使用であるかを判定する(ステップS46)。
【0104】
リードポインタの位置のレコードが未使用でない場合には(ステップS46のNOルート参照)、テーブル管理部112は、リードポインタを次のレコード位置になるようにインクリメントする(ステップS47)。そして、処理はステップS42へ戻る。
【0105】
一方、リードポインタの位置のレコードが未使用である場合には(ステップS46のYESルート参照)、IO制御部11のレコード獲得解放管理部113は、リードポインタ位置のレコードをテーブルから確保し記憶する(ステップS48)。
【0106】
テーブル管理部112は、リードポインタを次のレコード位置になるようにインクリメントする(ステップS49)。そして、処理はステップS58へ進む。
【0107】
ステップS44において、リードポインタと旧リードポインタとが同じである場合には(ステップS44のYESルート参照)、レコード獲得解放管理部113は、リードポインタ位置のレコードをテーブルから確保し記憶する(ステップS50)。
【0108】
テーブル管理部112は、リードポインタを次のレコード位置になるようにインクリメントする(ステップS51)。
【0109】
テーブル管理部112は、旧リードポインタをリードポインタの値に変更する(ステップS52)。そして、処理はステップS58へ進む。
【0110】
ステップS42において、リードポインタの位置がテーブルの最後である場合には(ステップS42のYESルート参照)、IO制御部11のフリーキュー管理部111は、フリーキューを確認する(ステップS53)。
【0111】
フリーキュー管理部111は、フリーキューにレコードがあるかを判定する(ステップS54)。
【0112】
フリーキューにレコードがない場合には(ステップS54のNOルート参照)、レコード獲得解放管理部113は、他のレコードが解放され、使用可能となるまで待ち合わせる(ステップS55)。そして、変形例におけるレコード獲得処理は終了する。
【0113】
一方、フリーキューにレコードがある場合には(ステップS54のYESルート参照)、フリーキュー管理部111は、フリーキューにあるレコードをデキューする(ステップS56)。
【0114】
レコード獲得解放管理部113は、デキューされたレコードを確保する(ステップS57)。
【0115】
レコード情報設定管理部114は、レコードにキャッシュのマッピング情報(ブロックアドレス、メモリアドレス等)を設定する(ステップS58)。
【0116】
レコード情報設定管理部114は、レコードを使用中に設定する(ステップS59)。そして、変形例におけるレコード獲得処理は終了する。
【0117】
次に、変形例におけるストレージ装置100のレコード解放処理を、
図11に示すフローチャート(ステップS61~S64)に従って説明する。
【0118】
図4に示したIO制御部11のテーブル管理部112は、レコードのアドレスとリードポインタの位置とを比較する(ステップS61)。
【0119】
レコード獲得解放管理部113は、レコードのアドレスがリードポインタと同じかそれより大きいかを判定する(ステップS62)。
【0120】
レコードのアドレスがリードポインタと同じかそれより大きい場合には(ステップS62のYESルート参照)、処理はステップS64へ進む。
【0121】
レコードのアドレスがリードポインタ未満の場合には(ステップS62のNOルート参照)、レコード獲得解放管理部113は、レコードをフリーキューにエンキューする(ステップS63)。
【0122】
レコード情報設定管理部114は、レコードを未使用に設定する(ステップS64)。そして、変形例におけるレコード解放処理は終了する。
【0123】
〔C〕効果
上述した実施形態におけるストレージ装置100,キャッシュ管理プログラム及びキャッシュ管理方法によれば、例えば以下の作用効果を奏することができる。
【0124】
テーブル管理部112は、キャッシュメモリ12の未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照する。レコード獲得解放管理部113は、ポインタによって参照された位置のレコードを獲得する。テーブル管理部112は、レコードの獲得に応じて、ポインタをキャッシュ管理テーブル内の更に次のレコードの位置に移動させる。これにより、未使用のレコードをリンクするフリーキューをストレージ装置100の初期化時に作成不要とし、ストレージ装置100の立ち上げ時間を短縮できる。
【0125】
レコード情報設定管理部114は、キャッシュ管理テーブル内から獲得したレコードの状態を、不定値から使用中に変更して記憶する。これにより、レコードの管理を確実に行うことができる。
【0126】
レコード獲得解放管理部113は、ポインタの位置がキャッシュ管理テーブル内における最終アドレスである場合には、未使用のレコードが登録されているキューの中から先頭のレコードを獲得する。これにより、キャッシュ管理テーブル内にレコードがない場合でもキューの中からレコードを獲得できる。
【0127】
レコード情報設定管理部114は、キューの中から獲得したレコードの状態を、未使用から使用中に変更して記憶する。これにより、レコードの管理を確実に行うことができる。
【0128】
獲得したレコードの解放の際に、フリーキュー管理部111はレコードを未使用のレコードが登録されているキューに登録して、レコード情報設定管理部114はレコードの状態を使用中から未使用に変更して記憶する。これにより、レコードの解放の際にフリーキューを作成することができる。
【0129】
テーブル管理部112は、キャッシュメモリ内のレコードの状態のうち少なくとも一部を保持しながらストレージ装置100の起動を行う場合には、ポインタとして、起動の前に参照していたレコードの位置を第1のポインタとして保持すると共に、起動の後に参照するレコードの位置を第2のポインタとして保持する。レコード獲得解放管理部113は、第1のポインタと第2のポインタとの位置に応じて、レコードを獲得する。これにより、以前のレコードの状態を維持しながら、ストレージ装置100のwarm startを短時間で実施できる。
【0130】
獲得したレコードの解放の際に、レコードのアドレスが第2のポインタの位置以前である場合には、フリーキュー管理部111はレコードを未使用のレコードが登録されているキューに登録して、レコード情報設定管理部114はレコードの状態を使用中から未使用に変更して記憶する。獲得したレコードの解放の際に、レコードのアドレスが第2のポインタの位置よりも後である場合には、フリーキュー管理部111はレコードをキューに登録せずに、レコード情報設定管理部114はレコードの状態を使用中から未使用に変更して記憶する。これにより、ストレージ装置100のwarm start後においても、レコードの解放の際にフリーキューを作成することができる。
【0131】
〔D〕その他
開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
【0132】
〔E〕付記
以上の実施形態に関し、更に以下の付記を開示する。
【0133】
(付記1)
キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、
前記ポインタによって参照された位置のレコードを獲得し、
前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる、
プロセッサを備える、ストレージ装置。
【0134】
(付記2)
前記プロセッサは、
前記キャッシュ管理テーブル内から獲得した前記レコードの状態を、不定値から使用中に変更して記憶する、
付記1に記載のストレージ装置。
【0135】
(付記3)
前記プロセッサは、
前記ポインタの位置が前記キャッシュ管理テーブル内における最終アドレスである場合には、未使用のレコードが登録されているキューの中から先頭のレコードを獲得する、
付記1に記載のストレージ装置。
【0136】
(付記4)
前記プロセッサは、
前記キューの中から獲得した前記レコードの状態を、未使用から使用中に変更して記憶する、
付記3に記載のストレージ装置。
【0137】
(付記5)
前記プロセッサは、
獲得した前記レコードの解放の際に、当該レコードを未使用のレコードが登録されているキューに登録して、当該レコードの状態を使用中から未使用に変更して記憶する、
付記1~4のいずれか一項に記載のストレージ装置。
【0138】
(付記6)
前記プロセッサは、
前記キャッシュメモリ内のレコードの状態のうち少なくとも一部を保持しながら当該ストレージ装置の起動を行う場合には、前記ポインタとして、前記起動の前に参照していたレコードの位置を第1のポインタとして保持すると共に、前記起動の後に参照するレコードの位置を第2のポインタとして保持し、
前記第1のポインタと前記第2のポインタとの位置に応じて、レコードを獲得する、
付記1~4のいずれか一項に記載のストレージ装置。
【0139】
(付記7)
前記プロセッサは、
獲得した前記レコードの解放の際に、当該レコードのアドレスが前記第2のポインタの位置以前である場合には当該レコードを未使用のレコードが登録されているキューに登録して当該レコードの状態を使用中から未使用に変更して記憶する一方、当該レコードのアドレスが前記第2のポインタの位置よりも後である場合には当該レコードを前記キューに登録せずに当該レコードの状態を使用中から未使用に変更して記憶する、
付記6に記載のストレージ装置。
【0140】
(付記8)
キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、
前記ポインタによって参照された位置のレコードを獲得し、
前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる、
処理をコンピュータに実行させる、キャッシュ管理プログラム。
【0141】
(付記9)
前記キャッシュ管理テーブル内から獲得した前記レコードの状態を、不定値から使用中に変更して記憶する、
処理を前記コンピュータに実行させる、付記8に記載のキャッシュ管理プログラム。
【0142】
(付記10)
前記ポインタの位置が前記キャッシュ管理テーブル内における最終アドレスである場合には、未使用のレコードが登録されているキューの中から先頭のレコードを獲得する、
処理を前記コンピュータに実行させる、付記8に記載のキャッシュ管理プログラム。
【0143】
(付記11)
前記キューの中から獲得した前記レコードの状態を、未使用から使用中に変更して記憶する、
処理を前記コンピュータに実行させる、付記10に記載のキャッシュ管理プログラム。
【0144】
(付記12)
獲得した前記レコードの解放の際に、当該レコードを未使用のレコードが登録されているキューに登録して、当該レコードの状態を使用中から未使用に変更して記憶する、
処理を前記コンピュータに実行させる、付記8~11のいずれか一項に記載のキャッシュ管理プログラム。
【0145】
(付記13)
前記キャッシュメモリ内のレコードの状態のうち少なくとも一部を保持しながら当該ストレージ装置の起動を行う場合には、前記ポインタとして、前記起動の前に参照していたレコードの位置を第1のポインタとして保持すると共に、前記起動の後に参照するレコードの位置を第2のポインタとして保持し、
前記第1のポインタと前記第2のポインタとの位置に応じて、レコードを獲得する、
処理を前記コンピュータに実行させる、付記8~11のいずれか一項に記載のキャッシュ管理プログラム。
【0146】
(付記14)
獲得した前記レコードの解放の際に、当該レコードのアドレスが前記第2のポインタの位置以前である場合には当該レコードを未使用のレコードが登録されているキューに登録して当該レコードの状態を使用中から未使用に変更して記憶する一方、当該レコードのアドレスが前記第2のポインタの位置よりも後である場合には当該レコードを前記キューに登録せずに当該レコードの状態を使用中から未使用に変更して記憶する、
処理を前記コンピュータに実行させる、付記13に記載のキャッシュ管理プログラム。
【0147】
(付記15)
キャッシュメモリの未使用レコードの管理に関し、キャッシュ管理テーブル内で次に使用されるレコードの位置を示すポインタを参照し、
前記ポインタによって参照された位置のレコードを獲得し、
前記レコードの獲得に応じて、前記ポインタを前記キャッシュ管理テーブル内の更に次のレコードの位置に移動させる、
処理をコンピュータが実行する、キャッシュ管理方法。
【0148】
(付記16)
前記キャッシュ管理テーブル内から獲得した前記レコードの状態を、不定値から使用中に変更して記憶する、
処理を前記コンピュータが実行する、付記15に記載のキャッシュ管理方法。
【0149】
(付記17)
前記ポインタの位置が前記キャッシュ管理テーブル内における最終アドレスである場合には、未使用のレコードが登録されているキューの中から先頭のレコードを獲得する、
処理を前記コンピュータが実行する、付記15に記載のキャッシュ管理方法。
【0150】
(付記18)
前記キューの中から獲得した前記レコードの状態を、未使用から使用中に変更して記憶する、
処理を前記コンピュータが実行する、付記17に記載のキャッシュ管理方法。
【0151】
(付記19)
獲得した前記レコードの解放の際に、当該レコードを未使用のレコードが登録されているキューに登録して、当該レコードの状態を使用中から未使用に変更して記憶する、
処理を前記コンピュータが実行する、付記15~18のいずれか一項に記載のキャッシュ管理方法。
【0152】
(付記20)
前記キャッシュメモリ内のレコードの状態のうち少なくとも一部を保持しながら当該ストレージ装置の起動を行う場合には、前記ポインタとして、前記起動の前に参照していたレコードの位置を第1のポインタとして保持すると共に、前記起動の後に参照するレコードの位置を第2のポインタとして保持し、
前記第1のポインタと前記第2のポインタとの位置に応じて、レコードを獲得する、
処理を前記コンピュータが実行する、付記15~18のいずれか一項に記載のキャッシュ管理方法。
【0153】
(付記21)
獲得した前記レコードの解放の際に、当該レコードのアドレスが前記第2のポインタの位置以前である場合には当該レコードを未使用のレコードが登録されているキューに登録して当該レコードの状態を使用中から未使用に変更して記憶する一方、当該レコードのアドレスが前記第2のポインタの位置よりも後である場合には当該レコードを前記キューに登録せずに当該レコードの状態を使用中から未使用に変更して記憶する、
処理を前記コンピュータが実行する、付記20に記載のキャッシュ管理方法。
【符号の説明】
【0154】
100 :ストレージ装置
1 :コントローラ
11 :CPU
11 :IO制御部
110 :キャッシュ制御部
111 :フリーキュー管理部
112 :テーブル管理部
113 :レコード獲得解放管理部
114 :レコード情報設定管理部
12 :キャッシュメモリ
13 :システム制御部
14 :バックエンドIF
15 :メンテナンスLAN
16 :インタコネクトIF
17 :ホストIF
101 :構成情報
140 :ドライブ装置