(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0010】
図1は、本実施の形態の情報処理装置の内部構成を示している。ここで例示する情報処理装置は、インターネット対応の監視カメラ、温度計、ウェアラブルの心拍計など、低消費電力で間欠動作するIOT(Internet of things)機器のいずれかである。あるいは、携帯ゲーム機、パーソナルコンピュータ、携帯電話、タブレット端末、PDAなど一般的な情報機器のいずれかでもよい。情報処理装置10は、アプリケーションプロセッサ12、マイクロコントローラ14、キャッシュコントローラ16、SRAM(Static Random Access Memory)18、ネットワークコントローラ24、暗号処理部28、およびフラッシュコントローラ26が、インターコネクト30にそれぞれ接続されてなるホストシステム20と、NAND型フラッシュメモリなどのフラッシュメモリ22を接続した構成を有する。
【0011】
MMU(Memory Management Unit)を用いた一般的な仮想メモリでは、アクセス先のページが格納されていない、いわゆるページミスが発生したとき、OSの制御により二次記憶装置とメモリの間でデータの入れ替えがなされる。このように仮想メモリの機構をOSが制御する場合、大きいサイズのプログラムデータをメモリに常時格納しておく必要があり、最低限必要なメモリ容量も非常に大きくなる。そのため、一般的には大容量の外付けDRAMなどが用いられている。
【0012】
本実施の形態では、フラッシュメモリ22等の二次記憶装置の内容をSRAM18に直接キャッシュするとともに、メモリアクセスを要求するアプリケーションプロセッサ12とは別に、二次記憶装置とのデータの入れ替えを行う専用のハードウェアとしてマイクロコントローラ14を設ける。さらにSRAM18におけるデータのキャッシュヒット/キャッシュミスを判定するための機構をキャッシュコントローラ16に実装し、従来のページテーブルの役割を担う情報を必要最低限とすることにより当該情報のデータサイズを削減する。
【0013】
これにより、大きなサイズのOSプログラムやページテーブルを格納する必要がなくなるため、容量の小さいSRAM18であっても一般的な仮想メモリと同様に大容量のデータへのアクセスが可能となる。またリフレッシュ動作が必要なDRAMの介在を不要とすることにより、特にユーザが情報処理装置10を使用していない待機状態における電力消費量を削減する。なお本実施の形態はユーザの使用状況によらず適用してもよいし、待機状態のときのみに適用し、ユーザが使用している、すなわちアプリケーションプロセッサ12が稼働している期間は、DRAMを利用した通常の仮想メモリ機構に切り替えてもよい。
図1ではこの場合に用いるDRAMについては図示を省略している。
【0014】
アプリケーションプロセッサ12は、OSやアプリケーションプログラムを処理する。処理に必要な命令やデータはSRAM18から内部のキャッシュメモリに読み出す。マイクロコントローラ14は、小容量のローカルRAM上で動作し、キャッシュコントローラ16およびフラッシュコントローラ26を制御する。ネットワークコントローラ24は、WLAN(Wireless LAN)やEthernet(登録商標)などの通信ユニットであり、ネットワークを介してパケットを受信したときはアプリケーションプロセッサ12に割り込みを通知する。
【0015】
フラッシュコントローラ26はNAND型フラッシュメモリデバイスなどに対する一般的なインターフェースであり、マイクロコントローラ14の制御のもと、フラッシュメモリ22にアクセスして、所定のブロック単位でデータの読み出し/書き込みを行う。SRAM18はメモリマップされた領域であり、アプリケーションプロセッサ12が直接アクセスすることでバッファとして使用することも、キャッシュコントローラ16による制御を介することでフラッシュメモリ22の仮想メモリとして使用することもできる。
【0016】
キャッシュコントローラ16は、インターコネクト30のスレーブとしてメモリマップされ、アプリケーションプロセッサ12が主記憶装置としてアクセスする。キャッシュコントローラ16はページテーブルの代わりに、内部にキャッシュタグを格納し、データの実体はSRAM18に格納される。暗号処理部28は、マイクロコントローラ14の制御のもと、フラッシュメモリ22に格納すべきデータを暗号化したり、読み出されたデータを復号したりする。インターコネクト30は、図中、「M」と記載されたマスタユニットと「S」と記載されたスレーブユニットを相互接続し、複数のマスタユニット、スレーブユニットの同時動作をサポートする。例えばアプリケーションプロセッサ12がキャッシュコントローラ16にアクセス中であっても、その他のマスタがSRAMにアクセスすることを可能とする。
【0017】
図2は本実施の形態の情報処理装置10の構成とデータの関係を模式的に示している。まずアプリケーションプロセッサ12のメモリマップは、キャッシュコントローラ16がスレーブとしてマップされたアドレス空間を含み、当該アドレス空間はフラッシュメモリ22の論理アドレスを示している。メモリマップにはそのほか、SRAM18自体やレジスタなどがマップされる。キャッシュコントローラ16は仮想メモリのインターフェースであり、実際のデータはフラッシュメモリ22に格納されているものの一部がSRAM18にキャッシュされている。
【0018】
処理の流れはおよそ次のようになる。まずアプリケーションプロセッサ12は、フラッシュメモリ22に対するアドレスを指定することによりキャッシュコントローラ16にデータアクセス要求を行う。キャッシュコントローラ16は、アプリケーションプロセッサ12が指定したアドレスに基づき内部に保持するキャッシュタグ32を参照し、ヒット/ミス判定を行う。対応する有効なデータがSRAM18に格納されていればヒットとし、データを読み出すなど要求された処理を行う(S2)。
【0019】
データが格納されていなければミスとしてマイクロコントローラ14に通知する(S4)。マイクロコントローラ14はフラッシュコントローラ26を制御してフラッシュメモリ22から該当データを読み出し(S6)、SRAM18の指定された領域に格納する(S8)。これらの手順により、アプリケーションプロセッサ12は一般的な手法でアクセス要求を行い、データ読み出し/書き込みが適切になされるまで待機すればよいことになる。より詳細な処理手順については後述する。
【0020】
図3は、キャッシュコントローラ16に格納されるキャッシュタグ32のデータ構造を例示している。キャッシュコントローラ16は、SRAM18のうちキャッシュとして使用する領域のサイズと、フラッシュメモリ22のうちメモリマップにマッピングされる領域のサイズに応じて設計する。キャッシュとして利用するサイズをSRAM全体の1/2、1/4、1/8、などと変更可能にしておくことにより、バッファなどその他の用途に利用する領域のサイズを調整できる。例えば1GiB(2
30バイト)のデータをSRAM18の4MiB(4×2
20バイト)の領域にキャッシュする場合を想定する。ページサイズは4KiB(4×2
10B)とする。
【0021】
キャッシュコントローラ16がスレーブとしてマップされるアドレス空間は、フラッシュメモリ22をメモリとして使用するサイズとなる。1GiBの領域をサポートする場合、アドレス40は図示するように30ビットの情報で構成する。4ウェイセットアソシアティブの場合、各インデックスに4つのタグが1セットとして対応づけられる。各タグ42には、対応するページが有効であるか否かを示すバリッドビット44(「V」と表記)と、キャッシュされたページが更新されフラッシュメモリ22における対応データと一致しているか否かを示すダーティービット46(「D」と表記)が付加される。
【0022】
4MiBの領域を4KiBのページで構成すると、キャッシュタグのエントリ数は2
10=1024となる。4ウェイセットアソシアティブの場合、30ビットのアドレス40のうち19:12の8ビットのインデックスによって、対応する4つのキャッシュタグが参照され、そのうちアドレス40の29:20の10ビットのタグと一致する有効なキャッシュタグがあればキャッシュヒットとなる。この例でキャッシュタグに必要な記憶領域は1024エントリ×12ビット/8=1536バイトとなり、一般的なページテーブルより格段に小さいサイズとなる。なおSRAM18のうちキャッシュとして利用する領域を上述のように1/2、1/4、1/8、1/16と調整する場合は、タグとして比較するビット数が増えるため、キャッシュタグに必要な領域が多少、増加する。
【0023】
次にこれまで述べた構成によって実現できる情報処理装置の動作について説明する。
図4は、読み出し処理において対象データがSRAM18にキャッシュされている場合の処理手順を示している。まずアプリケーションプロセッサ12などのバスマスタは、キャッシュコントローラ16に対しアドレスを指定して読み出しアクセスを要求する(S10)。それに対しキャッシュコントローラ16は、内部に保持するキャッシュタグを参照し、インデックスおよびタグが一致し、かつ有効なエントリが存在したときキャッシュヒットを判定して、要求されたデータを読み出すためにSRAM18にアクセスする(S12)。SRAM18からレスポンスと該当データが返されたら(S14)、キャッシュコントローラ16は当該データを、レスポンスとともにアプリケーションプロセッサ12などのバスマスタに転送する(S16)。
【0024】
図5は読み出し処理において対象データがSRAM18にキャッシュされてない場合の処理手順を示している。まずアプリケーションプロセッサ12などのバスマスタは、キャッシュコントローラ16に対しメモリアドレスを指定して読み出しアクセスを要求する(S20)。それに対しキャッシュコントローラ16は、内部に保持するキャッシュタグを参照し、インデックスおよびタグが一致し、かつ有効なエントリが存在しないときキャッシュミスを判定して、マイクロコントローラ14に割り込みを発行する(S22)。
【0025】
キャッシュコントローラ16はインターコネクトスレーブインターフェースとは別に、レジスタインターフェースを持ち、キャッシュミスしたアドレスと書き換え対象となるSRAM18内の領域に係る情報をレジスタ(図示せず)に格納しておく。マイクロコントローラ14はキャッシュコントローラ16の当該レジスタからそれらの情報を読み出す(S24)。続いてマイクロコントローラ14は、フラッシュコントローラ26に対して該当するアドレスのデータの読み出しを要求する(S26)。
【0026】
当該読み出し要求には、S24で取得した、SRAM18内の書き換え対象の領域をデータの読み出し先として指定する情報を含める。そしてSRAM18内のキャッシュに用いられていない領域に書き込むことにより、フラッシュコントローラ26が当該要求を読み出す。フラッシュコントローラ26は、フラッシュメモリ22から該当データを読み出し、指定されたSRAM18内の領域に格納する(S28)。データの格納が完了したら、フラッシュコントローラ26は、マイクロコントローラ14に対し完了通知を発行する(S30)。
【0027】
これに応じてマイクロコントローラ14は、新たに格納されたデータの復号処理を暗号処理部28に依頼し、それが完了した時点でキャッシュコントローラ16に完了通知を発行するとともに、キャッシュコントローラ16のキャッシュタグを更新する(S32)。これに応じてキャッシュコントローラ16は、再びキャッシュタグを参照してキャッシュヒットを判定し、要求されたデータを読み出すためにSRAM18にアクセスする(S34)。これに対しSRAM18からレスポンスと該当データが返されたら(S36)、キャッシュコントローラ16は当該データを、レスポンスとともにアプリケーションプロセッサ12などのバスマスタに転送する(S38)。
【0028】
図6は書き込み処理において対象データがSRAM18にキャッシュされている場合の処理手順を示している。まずアプリケーションプロセッサ12などのバスマスタは、キャッシュコントローラ16に対しアドレスを指定して書き込みアクセスを要求する(S40)。それに対しキャッシュコントローラ16は、内部に保持するキャッシュタグを参照し、インデックスおよびタグが一致し、かつ有効なエントリが存在したときキャッシュヒットを判定して、その旨のレスポンスを要求元のマスタに返す(S42)。
【0029】
それに対しマスタは、書き込むデータをキャッシュコントローラ16に送信する(S44)。キャッシュコントローラ16は、要求されたアドレスのデータに書き込みを行うためにSRAM18にアクセスし(S46)、マスタから送信されたデータを書き込む(S48)。なおこの際、キャッシュコントローラ16は、対応するキャッシュタグのダーティービット46を更新し、フラッシュメモリ22における対応データと不一致(ダーティ)であることを記録する。
【0030】
図7は、書き込み処理において対象データがSRAM18にキャッシュされていない場合の処理手順を示している。まずアプリケーションプロセッサ12などのバスマスタは、キャッシュコントローラ16に対しアドレスを指定して書き込みアクセスを要求する(S50)。それに対しキャッシュコントローラ16は、内部に保持するキャッシュタグを参照し、インデックスおよびタグが一致し、かつ有効なエントリが存在しないときキャッシュミスを判定し、マイクロコントローラ14に割り込みを発行する(S52)。これに応じてマイクロコントローラ14はキャッシュコントローラ16のレジスタから、キャッシュミスしたアドレスと、書き換え対象となるSRAM18内の領域に係る情報を読み出す(S54)。
【0031】
続いてマイクロコントローラ14は、フラッシュコントローラ26に対して該当するアドレスのデータの読み出しを要求する(S56)。当該読み出し要求には、S54で取得した、SRAM18内の書き換え対象の領域をデータの読み出し先として指定する情報を含める。そしてSRAM18内のキャッシュに用いられていない領域に書き込むことにより、フラッシュコントローラ26が当該要求を読み出す。フラッシュコントローラ26は、フラッシュメモリ22から該当データを読み出し、指定されたSRAM18内の領域に格納する(S58)。
【0032】
データの格納が完了したら、フラッシュコントローラ26は、マイクロコントローラ14に対し完了通知を発行する(S60)。これに応じてマイクロコントローラ14は、新たに格納されたデータの復号処理を暗号処理部28に依頼し、それが完了した時点でキャッシュコントローラ16に完了通知を発行するとともに、キャッシュコントローラ16のキャッシュタグを更新する(S62)。これに応じてキャッシュコントローラ16は、再びキャッシュタグを参照してキャッシュヒットを判定し、その旨のレスポンスを要求元のマスタに返す(S64)。
【0033】
それに対しマスタは、書き込むデータをキャッシュコントローラ16に送信する(S66)。キャッシュコントローラ16は、要求されたアドレスのデータに書き込みを行うためにSRAM18にアクセスし(S68)、マスタから送信されたデータを書き込む(S70)。なおこの際もキャッシュコントローラ16は、対応するキャッシュタグのダーティービット46をダーティに更新する。
【0034】
図8は、書き込み処理においてSRAM18からフラッシュメモリ22への書き戻し処理を含む場合の処理手順を示している。この状況は、書き込み先のキャッシュエントリが全てダーティの場合などに発生する。まずアプリケーションプロセッサ12などのバスマスタは、キャッシュコントローラ16に対しアドレスを指定して書き込みアクセスを要求する(S80)。それに対しキャッシュコントローラ16は、内部に保持するキャッシュタグを参照し、インデックスが一致している4つのエントリが全てダーティであった場合などに、それらのエントリの書き戻しが必要と判定し、マイクロコントローラ14に割り込みを発行する(S82)。
【0035】
これに応じてマイクロコントローラ14は、キャッシュコントローラ16のレジスタから、書き込みが要求されたアドレス、書き換え対象となるSRAM18内の領域、書き戻しが必要なデータの格納領域、および当該データのフラッシュメモリ22におけるアドレスに係る情報を読み出す(S84)。そしてマイクロコントローラ14は、フラッシュコントローラ26に対して、まず書き戻しが必要なデータの書き込み要求を発行する(S86)。当該書き込み要求には、S84で取得した、書き戻しが必要なデータのSRAM18内での格納領域および対応するアドレスに係る情報を含める。そしてSRAM18内のキャッシュに用いられていない領域に書き込むことにより、フラッシュコントローラ26が当該要求を読み出す。
【0036】
フラッシュコントローラ26は、SRAM18内の該当領域からデータを読み出し、フラッシュメモリ22の対応するアドレスへ書き込む(S88)。データの書き込みが完了したら、フラッシュコントローラ26はマイクロコントローラ14に対し完了通知を発行する(S90)。これに応じてマイクロコントローラ14は、フラッシュコントローラ26に対して該当するアドレスのデータの読み出しを要求する(S92)。当該読み出し要求には、S84で取得した、SRAM18内の書き換え対象の領域をデータの読み出し先として指定する情報を含める。そしてSRAM18内のキャッシュに用いられていない領域に書き込むことにより、フラッシュコントローラ26が当該要求を読み出す。
【0037】
フラッシュコントローラ26は、フラッシュメモリ22から該当データを読み出し、指定されたSRAM18内の領域に格納する(S94)。データの格納が完了したら、フラッシュコントローラ26は、マイクロコントローラ14に対し完了通知を発行する(S96)。マイクロコントローラ14は、新たに格納されたデータの復号処理を暗号処理部28に依頼し、それが完了した時点でキャッシュコントローラ16に完了通知を発行するとともにキャッシュコントローラ16のキャッシュタグを更新する(S98)。
【0038】
これに応じてキャッシュコントローラ16は、再びキャッシュタグを参照してキャッシュヒットを判定し、その旨のレスポンスを要求元のマスタに返す(S100)。それに対しマスタは、書き込むデータをキャッシュコントローラ16に送信する(S102)。キャッシュコントローラ16は、要求されたアドレスのデータに書き込みを行うためにSRAM18にアクセスし(S104)、マスタから送信されたデータを書き込む(S106)。
【0039】
本実施の形態では、二次記憶装置に格納されたデータを直接、SRAMにキャッシュするため、DRAMを介在させた場合と比較するとキャッシュミスしたときのペナルティが大きくなる。二次記憶装置をNAND型フラッシュメモリとした場合、読み出しおよび書き込みのレイテンシはそれぞれ100μs、500μs程度となり、フラッシュメモリにおけるブロックのデータ消去が発生すると1ms程度かかることもある。この間、アプリケーションプロセッサをストールさせると、特に書き込み時のキャッシュミスに対するペナルティが大きくなるが、例えばSRAM18に書き込み用のバッファ領域を設けることによりレイテンシを短縮することができる。
【0040】
一例として次の条件を仮定する。
プロセッサ、バス周波数:500MHz
ロード/ストアによるストール:100%
プロセッサキャッシュヒット率:80%
プロセッサキャッシュヒットサイクル:15サイクル
SRAMキャッシュヒット率:99.9%
SRAMキャッシュミス率(読み出し):0.08%
SRAMキャッシュミス率(書き戻し):0.02%
DRAMを介在させた場合のアクセスレイテンシ:100n秒(50サイクル)
SRAMキャッシュヒット時のレイテンシ:100n秒(50サイクル)
SRAMキャッシュミス時(読み出し)のレイテンシ:100μ秒(5×10
4サイクル)
SRAMキャッシュミス時(書き込み)のレイテンシ:1m秒(5×10
5サイクル)
【0041】
NAND型フラッシュメモリは高いバンド幅を有するため、1度の読み出しサイズを大きな単位とすることで、キャッシュヒット率を向上させることができる。ロード/ストアサイズが4バイト、SRAMキャッシュラインのサイズが4096バイトの場合、1キャッシュラインのデータを順番に参照する場合であれば、キャッシュミス率は4/4096≒0.1%、ひいてはキャッシュヒット率は上記のとおり99.9%となる。
【0042】
上記条件では、DRAMを介在させた場合と比較し約7.4倍のサイクルを要する。しかしながら夜中など情報処理装置を使用していない期間の待機処理としては十分な速さといえる。さらにSRAMの容量を増やすなどしてキャッシュミス率が1桁小さくなれば、DRAMを介在させた場合と比較し性能差は1.6倍まで縮めることができる。
【0043】
以上述べた本実施の形態によれば、二次記憶装置であるフラッシュメモリの少なくとも一部の領域を仮想メモリの機構によりメモリとして使用する。ここで、キャッシュミスが発生した場合のフラッシュメモリからのデータ読み出しや書き戻しの際のデータ書き込みに係る制御を、アプリケーションプロセッサとは異なる小規模なプロセッサが行うようにする。これにより、アプリケーションプロセッサを動作させる大規模なOSのコードを、データをキャッシュするメモリに格納しておく必要がなくなる。
【0044】
また、キャッシュミス/キャッシュヒットを判定する機構を、キャッシュコントローラにハードウェアとして実装することで、従来OSが参照していたページテーブルを単純化してサイズを小さくし、キャッシュコントローラ内部で保持するようにする。これらのことにより、フラッシュメモリから読み出されたデータをキャッシュするメモリを小容量のSRAMとすることができる。結果として、少なくとも本仮想メモリの機構を利用している期間においては大容量のDRAMを介在させる必要がなくなり、OSなどソフトウェアの規模に関わらずリフレッシュ動作のための定常的な電力の消費を抑えることができる。
【0045】
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。