以下、添付図面を参照しながら、本発明に係る情報処理装置およびプログラムの実施形態を詳細に説明する。
(第1の実施形態)
具体的な内容を説明する前に、従来技術と併せて本実施形態の概要を説明する。コンピュータシステムでは、大規模なデータ処理をするアプリケーション向けに大容量のメモリ空間(アドレス空間)を提供することが必要である。Linux(登録商標)などのOS(オペレーティングシステム)の仮想記憶(Virtual Memory)方式のスワップ処理を利用すれば、メインメモリ(例えばDRAM)のサイズより大きな仮想アドレス空間をアプリケーション(プロセス)に提供することができ、OSはDRAMから構成されるメインメモリ(物理メモリ)に収まらないメモリサイズ(データが格納される領域)が必要なアプリケーションを動作させることができる。
OSの仮想記憶システムでは、アプリケーションが指定する仮想アドレスを物理アドレス(メモリの位置を示す情報)にマッピングする(割り当てる)。マッピングはOSが管理するページ単位(以下、単に「ページ」と呼ぶ)で対応関係を記憶するページテーブルを利用して行われる。仮想記憶システムのスワップ処理機構が提供するスワップ処理では、メインメモリにマッピングされてないページ(DRAM上に存在しないページ)をHDDやSSD(Solid State Drive)などのメインメモリとは異なるストレージ内に確保された領域(「スワップ領域」)に保存し、上述したスワップ処理を実行しながらアプリケーションを動作させる。このように、スワップ領域が確保されるデバイスであるスワップデバイスとしてHDD(Hard Disk Drive)やSSD(Solid State Drive)などのデバイスを利用してスワップ処理を活用することで、DRAMから構成されるメインメモリと合わせて、アプリケーションが処理するデータが記憶される領域として(処理を行うためのワーキングエリア(作業領域)として)、大きい高速なメインメモリがあるように見せることが可能になる。
しかし、SSDやHDDなどのストレージデバイスでは、データの読み書きの速度を示すアクセス速度(アクセスレイテンシ)が遅いため、これらをスワップデバイスとして利用した場合、上述のスワップ処理(スワップデバイスからメインメモリへデータを転送し、メインメモリからスワップデバイスへデータを転送する処理)が発生すると、メインメモリとSSDとの間のデータ転送、または、メインメモリとHDDとの間のデータ転送によりアプリケーションの速度性能が大幅に低下するという問題が起こる。この問題を解決するために、メインメモリとスワップデバイスとの間の無駄なデータ転送を抑制することで性能低下を防止することが考えられてきた。また、スワップ処理が発生するとアプリケーションの速度性能が不安定になる(予測しづらくなる)ため、極力スワップ処理が発生しないようにメインメモリのサイズを十分に確保するシステム設計がなされることが一般的である。
また、このような大規模なデータ処理をするアプリケーションが実行されるクラウドやデータセンターなどのサーバシステムや、あるいは高性能化が進むスマートフォンなどのモバイルシステムに至る幅広いコンピュータシステムにおいて、低消費電力化は重要な課題である。これらのシステムの省電力化のためには、メインメモリに利用するDRAMの消費電力を削減することが特に重要である。
そこで、本実施形態では、MRAMやPCMや3D XPointやReRAMなどの大容量高速不揮発メモリの高速性を活かして、アプリケーションを高速にかつ低消費電力で実行するために積極的にスワップ処理を活用する新しい仮想記憶方式を提供する。詳細は後述するが、本実施形態では、コンピュータシステム(OSやアプリケーション)で利用可能なDRAM(メインメモリ)の容量を動的に小さくし、DRAMのうちページがマッピングされていない領域(アプリケーションのワーキングエリアとして利用されていない領域)をパワーオフする(電力供給を停止する)ことでセルフリフレッシュなどの低消費電力モードを利用する場合よりさらに待機電力を削減する。これにより、DRAMを搭載するサーバやスーパコンピュータなどの高性能システム、スマートフォンやタブレットやウェアラブルコンピュータや車載システムやIoT/M2M向けの組み込みシステムなどのコンピュータシステム/情報処理装置を省電力化することができる。また、後述の他の実施形態でも説明するように、DRAMを完全にシステムから除外することで、より省電力なシステムを構築することもできる。
また、スワップデバイスとして、特許文献1に記載されているSCMなどとも呼ばれる、DRAM(メインメモリ)と同等あるいは少し速度は遅いが、SSDやHDDなどのストレージよりは高速で、かつ、DRAMより大容量な大容量高速不揮発メモリ(Non−volatile Memory、以下、「NVM」と称する)を利用すると、スワップ処理のデータ転送を高速に行うことができるので、ある程度までは積極的にスワップ処理を行っても、アプリケーションの速度性能は急激に低下することはない。本実施形態では、この大容量高速不揮発メモリを利用して、速度性能を維持しつつ省電力化が可能なコンピュータシステムを構築する。
以下、本実施形態の具体的な内容を説明する。図1は、本実施形態の情報処理装置1のハードウェア構成の一例を示す図である。図1に示すように、情報処理装置1は、プロセッサ10と、第1メモリ20と、第2メモリ30とを備える。
プロセッサ10は、「処理装置」の一例であり、各種の処理を実行するための装置である。この例では、プロセッサ10は、Intel XEONプロセッサなどのプロセッサであり、複数のプロセッサコア101を有する(説明の便宜上、図1では1つのプロセッサコア101のみを表示)。それぞれのプロセッサコア101は、L1データキャッシュ、L1命令キャッシュ、L2キャッシュなどのプライベートキャッシュを有している(不図示)。また、例えばL3キャッシュなどのキャッシュ階層における最下位に位置するキャッシュであるラストレベルキャッシュ(LLC)を各プロセッサコア101で共有するシェアドキャッシュとして有している。以下では、このような構成を前提として説明するが、これに限られるものではなく、例えばシングルプロセッサシステムで構成されてもよい。
また、プロセッサ10は、第1メモリコントローラ102(この例ではDRAMコントローラ)を内包しており、これを介して第1メモリ20(この例ではDRAM)が接続(メモリバス接続)されている。また、プロセッサ101はI/Oコントローラ103(I/Oアダプタ)を内包しており、これを介して第2メモリ30(この例ではNVM)が接続(I/Oバス接続)されている。なお、これに限らず、例えば図2のように、プロセッサ10が第2メモリメモリコントローラ104(この例ではNVMコントローラ)を内包しており、これを介して第2メモリ30が接続(メモリバス接続)されていてもよい。いずれの場合でも、第1メモリ20と第2メモリ30の間のデータ転送は、プロセッサコア101が行ってもよいし、データ転送専用ハードウェア(DMAコントローラ)が行ってもよい。第2メモリ30とプロセッサ10の接続方法や、第2メモリ30の実装形態は任意である。
第1メモリ20は、メインメモリ(主記憶装置)として機能し、プロセッサ10は、第1メモリ20上のデータを直接読み書きする。例えば、プロセッサ10上で動作する任意のアプリケーション(プロセス、説明の便宜上「第1処理」と称する)が処理するデータ(任意のサイズのデータの集合であると考えてもよい)を「第1データ」と称すると、プロセッサ10は、第1データを処理する。より具体的には、プロセッサ10は、第1データを処理する第1処理を実行する。第1メモリ20は、第1データの少なくとも一部を記憶するメモリであり、この例ではDRAMで構成される。
第1メモリ20は、DRAMチップを搭載した複数のDIMM(電力の供給単位となる領域(電源単位領域))で構成されている。DIMMは複数のランク(ランクは複数のバンクから構成される)から構成される。以下では、第1メモリ20がセルフリフレッシュモードなどの低消費電力モードやパワーオフ(電力の供給が停止)されている状態を、低消費電力状態と呼ぶことがある。低消費電力状態の設定は、DIMM単位やランク単位やバンク単位などの単位で可能であり細かく制御できる。第1メモリ20はMRAM(Magnetoresistive Random Access Memory)などのメインメモリ用の高速不揮発メモリで一部あるいは全部置き換えられてもよい。
第2メモリ30は、スワップ領域が確保されるメモリであり、この例ではNVMで構成される。第2メモリ30は、上述の第1データの一部を記憶するメモリであると考えることができる。NVMなどで構成される第2メモリ30は、プロセッサ10と接続された大容量高速不揮発メモリ(あるいは大容量低消費電力メモリ)である。一般的に、NVMは、そのアクセス速度(データの読み書きの速度)はDRAMと同等程度または少し遅いが、DRAMより大容量(DRAMと同等程度の容量であってもよい)で、かつ、不揮発性なので待機電力はゼロか非常に低いメモリである。第2メモリ30であるNVMは、例えばMRAMで構成されてもよいし、PCM(Phase Change Memory)、3D XPoint、ReRAM(Resistive Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、Memristorなどで構成されてもよいし、以上に限られるわけではない。第2メモリ30として想定しているメモリは、アクセス速度が10ns〜数μs程度であり、かつ、データを保持するための電力が第1メモリ20よりも低いメモリであるが(典型的には不揮発メモリであるが、これに限らず揮発性メモリであってもよい)、例えばアクセス速度は、10ns〜数μsよりも速くてもよいし遅くてもよい。また、第2メモリ30はバイトアドレッサブルなメモリであってもよいし、それより大きい単位でデータの読み書き(アクセス)が行われるメモリであってもよい。
第2メモリ30(第2メモリ30の一部あるいは全部)はLinuxなどのプロセッサ10上で動作するOS(オペレーティングシステム)の仮想記憶方式のスワップ処理で利用されるスワップデバイス(スワップ領域が確保されるデバイス)として使われる。よって、アクセス(データの読み書き)が要求されたデータを示す対象データが第2メモリ30に存在する場合は、プロセッサ10上で動作するOSの仮想記憶方式のスワップ処理により第1メモリ20上のページ(スワップ処理の単位となるサイズのデータ)を第2メモリ30へ転送し、第2メモリ30上の対象データを含むページを第1メモリ20へ転送した後、第2メモリ30から転送された該ページに対する読み書きが行われる。なお、上記の第1メモリ20から第2メモリ30への転送と、第2メモリ30から第1メモリ20への転送の順番やタイミングは任意であってよい。例えば、第2メモリ30上の対象データを含むページが必要になった時にすぐに第1メモリ20へ転送できるように、その前の任意のタイミングで最近使用されてない第1メモリ20上の複数のページをまとめて第2メモリ30へ転送しておき第1メモリ20を空けておくように実装されても良い。これは、以降でも同じである。
以上の構成の情報処理装置1において、第2メモリ30(この例ではNVM)の高速性を活かしてOSやアプリケーションで使用可能な第1メモリ20のうち、少なくともデータの内容の保持に必要な第1電力が供給される領域を示す1以上の有効領域の数を動的に変化させる(第1メモリ20のうちデータの読み書きが可能な領域のサイズを動的に変化させる)。ここでは、第1メモリ20のうち有効領域以外の領域を「無効領域」と称し、無効領域に供給される第2電力は第1電力よりも低い(例えばパワーオフされてゼロであってもよい)。有効領域の数が減ると(有効なDRAMの容量が減ると)、少ない数の有効領域をワーキングエリアとしてアプリケーションを実行する必要があるため、スワップ処理の回数が増加する。スワップ処理の回数が増加すると、アプリケーションの性能は低下するが、第2メモリ30の高速性によりHDDやSSDをスワップデバイスとして利用する場合に比べて性能低下は緩やかになる。そのため、性能低下が許容される範囲まで積極的に有効領域の数を減らす(有効なDRAMの容量を減らす)ことで、セルフリフレッシュなどのデータの内容を保持するためなどに掛かる第1メモリ20の消費電力を削減して省電力化を図ることができる。
次に、図3などを用いて一例を説明する。前提として、プロセッサ10上で動作しているアプリケーションは、第1メモリ20のうち第1電力が供給される領域3(有効領域となる領域3)と、OSの仮想記憶が提供する第2メモリ30上のスワップ領域と、をワーキングエリアとして利用して動作している(図3の第1状態)。図3の例では、アプリケーションを動作させるために必要なメモリサイズは、領域3のサイズよりも大きい。言い換えれば、アプリケーション(第1処理)が処理するデータを示す第1データのサイズ(アプリケーションが処理する全てのデータの合計サイズ)は、領域3のサイズよりも大きい。そのため、アプリケーションの動作中に、読み書きが要求されたデータ(対象データ)が領域3に存在せずに第2メモリ30に存在する場合、領域3に含まれるページの中から、利用されてから所定値以上の時間が経過したページなどが選択され、その選択されたページが第2メモリ30へ追い出され、第2メモリ30のうち対象データを含むページが第1メモリ20へ転送されるスワップ処理が行われる。つまり、第1メモリ20の領域3と第2メモリ30との間でページの入れ替えが行われる。
なお、ここでは、説明の便宜上、第1メモリ20を3つの領域に分けているが、これに限られるものではなく、第1メモリ20は任意の数のDIMMやランクやバンクなどの領域(電源単位領域)から構成されている。同様に、ここでは、有効な(OSやアプリケーションから利用可能な)第1メモリ20の容量の初期値を第1メモリ20全体のサイズの1/3(言い換えれば、有効領域の数の初期値を第1メモリ20に含まれる電源単位領域の全体の数の1/3)としたが、初期値は任意であり、例えば最初に利用可能にする第1メモリ20のサイズ(有効領域の数)は第1メモリ20全体のサイズの1/10であってもよいし、アプリケーションを動作させるのに必要なサイズ(例えば確保するメモリサイズ)の1/10などであってもよい。
領域3に供給される電力(第1電力)は、メモリアクセスが可能な電力(少なくともデータの内容の保持に必要な電力)に設定されており、図3の第1状態において、第1メモリ20のうちOSやアプリケーションが利用可能な領域は領域3だけであり、領域1および領域2の各々に供給される電力は、第1電力よりも低い第2電力(典型的にはゼロ)に設定されている。領域1および領域2の各々は、OSやアプリケーションからは利用不可能な状態である。
また、前提として、OSには閾値(threshold)が設定されている。この閾値は、第2メモリ30をスワップデバイスに利用し、スワップ処理を積極的に行ってアプリケーションを実行した場合の実行時間の性能劣化の許容範囲の基準を示す値である。閾値は、例えば、情報処理装置1上で動作するアプリケーションが指定した値で、十分に大きいメモリサイズの第1メモリ20が存在し、第1メモリ20のみでアプリケーションを実行したと仮定した場合の実行時間に対して、それよりもサイズが小さい第1メモリ20とスワップ領域とをワーキングエリアとして利用してスワップ処理を行いながらアプリケーションを実行した場合の実行時間が劣化する許容範囲の基準を示す値である。つまり、閾値は、第1データを処理する第1処理を第1メモリ20のみで実行した場合の全体あるいは一部の実行時間を示す第1実行時間に対する、第1処理を第1メモリ20と第2メモリ30を利用して実行(要するにスワップ処理を行って実行)した場合の全体あるいは一部の実行時間を示す第2実行時間の劣化の度合いの許容範囲を示す基準値である。例えば、第1実行時間Tに対して、1割の性能劣化まで許可する場合は、閾値はT×0.1などと設定される。また、例えば、第1処理を実行中の一定期間Tに対して、1割の性能劣化まで許容する場合は、閾値はT×0.1などと設定される。この閾値は、情報処理装置1上で動作するアプリケーション毎に設定可能になっていてもよいし、すべてのアプリケーション(プロセス)で同じ値に設定可能になっていてもよい。また、この閾値は、アプリケーションにより指定可能になっていてもよいし、OSで予め決められた値を使用してもよいし、これに限定されるわけではない。
以下、有効領域の数を少なくして(有効な第1メモリ20のサイズを小さくして)低消費電力化を実現するための情報処理装置1の処理を説明する。図4は、情報処理装置1が有するソフトウェアの構成の一例を示す図であり、プロセッサ10が実行するソフトウェア(プログラム)として、アプリケーションとOSが存在する。OSとは、情報処理装置1が備えるハードウェア資源を制御する機能を提供するための基本プログラムである。例えばLinuxなどである。また、アプリケーションとは、OSを利用して、特定の機能を提供するためのプログラムであり、その種類は任意である。プロセッサ10(プロセッサコア101)が、OSやアプリケーションを実行することにより、各種の機能を実現することができる。ここでは、OSは、アプリケーションから、該アプリケーションが処理するデータ(処理対象のデータ)のアクセス要求(データの読み出し要求または書き込み要求)を受け付け、その受け付けたアクセス要求に応じた制御を行う。
図4に示すように、OSは、領域制御部110を有する。言い換えれば、領域制御部110の機能がOSにより提供される。上述したように、有効領域は、第1メモリ20のうち、少なくともデータの内容の保持に必要な第1電力が供給される領域である。領域制御部110は、1以上の有効領域より大きいサイズの第1データを処理するための期間内の一定期間において、第1メモリ20に記憶されたデータを示す第2データのうち少なくとも一部を第2メモリ30へ移動し、かつ第2メモリ30に記憶されたデータを示す第3データのうち少なくとも一部を第1メモリ20へ移動するための処理量を示す処理情報が閾値以下になるよう、有効領域の数を変化させる。なお、「第1データを処理するための期間」とは、第1データを処理中(アプリケーションが動作中)の期間であると考えてもよいし、第1データを処理するための契機が発生してから第1データの処理が完了するまでの期間であると考えてもよい。また、第1データを処理するための期間とは、第1データを処理する第1処理(プロセス)を実行するための期間であると考えてもよい。また、以下の説明では、第1メモリ20に記憶されたデータを示す第2データ(ページ単位のデータ)のうち少なくとも一部を第2メモリ30へ移動し、かつ第2メモリ30に記憶されたデータを示す第3データ(ページ単位のデータ)のうち少なくとも一部を第1メモリ20へ移動するための処理を「スワップ処理(移動処理)」と称する。この例では、スワップ処理は、第1データのうち読み書きが要求されたデータ(対象データ)が第2メモリ30に存在する場合に発生し、第1メモリ20に含まれるページのうち、利用されてから所定値以上の時間が経過したページや利用されてからの経過時間が他のページと比較して長いページなどが第2データとして第2メモリ30へ追い出され、第2メモリ30のうち対象データを含むページが第3データとして第1メモリ20へ転送される。
上記処理情報は、一定期間内に発生する1以上のスワップ処理(移動処理)に要する時間を示す情報であり、1回あたりのスワップ処理に要する時間(以下、「オーバヘッド」と称する場合がある)は、第1メモリ20と第2メモリ30との間でのデータ転送(第2データおよび第3データの各々の転送)に要する時間(以下、「データ転送時間」と称する場合がある)と、スワップ処理に関してOSが実行する処理に要する時間(以下、「OS処理時間」と称する場合がある)と、の合計である。OS処理時間とは、OSのコンテキストスイッチ処理や、I/Oコントローラ103のデバイスドライバの処理や、どのページを第2メモリ30へ転送するかなどを決定する処理や、OSのページテーブルでマッピングを参照または変更する操作など、データ転送時間以外のスワップ処理に要する時間の合計である。このOS処理時間に何が含まれるかは、実装次第で様々であり、例えばOSのコンテキスト処理が発生しないようにも実装できるので列挙したすべてが必ずしも含まれるわけではないのは言うまでもなく、ここでは一例を列挙しただけに過ぎず、これらのみに限定されるわけではない。ここでは、上記処理情報は、一定期間内に発生する1以上のスワップ処理ごとのオーバヘッドの合計を示すスワップ処理オーバヘッドで表される。この例では、領域制御部110は、上述の処理情報が閾値よりも大きい場合は、有効領域の数を増加させる制御を行う。
本実施形態では、図4に示すように、領域制御部110は、監視部111と、判定部112と、有効領域変更部113と、電力設定部114と、マッピング変更部115と、を有する。監視部111は、アプリケーションが動作中の一定期間において発生する第1メモリ20と第2メモリ30との間のスワップ処理を監視する。判定部112は、監視部111により監視された1以上のスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが閾値よりも大きいか否かを判定する。
有効領域変更部113は、判定部112によりスワップ処理オーバヘッドが閾値よりも大きいと判定された場合、有効領域の数を変更する。より具体的には、有効領域変更部113は、有効領域の数を「1」だけ増加させる制御を行う。この例では、有効領域変更部113は、電力設定部114に対して、第1メモリ20に含まれる複数の電源単位領域のうち第2電力が供給される電源単位領域を示す1以上の無効領域の何れかに供給する電力を、第2電力から第1電力に変更することを指示する。この指示を受けた電力設定部114は、何れかの無効領域に供給する電力を第2電力から第1電力に変更する。いま、図3に示す第1状態において、判定部112によりスワップ処理オーバヘッドが閾値よりも大きいと判定された場合を想定する。この場合、有効領域変更部113は、電力設定部114に対して、領域2に供給される電力を第2電力から第1電力へ変更することを指示する。この指示を受けた電力設定部114は、領域2に供給する電力を第2電力から第1電力に変更する(図3に示す第2状態)。これにより、有効領域の数は「1」だけ増加することになる。有効領域の数が増えることで(有効な第1メモリ20の容量が増えることで)、スワップ処理の発生頻度が減り、スワップ処理オーバヘッドも減る。なお、一度に増加する有効領域の数は「1」だけに限定されるわけではなく、任意の数であってもよい。
マッピング変更部115は、後述するように有効領域の数を減らす場合に、対象となる有効領域(無効領域に変化させる対象となる有効領域)にマッピングされたページを、他の有効領域または第2メモリ30に移動させ、さらにページの移動に合わせて、アプリケーションが指定する仮想アドレスと物理アドレス(メモリの位置を示す情報)との対応関係をページ単位で示すページテーブルを変更する。
ここで、図5を用いて、監視部111が監視するオーバヘッドについて説明する。上述したように、監視部111は、アプリケーションが動作中の一定期間において発生する1以上のスワップ処理を監視し、スワップ処理ごとのオーバヘッドを求める。図5に示すように、スワップ処理1回分のオーバヘッドは、データ転送時間とOS処理時間の合計である。
例えばデータ転送時間が10μsで、OS処理時間が100μsである場合、スワップ処理1回分のオーバヘッドは110μsとなる。データ転送時間やOS処理時間の値は、スワップ処理が発生するたびにOS(監視部111)が測定して合計値を求めてもよいし、計算で求めた近似値などを利用してもよい。計算に必要な値は予めOSに設定されていてもよい。例えば、OSのインストール時や起動時などアプリケーションを実行する前の任意のタイミングでスワップ処理に掛かるデータ転送時間とOS処理時間を一度事前に測定(予め測定)してもよい。そして、一定期間中のスワップ処理の回数のみを観測し、スワップ回数がNで、各スワップ処理のデータ転送時間が同じ(10μsとOSに設定されている)で、かつ、各スワップ処理のOS処理時間も同じ(100μsとOSに設定されている)であると仮定した場合は、一定期間中のスワップ処理オーバヘッドは、N×(100μs+10μs)などとして算出することもできる。
なお、閾値と上記処理情報の形態は上述した内容に限られない。閾値は、それ以上スワップ処理が増えるとアプリケーションやシステムの性能の低下が大きくなることを判断するための基準値であればよい。また、上記処理情報は、上記一定期間内に発生したスワップ処理の回数を示す情報であってもよい。この場合、スワップ処理の回数Nと、OSに予め設定されている閾値(この場合はスワップ処理の回数の上限値)との比較を行う。また例えば、上記処理情報は、上記一定期間中に発生するデータ転送量(一定期間におけるデータ転送量の累積値)であってもよい。その場合には、観測されるデータ転送量と、OSに予め設定されている閾値(データ転送量の上限値)との比較を行う。また、スワップ処理オーバヘッドやスワップ処理の回数やデータ転送量などは、一つのアプリケーションを対象に観測したものでもよいし、システム全体(同時にプロセッサ上で動作する複数のアプリケーションやプロセスの区別をしない)を対象に観測したものでもよい。アプリケーションに依ってもワーキングセットのサイズやアクセス量によって上記処理情報は異なるので、アプリケーションに応じて第1メモリ20の有効領域の数を変化させる。つまり第1アプリケーションを実行させている時と第2アプリケーションを実行させている時では第1メモリ20の有効領域の数(つまりは無効領域の数)が変化することが観測でき、さらにその時の実行時間の低下は所定値以下に抑えられている。データセンターなどでは常にワークロード(実行中のアプリケーションの数や組み合わせ)が変動するので、ワークロードに対応して第1メモリ20の有効領域の数を変化させることが重要である。要するに、上記処理情報は、スワップ処理(移動処理)の処理量を示す情報であればよい。
閾値は、それ以上スワップ処理が増えるとアプリケーションやシステムの性能の低下が大きくなることを判断するための基準値であればよく、システムの性能は消費電力も含まれるのは言うまでもない。第1メモリ20の有効領域を減らしてパワーオフすると第1メモリ20の待機電力を減らせる一方で、スワップ処理(移動処理)の処理量は増えるのでそれに伴い第1メモリ20へのアクセスに掛かる電力量と、第2メモリ30へのアクセスに掛かる電力量は増える。つまり、第1メモリ20の有効領域を1つずつ減らしていく場合は、第1メモリ20の有効領域を1つ減らしてパワーオフして削減できる電力と、それに伴って増えるメモリアクセスの電力とのトレードオフになる。よって、閾値は、一定期間中に発生する、第1メモリ20の有効領域を1つ減らして第1電力から第2電力(パワーオフ時の電力)にすることで削減できる電力量であってもよい。上記処理情報は、有効領域を1つ減らすことにより一定期間中に増加するスワップ処理(移動処理)で発生する第1メモリ20へのアクセスに掛かる電力量と、第2メモリ30へのアクセスに掛かる電力量の合計である。これらを比較し、閾値以下の場合(つまり第1メモリ20の有効領域を1つ減らしてスワップ処理を増加させた方が電力を削減できる場合)は、第1メモリ20の有効領域を1つ減らす。すなわち、上記閾値は、一定期間中において、何れか1つの有効領域に供給する電力を、第1電力から、第1電力よりも低い第2電力に変更して有効領域の数を1つ減らした場合に削減される電力量を表し、上記処理情報は、有効領域の数を1つ減らした場合に一定期間中に増加する処理量(スワップ処理の処理量)に伴って発生する電力量であってもよい。領域制御部110は、上記処理情報が上記閾値以下になる範囲で、何れか1つの有効領域に供給する電力を第1電力から第2電力に変更する制御(有効領域の数を1つ減らす制御)を繰り返し実行することができる。なお、上記処理情報である、有効領域を1つ減らした場合に一定期間中に増加するスワップ処理(移動処理)に伴って発生する電力量は、同電力量を減らすように後述する第2メモリ30に対して直接読み書きを行う処理を第1メモリ20へ転送して読み書きを行う処理に混在させた際のものであってもよい。
なお、例えば2つの閾値を同時に使用する形態であってもよい。例えば、第2閾値はこれまで説明してきた、一定期間中に許容するスワップ処理のオーバヘッド(時間)で、第3閾値を、第1メモリ20の有効領域を1つ減らして第1電力から第2電力(パワーオフ時の電力)にすることで削減できる電力量とする。そして、第1メモリ20の有効領域を1つ減らした時の、第2閾値に関わる第2処理情報が第2閾値以下(つまり速度性能の低下が許容範囲内)で、かつ、第3閾値に関わる第3処理情報が第3閾値以下になるような場合に(つまり増加するスワップ処理による消費電力の増加より、パワーオフすることにより削減できる消費電力の方が大きい場合に)、第1メモリ20の有効領域を1つ減らすこともできる。つまり、第2処理情報は、一定期間中に発生する移動処理に要する時間(オーバヘッド)を表し、第3処理情報は、有効領域の数を1つ減らした場合に一定期間中に増加する処理量(スワップ処理の処理量)に伴って発生(増加)する電力量を表し、領域制御部110は、第2処理情報が第2閾値以下で、かつ、第3処理情報が第3閾値以下になる範囲で、何れか1つの有効領域に供給する電力を第1電力から第2電力へ変更する制御(有効領域の数を1つ減らす制御)を繰り返し実行することもできる。なお、一度に減らす有効領域の数は1だけに限定されるわけでなく、任意の数であってよい。
図6は、情報処理装置1の動作例を示すフローチャートである。各ステップの具体的な内容は上述したとおりである。
図6に示すように、まず領域制御部110(監視部111)は、上述のスワップ処理オーバヘッドを算出する(ステップS401)。次に、領域制御部110(判定部112)は、ステップS401で算出したスワップ処理オーバヘッドと閾値とを比較する(ステップS402)。スワップ処理オーバヘッドが閾値よりも大きい場合(ステップS403:No)、領域制御部110(有効領域変更部113、電力設定部114)は、有効領域の数を増加させる制御を行い(ステップS404)、ステップS401以降の処理を繰り返す。一方、スワップ処理オーバヘッドが閾値以下の場合(ステップS403:Yes)、処理は終了する。
以上は、第1メモリ20の有効領域の数の初期値(有効な第1メモリ20の容量の初期値)を、アプリケーションを動作させるために必要な数(例えばアプリケーションがアロケートするメモリサイズに相当する数)より小さい値に設定し、スワップ処理オーバヘッドが閾値を超えてしまう場合に、有効領域の数を動的に増加させていくことを想定していたが、この逆でもよい。具体的には、有効領域の数を動的に小さくしていく(例えば図3の第2状態から第1状態へ変化させていく)。つまり、アプリケーションの性能低下が許容される範囲内で有効領域の数を減らしていくことで、アプリケーションの性能を維持しつつ省電力化を図ることもできる。
つまり、領域制御部110は、上述の処理情報が上述の閾値以下となる範囲で有効領域の数を減らす制御を行うこともできる。より具体的には、領域制御部110は、上述の処理情報が、上述の閾値よりも小さい第4閾値以下の場合、有効領域の数を減らす制御を行う。上述の第4閾値は、上述のスワップ処理オーバヘッドが上述の閾値よりも十分小さいことを判断するための基準値である。ここで、十分小さいとは、例えばスワップ処理オーバヘッドの値が閾値の1/2以下などの場合などであってもよい。
別の言い方をすると、スワップ処理オーバヘッドが上述の閾値以下となる範囲で、スワップ処理を積極的に増やす(第1メモリ20上のページを積極的に第2メモリ30へ追い出す)ことで、第1処理を実行するために必要な第1メモリ20上の有効領域の数を減らし、パワーオフなどの有効領域の数を減らす制御を行う。積極的に第2メモリ30へページを追い出すとは、「第1メモリ20に含まれるページのうち、利用されてから所定値以上の時間が経過されたページを第2データとして第2メモリ30へ追い出す場合はその所定値を短く設定すること」、あるいは、「第1メモリ20に含まれるページのうち、利用されてからの経過時間が他のページと比較して長いページを第2データとして第2メモリ30へ追い出す場合は追い出すページの数を増やすこと」、あるいは、「第1メモリ20に含まれるページのうち、第2データとして第2メモリ30へ一定間隔で決まった数のページを追い出す場合にはその間隔を小さくすること」あるいは、「第1メモリ20に含まれるページのうち、所定の数のページ以外は第2データとして第2メモリ30へ追い出す場合にはその数(残すページの数)を減らすこと」などのことである。このように積極的に第2メモリ30へページを追い出すことで、必要な第1メモリ20上の有効領域を減らすことができる。そして、このように積極的にスワップ処理回数を増やしても、NVMは高速なので性能低下は小さく抑えられる。要するに、領域制御部110は、スワップ処理オーバヘッド(処理情報)が上記閾値以下となる範囲で上記処理量(スワップ処理の処理量)を増やすことで、第1データを処理するために必要な(第1処理を行うために必要な)有効領域の数を減らし、不要な有効領域に供給する電力を、第1電力から、第1電力よりも低い第2電力に変更(つまり無効領域に変更)する制御を行うことができる。
ここでは、前提として、プロセッサ10上で動作しているアプリケーションは、第1メモリ20のうち第1電力が供給される領域2および領域3と、OSの仮想記憶が提供する第2メモリ30上のスワップ領域と、をワーキングメモリとして利用して動作している(図3の第2状態)。アプリケーションを動作させるために必要なメモリサイズは、領域2と領域3の合計サイズよりも大きい。そのため、OSは、第1メモリ20の領域2および領域3と、第2メモリ30との間で必要なデータを入れ替えるスワップ処理を行いながらアプリケーションを実行する。この例では、領域2および領域3の各々に供給される電力(第1電力)は、少なくとも記憶したデータの内容の保持に必要な電力(あるいはメモリアクセスが可能な電力)に設定されており、図3の第2状態において、第1メモリ20のうちOSが利用可能な領域は領域2および領域3であり、領域1に供給される電力は、第1電力よりも低い第2電力(典型的にはゼロ)に設定されている(例えばパワーオフされている)。領域1は、OSやアプリケーションからは利用不可能な状態である(無効領域である)。
図7は、この場合の情報処理装置1の動作例を示すフローチャートである。ステップS601の処理内容は、図6のステップS401の処理内容と同様である。ステップS601の後、領域制御部110(判定部112)は、ステップS601で算出したスワップ処理オーバヘッドと上述の第4閾値とを比較する(ステップS602)。スワップ処理オーバヘッドが第4閾値以下の場合(ステップS603:Yes)、領域制御部110(有効領域変更部113、電力設定部114)は、有効領域の数を減らす制御を行う(ステップS604)。例えば有効領域変更部113は、電力設定部114に対して、領域2に供給される電力を第1電力から第2電力へ変更することを指示する。この指示を受けた電力設定部114は、領域2に供給する電力を第1電力から第2電力に変更する(図3に示す第1状態)。これにより、有効領域の数は「1」だけ減少することになる。また、このとき、領域制御部110は、無効領域に変更する有効領域に記憶されたデータを第2メモリ30へ移動する制御も行う。このようにして、有効領域の数が減ることで(有効な第1メモリ20の容量が減ることで)、スワップ処理の発生頻度が増加し、スワップ処理オーバヘッドも増加することになる。そして、ステップS601以降の処理が繰り返される。要するに、領域制御部110は、上述の処理情報が上述の閾値よりも小さい第4閾値以下の場合、何れか1つの有効領域に供給する電力を、第1電力から第1電力よりも小さい第2電力に変更して有効領域の数を減らし、該有効領域に記憶されたデータを第2メモリ30へ移動する制御を行うこともできる。
一方、スワップ処理オーバヘッドが第4閾値よりも大きい場合(ステップS603:No)、処理は、ステップS605に移行する。ステップS605およびステップS606の処理内容は、図6に示すステップS403およびステップS404の処理内容と同様であるので、詳細な説明は省略する。
なお、第1処理(アプリケーション)のメモリアクセス特性によって、適した有効な第1メモリ20の容量は異なる。アプリケーションのメモリアクセス頻度が高い場合(そのようなアプリケーションを第2処理とする)は、有効領域の数を減らしすぎるとスワップ処理の発生頻度が増加しすぎる。一方で、アプリケーションのメモリアクセス頻度が低い場合(そのようなアプリケーションを第3処理とする)は、有効領域の数をより積極的に減らしてもスワップ処理の発生頻度は極端に増加しない。即ち、アプリケーションを実行するための期間内の一定期間において発生するスワップ処理の処理量を示すスワップ処理オーバヘッドが閾値以下になるよう、有効領域の数を変化させる制御を行うことで、第2処理と第3処理では、有効領域の数は異なる。また、第1処理(1つのアプリケーション)の中で、第2処理(メモリアクセス頻度が高い)と第3処理(メモリアクセス頻度が低い)が混在する場合は、第1処理(1つのアプリケーション)の実行中に、有効領域の数が変化する。
以上に説明したように、本実施形態では、上述の1以上の有効領域より大きいサイズの第1データを処理するための期間内の一定期間において、上記スワップ処理の処理量を示すスワップ処理オーバヘッドが閾値以下になるよう、有効領域の数を変化させる制御を行う。これにより、プロセッサ10上で動作するアプリケーションの速度性能を担保しつつ省電力化を図ることができる。
(第1実施形態の変形例)
例えばOSの仮想記憶を使わない形態であってもよい。例えば図8に示すように、第1データを処理する第1処理を実行する外部装置40による第1データの読み書きに用いられる第1メモリ20と、外部装置40が直接データの読み書きを行うことができず、かつ、第1データの一部を記憶する第2メモリ30と、第1メモリ20と第2メモリ30との間でデータ(この例ではページ単位のデータ)を移動させるコントローラ50と、を備える記憶装置(メモリモジュール)が設けられる形態であってもよい。なお、データの移動のためにデータ転送専用ハードウェア(DMAコントローラ)を設けておくのが望ましい。
図8の例では、上述のOSにより提供される機能(領域制御部110等の機能)は、ハードウェア要素であるコントローラ50により実現される。つまり、この例では、コントローラ50は、上述の1以上の有効領域より大きいサイズの第1データを処理するための期間内の一定期間において、上記スワップ処理の処理量を示す処理情報が閾値以下になるよう、有効領域の数を変化させる。コントローラ50は、上述の処理情報が上述の閾値よりも大きい場合は、有効領域の数を増加させる制御を行うこともできる。また、コントローラ50は、上述の処理情報が上述の閾値以下となる範囲で有効領域の数を減らす制御を行うこともできる。より具体的には、領域制御部110は、上述の処理情報が、上述の第4閾値以下の場合、有効領域の数を減らす制御を行うこともできる。
(第2の実施形態)
次に、第2の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。図9は、本実施形態の情報処理装置1のハードウェア構成の一例を示す図である。図9に示すように、情報処理装置1は、データの読み書きの速度を示すアクセス速度が第2メモリ30よりも低い第3メモリ60をさらに備える。この例では、第3メモリ60は、NVMで構成されるが、これに限らず、例えばSSDやHDDなどで構成されてもよい。第2メモリ30と第3メモリ60の組み合わせは任意に変更可能である。また、プロセッサ10は、第2メモリコントローラ104(この例ではNVMコントローラ)を内包しており、これを介して第2メモリ30が接続(メモリバス接続)されている。さらに、プロセッサ10は、第3メモリコントローラ105(この例ではNVMコントローラ)を内包しており、これを介して第3メモリ60が接続(メモリバス接続)されている。SSDやHDDはI/Oコントローラで接続されていてもよく、プロセッサ10との接続方法は任意である。
ここで、第2メモリ30の代わりに第3メモリ60をスワップデバイスとして利用してアプリケーションを動作させても要求性能を満たす(スワップ処理オーバヘッドが閾値以下になる)場合がある。スワップ処理の回数が比較的少ない場合などである。例えば、アプリケーションのメモリアクセス頻度が少ないような場合である。このような場合、第3メモリ60をスワップデバイスとしてこのアプリケーション(第1アプリケーション)を動作させることで、その分だけ有効な第2メモリ30の容量を空けて別のアプリケーション(第2アプリケーション)に利用させることができる。第2アプリケーションのみで第2メモリ30をスワップデバイスとして利用できれば、第2メモリ30のメモリバンド幅を第2アプリケーションのみで使えることになるので、データ転送時間を小さくできる。データ転送時間が小さくできれば、さらにスワップ処理の回数が増えても要求性能は満たせるので、第1メモリ20のサイズ(有効領域の数)をさらに小さくでき、より第1メモリ20の消費電力を減らして省電力化することができる。
図10は、本実施形態の情報処理装置1が有するソフトウェアの構成の一例を示す図である。図10に示すように、OSは、算出部120と切替制御部130とをさらに有する。
算出部120は、監視部111により監視された上述のスワップ処理オーバヘッドを元に、上述のスワップ処理を、上述の第2データを第1メモリ20から第3メモリ60へ移動し、上述の第3データを第3メモリ60から第1メモリ20へ移動するための第2スワップ処理(第2移動処理)に置き換えた場合の処理量を示す第2スワップ処理オーバヘッド(第4処理情報)を算出する。
切替制御部130は、算出部120により算出された第2スワップ処理オーバヘッドが上述の閾値以下の場合、対応する処理(アプリケーション)を、第1メモリ20と第3メモリ60とをワーキングエリアとして使用する処理に切り替える制御を行う。
なお、この例では、算出部120および切替制御部130は、領域制御部110とは別に設けられているが、これに限らず、例えば領域制御部110が、算出部120および切替制御部130のうちの少なくとも一方を有する形態であってもよい。
図11を用いて、より詳細な内容を説明する。図11では、第1メモリ20は、4つの領域(領域1〜領域4)に分けられていて、第1アプリケーション(図11では「第1App」と表記)と第2アプリケーション(図11では「第2App」と表記)がプロセッサ10上で動作している。第1アプリケーションは、第1メモリ20の領域1と、第2メモリ30上のスワップ領域とを利用して動作しており、領域1より大きなメモリサイズが要求されるアプリケーションである。また、第2アプリケーションは、第1メモリ20の領域2および領域3と、第2メモリ30上のスワップ領域とを利用して動作しており、領域2と領域3の合計より大きなメモリサイズが要求されるアプリケーションである。図11の第1状態において、第1メモリ20のうちOSやアプリケーションが利用可能な領域は領域1〜領域3であり、領域4に供給される電力は、第1電力よりも低い第2電力(典型的にはゼロ)に設定されている。領域4は、OSやアプリケーションからは利用不可能な状態である。
ここで、OSは、第1アプリケーションが第2メモリ30の代わりに第3メモリ60をスワップデバイスとして利用しても要求性能を満たすか否か(スワップ処理オーバヘッドが閾値以下になるか否か)を判定する。判定は、第1アプリケーションを、第1メモリ20の領域1と第2メモリ30を利用して動作させて、一定期間に発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドを監視し、それを基に、第1アプリケーションを、第1メモリ20の領域1と第3メモリ60を利用して動作させた場合の性能を見積もり、要求性能を引き続き満たすかを判定する。
図12を用いて詳細を説明する。まず、OSは、第1アプリケーションを、第1メモリ20の領域1と第2メモリ30を利用して動作させて、一定期間に発生するスワップ処理を監視し、上述のスワップ処理オーバヘッド(第1スワップ処理オーバヘッドと称する)を算出する。その結果、図12に示すように、第1スワップ処理オーバヘッドが閾値よりも小さい場合、OS(算出部120)は、この第1スワップ処理オーバヘッドを元に上述の第2スワップ処理オーバヘッドを算出する。
ここで、第1アプリケーションの処理に用いるスワップデバイスを、第2メモリ30から第3メモリ60へ変更することに伴い、データ転送時間が変化(アクセス速度が異なるため)したとしても、OS処理時間は大きく変化しないので(あるいはそう仮定して)、各スワップ処理に対応するデータ転送時間のみを、第2メモリ30のアクセス速度に応じたデータ転送時間の値から第3メモリ60のアクセス速度に応じたデータ転送時間の値に置き換えることで、第2スワップ処理オーバヘッドを算出することができる。第3メモリ60を利用した場合のデータ転送時間は、OSのインストール時などに測定され、OSが参照できる形式で保存されているのでこれを計算に利用することができる。そして、OS(切替制御部130)は、第2スワップ処理オーバヘッドを上述の閾値と比較する。図12に示すように、第2スワップ処理オーバヘッドが上述の閾値以下の場合は、OS(切替制御部130)は、第1アプリケーションに対応する処理を、第1メモリ20と第3メモリ60を利用した処理に切り替える(スワップデバイスを第2メモリ30から第3メモリ60へ変更する)。
第1アプリケーションのスワップデバイスが第3メモリ60に変更されると、図11の第2状態に示すように、第1アプリケーションは第1メモリ20の領域1と第3メモリ60を利用して動作するようになる。これにより、第2メモリ30のメモリバンド幅を第2アプリケーションのみで使える(第2メモリ30を独占して使える)ことになるので、第2アプリケーションの動作中に発生するスワップ処理におけるデータ転送時間をより小さくできる。
このように、第1アプリケーションのスワップ領域を変更することで、図13に示すように、第2アプリケーションのスワップ処理オーバヘッドは、第1アプリケーションのスワップデバイスが第2メモリ30の場合のスワップ処理オーバヘッドを示す第3スワップ処理オーバヘッドから、第1アプリケーションのスワップデバイスを第3メモリ60へ変更した場合のスワップ処理オーバヘッドを示す第4スワップ処理オーバヘッドになる。第4スワップ処理オーバヘッドは第3スワップ処理オーバヘッドと比較すると、スワップ処理の回数も変わらず(あるいは大きく変化せず)、OS処理時間は変わらない(あるいは大きく変化しない)が、第2メモリ30のメモリバンド幅を第2アプリケーションのみで使えるようになったためにデータ転送時間が小さくなっている。このように、スワップ処理オーバヘッドが小さくなったので、第2アプリケーションが利用可能な第1メモリ20の有効領域の数を上述の方法などでさらに小さくできる可能性がある。例えば有効領域の数を減らした結果(有効な第1メモリ20の容量を小さくした結果)、スワップ処理の回数が増加して、第2アプリケーションのスワップ処理オーバヘッドが、第4スワップ処理オーバヘッドよりも大きい第5スワップ処理オーバヘッドになっても、この第5スワップ処理オーバヘッドが上述の閾値以下であれば速度性能は担保できる。したがって、速度性能を担保しつつ消費電力をさらに削減することができる。
図14は、本実施形態の情報処理装置1の動作例を示すフローチャートである。この例では、OSは、第1アプリケーションを、第1メモリ20の領域1と第2メモリ30を利用して動作させていることを前提とする。各ステップの具体的な内容は上述したとおりである。
図14に示すように、まずOS(監視部111)は、上述の第1スワップ処理オーバヘッドを算出する(ステップS1001)。次に、OS(算出部120)は、ステップS1001で算出した第1スワップ処理オーバヘッドを元に、上述の第2スワップ処理オーバヘッドを算出する(ステップS1002)。次に、OS(切替制御部130)は、ステップS1002で算出した第2スワップ処理オーバヘッドが上述の閾値以下であるか否かを判定する(ステップS1003)。第2スワップ処理オーバヘッドが上述の閾値以下の場合(ステップS1003:Yes)、OS(切替制御部130)は、第1アプリケーションのスワップデバイスを第3メモリ60に切り替える(ステップS1004)。一方、第2スワップ処理オーバヘッドが上述の閾値よりも大きい場合(ステップS1003:No)、そのまま処理は終了する。
(第3の実施形態)
次に、第3の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。上述の第1の実施形態と同様に、領域制御部110は、上述のスワップ処理オーバヘッドが上述の第4閾値以下の場合、有効領域の数を減らす制御を行う。より具体的には、領域制御部110は、上述のスワップ処理オーバヘッドが上述の第4閾値以下の場合、何れかの有効領域に供給される電力を、第1電力よりも低い第2電力とすることで、該有効領域を、第2電力が供給される領域を示す無効領域へ変化させる制御を行う。ここでは、有効領域から無効領域へ変化させる順番は予め定められている。
本実施形態では、図15に示すように、第1メモリ20は、第1DIMM(Dual Inline Memory Module)〜第4DIMMの4つのDIMM(電力の供給単位となる領域(電源単位領域))で構成されている。なお、電力の供給単位はDIMMには限られず、ランクやバンクなどの第1メモリ20(この例ではDRAM)を構成する要素単位であって、かつ電力制御が可能な任意の単位であればよいが、ここでは、電力の供給単位はDIMMである場合を例に挙げて説明する。
DIMM単位(メモリモジュール単位)で電力の供給を停止して(パワーオフして)、有効領域の数を小さくしていく(有効な第1メモリ20の容量を小さくしていく)場合に、効率よくDIMMをパワーオフできるように、DIMMをパワーオフする順番を予め決めておき、スワップ領域に移動させたくないデータを適切に配置しておくことで、高速化および省電力化を実現できる。つまり、例えば、パワーオフの直後に使うデータや頻繁にアクセスするデータ(つまり、スワップ領域に移動させたくないデータ)が配置されているDIMMがパワーオフされると、DIMMに配置(マッピング)されたデータは一度スワップ領域に転送され(マッピングを変更され)、その後ですぐにパワーオフされていない別のDIMMに戻される(転送される)分だけ時間も電力も無駄になるので、スワップ領域に移動させたくないデータを、パワーオフの順番が遅い(より好適には最も遅い)DIMMに配置することにより、上記のような無駄が発生することを抑制できる。
図15に示す第1メモリ20を例に挙げて説明する。この第1メモリ20を使う際に、省電力化のためにDIMMを決まった順番でパワーオフする。具体的には、第1DIMM、第2DIMM、第3DIMMの順番にパワーオフしていく。情報処理装置1が動作し続けるためのDIMMは必要であるため、第4DIMMはパワーオフされないDIMMである。言い換えれば、この第1メモリ20(DRAM)は、少なくとも第1の領域と第2の領域と第3の領域とから構成され、OS(領域制御部110)は、第1の領域(DIMM)、第2の領域(DIMM)、および、第3の領域(DIMM)の各々に供給される電力が上述の第1電力(OSやアプリケーションが使用可能となる電力で、少なくともデータの内容を保持可能な電力)であり、かつ、プロセッサ10が、第1の領域、第2の領域および第3の領域の合計サイズよりも大きい第1データを処理する第1処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の第4閾値以下の場合、第1の領域に記憶されたデータを第2の領域あるいは第3の領域あるいは第2メモリ30へ移して、第1の領域に供給される電力を第1電力より低いパワーオフ時などの電力である第2電力にする制御と、第2の領域に記憶されたデータを第3の領域あるいは第2メモリ30へ移して、第2の領域に供給される電力を第2電力にする制御と、を予め決められた順番で行う。
また、別の言い方をすれば、第1メモリ20は、少なくとも第1の領域と第2の領域とから構成され、第1の領域および第2の領域の各々に供給される電力が上述の第1電力であり、かつ、プロセッサ10が、第1の領域および第2の領域の合計サイズよりも大きい第1データを処理する第1処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の第4閾値以下の場合に、先に無効領域にするための制御を行う領域は第1の領域と決まっている。
また、スワップ領域へ移動させたくないデータを、パワーオフされる順番がより遅い(パワーオフされる可能性が低い)DIMMに配置し、スワップ領域に移動させてもよいデータを、パワーオフされる順番がより早いDIMMに配置するためには、アプリケーションあるいはOSが処理するデータが記憶される領域(それぞれに任意のサイズのデータが格納される複数のメモリ領域の集合であると考えてもよい)を確保する際に確保するメモリ領域の優先度を指定する。言い換えれば、第1メモリ20は、少なくとも第1の領域と第2の領域とから構成され、第1の領域および第2の領域の各々に供給される電力が上述の第1電力であり、かつ、第1の領域および第2の領域の合計サイズよりも大きい第1データを処理する第1処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の第4閾値以下の場合に、先に無効領域にするための制御を行う領域は第1の領域と決まっている場合は、第1データのうち第2の領域に優先的に配置されるデータは予め指定されていてもよい(例えばアプリケーションが指定することができる)。具体的には、第1データに含まれるデータが格納されるメモリ領域を割り当てる(アロケートする)関数の引数に優先度を数値等で設定する方法などがある。その結果、例えば、優先度を高く指定したデータを、パワーオフされる順番が遅い第4DIMMに配置し(図15参照)、それよりも優先度を低く指定したデータは第4DIMMよりも早い順番でパワーオフされる第1DIMMなどに配置されるようにする。
また、優先度を高く指定したにも関わらずDIMMの空き状況で第1DIMMなどのパワーオフされやすいDIMMに配置されてしまった場合でも、スワップ領域へ移動されて次にDIMMに割り当てられる(マッピングされる)際、あるいは別の任意のタイミングで、すぐにはパワーオフされないDIMMに再配置(再度マッピング)してもよい。別の方法としては、メモリ領域を確保する際に利用するDIMMを直接指定する方法もある。具体的には、メモリ領域をアロケートする関数の引数に特定のDIMMを表す値等(例えば第4DIMMなら「4」などの値)を指定する方法である。例えば、スワップ領域に移動させたくないデータを格納するメモリ領域を確保する際に利用するDIMMとして、第4DIMMを直接指定することもできる。つまり、OS(見方を変えれば情報処理装置1)は、アプリケーションが、スワップ領域へ移動させたくないデータを指定するためのインタフェース部(API)を有しており、OSは、このインタフェース部を介して指定されたデータを優先的にパワーオフされないDIMMにマッピングする。
また、アプリケーションが、データのアクセス特性をヒント情報としてOS(領域制御部110)に通知してもよい。例えば、データが繰り返しよく使われるデータなのか、一度しか使わないデータなのかを通知する。OSは、アプリケーションから通知されたヒント情報を参照して、繰り返しよく使われるデータであればパワーオフされる順番が遅いDIMMに配置するようにし、一度しか使われないデータであればパワーオフされる順番が早いDIMMに配置することができる。つまり、OS(見方を変えれば情報処理装置1)は、アプリケーションが、処理するデータの利用頻度(処理を実行するための期間よりも短い一定期間において利用される回数等であると考えてもよい)などのアクセス特性を指定するためのインタフェース部(API)を有しており、OSは、このインタフェース部を介して指定されたアクセス特性に応じて、予め決められた順番でパワーオフされる複数のDIMMのうちの何れかに、対応するデータが記憶されるメモリ領域を割り当てる(マッピングする)。例えば利用頻度が高いことを示すアクセス特性が指定された場合は、対応するデータが記憶されるメモリ領域を、遅い順番でパワーオフされるDIMMへ優先的にマッピングし、利用頻度が低いことを示すアクセス特性が指定された場合は、対応するデータが記憶されるメモリ領域を、早い順番でパワーオフされるDIMMへ優先的にマッピングする。
また、決められた順番でDIMMをパワーオフする際に、パワーオフするDIMMに記憶されたデータをパワーオフする前に移動させる必要があるが、その移動先を、DIMMをパワーオフする順番に応じて変えてもよい。例えば図16に示すように、第1メモリ20が、第1DIMMと第2DIMMと第3DIMMと第4DIMMとから構成され、パワーオフの順番としては、第1DIMM→第2DIMM→第3DIMM→第4DIMMのように昇順にパワーオフしていく場合を想定する。
この場合、OSは、基準となる第2DIMMをパワーオフする場合、第2DIMMをパワーオフする前に、第2DIMMに記憶されたデータを第2メモリ30に移動させる。同様に、OSは、第2DIMMよりも先にパワーオフされることが決まっている第1DIMMをパワーオフする場合、第1DIMMをパワーオフする前に、第1DIMMに記憶されたデータを第2メモリ30に移動させる。一方、基準となる第2DIMMより遅い順番でパワーオフされるDIMMをパワーオフする場合、該DIMMをパワーオフする前に、該DIMMに記憶されたデータを、該DIMMよりも遅い順番でパワーオフされる別のDIMMに移動させる(可能な限り移動させる)。具体的には、第3DIMMをパワーオフする場合、第3DIMMをパワーオフする前に、第3DIMMに記憶されたデータを、第3DIMMよりも遅い順番でパワーオフされる第4DIMMへ移動させる。
要するに、第1メモリ20(DRAM)は、少なくとも第1の領域と第2の領域と第3の領域と第4の領域とから構成され、OS(領域制御部110)は、プロセッサ10が、第1の領域、第2の領域、第3の領域および第4の領域の合計サイズよりも大きい第1データを処理する第1処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の閾値以下となる範囲で、第1の領域、第2の領域、第3の領域および第4の領域のうちの何れかを、予め決められた順番で有効領域から無効領域に変更する制御(供給する電力を第1電力から第2電力に変更する制御)を行う。
また、OS(領域制御部110)は、基準となる第2の領域よりも早い順番で無効領域に変更する第1の領域を有効領域から無効領域に変更する場合は、第1の領域に記憶されたデータを第2メモリ30に移動させてから、第1の領域に供給する電力を第2電力に変更し、第2の領域を有効領域から無効領域に変更する場合は、第2の領域に記憶されたデータを第2メモリ30に移動させてから、第2の領域に供給する電力を第2電力に変更する。また、第2の領域よりも遅い順番で無効領域に変更する第3の領域を無効領域に変更する場合は、第3の領域に記憶されたデータを、第3の領域よりも遅い順番で無効領域に変更する第4の領域に移動させてから、第3の領域に供給する電力を第2電力に変更する。このように、より重要なデータ(スワップ領域に移動させたくないデータ)は可能な限りDIMM(第1メモリ20)に残しておくことで、スワップ領域へ移動されることによる性能低下と消費電力の増加を抑制することができる。なお、第3DIMMから第4DIMMへ移動するデータは、第3DIMMに記憶されたデータの一部でもよいし全部でもよい。一部の場合は、残りのデータは第2メモリ30へ移動される。
また、アプリケーションやOSから、有効領域から無効領域に変更する順番を、部分的あるいは全面的に無視するように指定することも可能である。例えば、指定されたデータ(あるいはアドレス)を含むDIMMを無効領域に変更しない(パワーオフしない)ように指定され、該指定されたデータが第1DIMMに存在する場合に、本来は決まった順番に従って第1DIMMをパワーオフするところを、第1DIMMをパワーオフせずに第2DIMMからパワーオフするように制御することもできる。この制御は、アプリケーションの動作中に一時的に行うようにすることも可能である。
また、DIMMのパワーオフを決まった順番で行う方法とは別の方法として、パワーオフするDIMMをLRUなどのアルゴリズムを用いて選択する方法がある。例えば、LRU(Least Recently Used)でスワップ領域へ移動する候補として近々選択されるページが最も多く配置されているDIMMを選択する方法でもよい。OSは、DIMMを決まった順番でパワーオフする方法と、LRUなどの任意のアルゴリズムを用いてパワーオフするDIMMを選択する方法とを、切り替える手段(API)を提供してもよい。アプリケーションは、この手段(API)を用いて、パワーオフするDIMMを選択することが可能である。また、複数のDIMMのうち、一部のDIMMはLRUなどの任意のアルゴリズムを用いた方法でパワーオフし、その他のDIMMについては予め決められた順番でパワーオフしてもよい。
言い換えれば、第1メモリ20は、少なくとも第1の領域と第2の領域と第3の領域とから構成され、OS(領域制御部110)は、プロセッサ10が、第1の領域、第2の領域および第3の領域の合計サイズよりも大きい第1データを処理する第1処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の閾値以下となる範囲で、第1の領域または第2の領域を、所定のアルゴリズム(例えばLRU)に従った順番で有効領域から無効領域に変更する制御を行い、第3の領域を無効領域に変更する制御は行わない形態であってもよい。
(第4の実施形態)
次に、第4の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。本実施形態では、図17に示すように、OSは、周波数制御部140をさらに有する。周波数制御部140は、上述のスワップ処理オーバヘッドが上述の閾値以下となる範囲で、第1メモリ20を動作させるためのクロック周波数(DIMMのクロック周波数)を変化させる制御を行う。なお、この例では、領域制御部110が周波数制御部140の機能を有する形態であるが、これに限らず、例えば周波数制御部140は領域制御部110とは別に設けられる形態であってもよい。
具体的には、上述のスワップ処理オーバヘッドが上述の閾値よりも小さい場合は、上述の閾値以下となる範囲でDIMMのクロック周波数を下げて、要求性能(要求されるアプリケーションの速度性能)を満たしつつ省電力化を図ることができる。また、上述のスワップ処理オーバヘッドが上述の閾値を少し超えているものの、DIMMのクロック周波数の調整により、上述のスワップ処理オーバヘッドを上述の閾値以下に収めることができる場合は、DIMMのクロック周波数を上げることで、有効領域の数を増やすことなく要求性能を満たすことができる。つまり、要求性能を満たしつつ省電力化を図ることができる。
いま、第1メモリ20を動作させるためのクロック周波数(DIMMのクロック周波数)が第1クロック周波数である場合を想定する。上述したように、領域制御部110は、アプリケーションが動作中の一定期間において発生する1以上のスワップ処理に要する時間を示すスワップ処理オーバヘッドを算出し、算出したスワップ処理オーバヘッドが上述の閾値よりも大きいか否かを判定する。以下では、第1クロック周波数でのスワップ処理オーバヘッドを「第1オーバヘッド」と称する場合がある。
図18に示すように、第1オーバヘッドが上述の閾値よりも小さい場合、周波数制御部140は、DIMMのクロック周波数を、第1クロック周波数から、第1クロック周波数よりも低いクロック周波数を示す第2クロック周波数に下げた場合のスワップ処理オーバヘッドを示す低周波数オーバヘッドを見積もる(算出する)。ここでは、クロック周波数を変更してもOS処理時間は大きく変わらないとし、データ転送時間の変化分を見積もる。上述の第1オーバヘッドと上述の低周波数オーバヘッドとの差は、第1クロック周波数を使用した場合のデータ転送時間の合計(複数回発生するスワップ処理ごとのデータ転送時間の合計)と、第2クロック周波数を使用した場合のデータ転送時間の合計との差であるとして見積もることができる。この見積もりに必要な、第1クロック周波数を使用した場合のデータ転送時間や第2クロック周波数を使用した場合のデータ転送時間の計測は、OSのインストール時やアプリケーション起動時など任意のタイミングで行い、領域制御部110が参照できるテーブルなどの任意の形式で保存することができる。そして、領域制御部110は、このテーブルを参照して、低周波数オーバヘッドの見積もりに必要な計算を行う。領域制御部110(周波数制御部140)は、見積もった低周波数オーバヘッドが上述の閾値以下の場合、DIMMのクロック周波数を第2クロック周波数に変更する。上述の閾値を超える場合は、処理を終了する。
一方、図19に示すように、上述の第1オーバヘッドが上述の閾値を超えている場合、周波数制御部140は、DIMMのクロック周波数を、第1クロック周波数から、第1クロック周波数よりも高いクロック周波数を示す第3クロック周波数に上げた場合のスワップ処理オーバヘッドを示す高周波数オーバヘッドを見積もる。この見積もりの方法は、低周波数オーバヘッドの見積もりの方法と同様である。領域制御部110(周波数制御部140)は、見積もった高周波数オーバヘッドが上述の閾値以下の場合、DIMMのクロック周波数を第3クロック周波数に変更する。上述の閾値を超える場合は、処理を終了する。
図20は、本実施形態の情報処理装置1の動作例を示すフローチャートである。図20に示すステップS1101〜ステップS1103の処理内容は、図6に示すステップS401〜ステップS403の処理内容と同様である。ステップS1103の結果が肯定の場合(ステップS1103:Yes)、周波数制御部140は上述の低周波数オーバヘッドを算出する(ステップS1104)。例えば周波数制御部140は、互いに異なる複数種類の第2クロック周波数と1対1に対応する複数の低周波数オーバヘッドを算出してもよい。次に、周波数制御部140は、ステップS1104で算出した低周波数オーバヘッドが閾値以下であるか否かを判断する(ステップS1105)。ステップS1105の結果が肯定の場合(ステップS1105:Yes)、周波数制御部140は、クロック周波数を第2クロック周波数に変更する(ステップS1106)。ステップS1105の結果が否定の場合(ステップS1105:No)、そのまま処理は終了する。
一方、上述のステップS1103の結果が否定の場合(ステップS1103:No)、周波数制御部140は上述の高周波数オーバヘッドを算出する(ステップS1107)。例えば周波数制御部140は、互いに異なる複数種類の第3クロック周波数と1対1に対応する複数の高周波数オーバヘッドを算出してもよい。次に、周波数制御部140は、ステップS1107で算出した高周波数オーバヘッドが閾値以下であるか否かを判断する(ステップS1108)。ステップS1108の結果が肯定の場合(ステップS1108:Yes)、周波数制御部140は、クロック周波数を第3クロック周波数に変更する(ステップS1109)。ステップS1108の結果が否定の場合(ステップS1108:No)、処理はステップS1110に移行する。ステップS1110の処理内容は、図6に示すステップS404の処理内容と同様である。
(第5の実施形態)
次に、第5の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。本実施形態では、図21に示すように、複数のプロセッサ10(図21の例では、第1プロセッサ10Aおよび第2プロセッサ10B)が、複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコル(キャッシュコヒーレンスプロトコル)を保証するQPI(Intel QuickPath Interconnect)などの高速なインターコネクト(キャッシュコヒーレント・インターコネクト)200を介して、相互に接続されている。あるいはネットワークや共有メモリを介して接続されていてもよい。図21の例は、XEONプロセッサシステムなどのNUMA(Non-Uniform Memory Access)型の構成のプロセッサシステムの一例である。以下では、図21の構成を例に挙げて説明する。なお、図21に示す第1プロセッサ10Aおよび第2プロセッサ10Bの各々の構成は、図1に示すプロセッサ10の構成と同様である。
第1プロセッサ10Aは、「第1処理装置」の一例であり、第1データを処理する。より具体的には、第1プロセッサ10Aは、第1データを処理する第1処理(この例では第1アプリケーション)を実行する。第1メモリ20は、第1データの少なくとも一部を記憶するメモリであり、この例ではDRAMで構成される。第1メモリ20は、メインメモリ(主記憶装置)として機能し、第1プロセッサ10Aは、第1メモリ20上のデータを直接読み書きする。第2メモリ30は、スワップ領域が確保されるメモリであり、この例ではNVMで構成される。第2メモリ30は、上述の第1データの一部を記憶するメモリであると考えることができる。第1プロセッサ10A、第1メモリ20および第2メモリ30の各々の構成は、図1の構成と同様である。
第2プロセッサ10Bは、「第2処理装置」の一例であり、第8データ(説明の便宜上、このように表記する)を処理する。より具体的には、第2プロセッサ10Bは第8データを処理する第2処理(この例では第2アプリケーション)を実行する。第4メモリ70は、第8データの少なくとも一部を記憶するメモリであり、この例ではDRAMで構成される。第4メモリ70は、メインメモリ(主記憶装置)として機能し、第2プロセッサ10Bは、第4メモリ70上のデータを直接読み書きする。ここでは、第4メモリ70は、図1に示す第1メモリ20に対応するメモリである。第5メモリ80は、スワップ領域が確保されるメモリであり、この例ではNVMで構成される。第5メモリ80は、上述の第8データの一部を記憶するメモリであると考えることができる。ここでは、第5メモリ80は、図1に示す第2メモリ30に対応するメモリである。第8データは、上述の第1データと同様に、第4メモリ70のうち、少なくともデータの内容の保持に必要な第1電力が供給される領域を示す1以上の有効領域より大きいサイズのデータである。
また、本実施形態のプロセッサシステムでは、第1プロセッサ10Aおよび第2プロセッサ10Bは、共通のOSを実行する。図22は、本実施形態のOSが有する機能の一例を示す図である。図22に示すように、OSは、処理制御部150を有する。なお、図22の例では、本実施形態に関する機能のみを例示して説明するが、OSが有する機能はこれに限られるものではなく、例えばOSは、第1プロセッサ10Aおよび第2プロセッサ10Bごとに、対応する領域制御部110の機能を有する形態であってもよい。また、ネットワークや共有メモリで接続されるなどの場合は別々のOSが実行されていてもよい。
処理制御部150は、第1データを処理するための期間内の一定期間(第1処理を実行するための期間内の一定期間)において、第1メモリ20に記憶されたデータを示す第2データのうち少なくとも一部を第2メモリ30へ移動し、かつ第2メモリ30に記憶されたデータを示す第3データのうち少なくとも一部を第1メモリ20へ移動するための処理量を示す(第1スワップ処理(第1移動処理)のスワップ処理オーバヘッドを示す)第1スワップ処理オーバヘッド(第1処理情報)を算出する。例えば第1スワップ処理は、第1処理を実行するための期間内の一定期間において、第1データに含まれるページのうち読み書きが要求されたページを示す第1対象ページが第2メモリ30上に存在する場合に発生し、第1メモリ20上のページを第2データとして第2メモリ30へ移動し、第2メモリ30上の第1対象ページを第3データとして第1メモリ20へ移動するための処理である。
また、処理制御部150は、第8データを処理するための期間内の一定期間(第2処理を実行するための期間内の一定期間)において、第4メモリ70に記憶されたデータを示す第9データのうち少なくとも一部を第5メモリ80へ移動し、かつ第5メモリ80に記憶されたデータを示す第10データのうち少なくとも一部を第4メモリ70へ移動するための処理量を示す(第3スワップ処理(第3移動処理)のスワップ処理オーバヘッドを示す)第6スワップ処理オーバヘッド(第5処理情報)を算出する。例えば第3スワップ処理は、第2処理を実行するための期間内の一定期間において、第8データに含まれるページのうち読み書きが要求されたページを示す第2対象ページが第5メモリ80上に存在する場合に発生し、第4メモリ70上のページを第9データとして第5メモリ80へ移動し、第5メモリ80上の第2対象ページを第10データとして第4メモリ70へ移動するための処理である。
そして、処理制御部150は、第1スワップ処理オーバヘッドと第6スワップ処理オーバヘッドの合計を示す第7スワップ処理オーバヘッドを算出する。図23に示すように、第7スワップ処理オーバヘッドが上述の閾値以下の場合、処理制御部150は、第1処理を第2プロセッサ10Bに移しても要求性能を満たせると判断し、第1データの処理(第1処理)を第2プロセッサ10Bに実行させる制御を行う。この場合、第1プロセッサ10Aで動作しているプロセスは無くなるので、OSは、第1プロセッサ10A、第1メモリ20および第2メモリ30の各々に供給する電力を、それぞれが動作可能な電力よりも低い値(例えばゼロ)に制御することができる。これにより、省電力化を図ることができる。また、処理制御部150は、上記とは反対に、第2処理を第1プロセッサ10Aに実行させる制御を行うこともできる。なお、第7処理スワップ処理オーバヘッドを算出する際に、第1スワップ処理オーバヘッドと第6スワップ処理オーバヘッドと、さらに、第1処理を第2プロセッサ10Bに実行させる(第1処理を第2プロセッサ10Bへ移す)制御に掛かるオーバヘッド、とを合計してもよい。
図24は、本実施形態の情報処理装置1(処理制御部150)の動作例を示すフローチャートである。各ステップの具体的な内容は上述したとおりである。図24に示すように、処理制御部150は、上述の第1スワップ処理オーバヘッドを算出する(ステップS1201)。また、処理制御部150は、上述の第6スワップ処理オーバヘッドを算出する(ステップS1202)。次に、処理制御部150は、上述の第7スワップ処理オーバヘッドを算出する(ステップS1203)。次に、処理制御部150は、ステップS1203で算出した第7スワップ処理オーバヘッドが上述の閾値以下であるか否かを判断する(ステップS1204)。ステップS1204の結果が肯定の場合(ステップS1204:Yes)、処理制御部150は、第1処理を第2プロセッサ10Bに実行させる(第1処理を第2プロセッサ10Bへ移す)制御を行う(ステップS1205)。ステップS1204の結果が否定の場合(ステップS1204:No)、そのまま処理は終了する。
なお、上述の第7スワップ処理オーバヘッドを計算する際に、第4メモリ70や第5メモリ80のメモリバンド幅を第1処理と第2処理で共有することによるアクセス速度の低下を考慮してもよい。具体的には、まず、処理制御部150は、第1スワップ処理オーバヘッドに含まれるデータ転送時間を、アクセス速度の低下を考慮したデータ転送時間に置き換えた結果を示す第8スワップ処理オーバヘッドを求める。次に、処理制御部150は、第6スワップ処理オーバヘッドに含まれるデータ転送時間を、アクセス速度の低下を考慮したデータ転送時間に置き換えた結果を示す第9スワップ処理オーバヘッドを求める。次に、第8スワップ処理オーバヘッドと第9スワップ処理オーバヘッドとの合計を、第7スワップ処理オーバヘッドとして計算し、上述の閾値と比較する形態であってもよい。
(第6の実施形態)
次に、第6の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。図25は、本実施形態のOSが有する機能の一例を示す図である。図25に示すように、OSは、移動処理制御部160をさらに有する。なお、この例では、移動処理制御部160は、領域制御部110とは別に設けられているが、これに限らず、例えば領域制御部110が、移動処理制御部160の機能を有する形態であってもよい。
第2メモリ30と組み合わせて、小さなサイズの(有効領域の数を制限した)第1メモリ20を利用する処理をOSに任せると(OSの仮想記憶方式のスワップ処理に任せると)、アプリケーションの開発は容易になるが、主にコンテキストスイッチ処理の時間が原因でOS処理時間は大きくなってしまい、要求性能を満たすことができない場合がある。そこで、本実施形態では、スワップ処理をユーザレベル(アプリケーションレベル)で行うことで、OSの介在を減らす(あるいは無くす)ことでコンテキストスイッチ処理などに要する時間(オーバヘッド)を減らすことで、OS処理時間を小さくする。OS処理時間を小さくすることにより、スワップ処理オーバヘッドも小さくなるので、その分、第1メモリ20の有効領域の数(有効な第1メモリ20の容量)を減らせるので、より省電力化を図ることができる。
本実施形態の移動処理制御部160は、上述の第1データ(第1メモリ20の1以上の有効領域よりも大きいサイズのデータ)を処理する第1処理に対応するアプリケーションから、第1データに含まれるデータを示す第4データの読み書きが要求された場合に発生するスワップ処理(移動処理)を実行し、該アプリケーションから、第1データに含まれるデータであって、第4データに比べて高速な処理が要求される第5データの読み書きが要求された場合に発生するスワップ処理を、該アプリケーションに実行させる制御を行う。
移動処理制御部160は、例えば図26に示すような、複数のページ(仮想アドレスに対応するページ)ごとに、スワップ処理をアプリケーションに実行させるか否かを示すユーザレベル情報を対応付けた対応情報を用いて、アプリケーションの動作中に発生するスワップ処理を、該アプリケーションに実行させるか否かを制御することができる。図26の例では、対応情報は上述のページテーブルであり、仮想空間におけるデータ(処理単位のデータ)の所在を示す仮想アドレスに対応するページを識別するページ番号と、該ページの物理的な格納場所と、オフセットと、ユーザレベル情報とを対応付けた情報である。オフセットは、第1メモリ20や第2メモリ30のうちページがマッピングされた位置を示す情報(つまり、物理アドレス)である。また、図26の例ではユーザレベル情報が「Yes」を示す場合は、対応するページへのアクセスに伴って発生するスワップ処理はアプリケーションに実行させることを意味し、ユーザレベル情報が「No」を示す場合は、対応するページへのアクセスに伴って発生するスワップ処理はアプリケーションに実行させずにOS(移動処理制御部160)が実行することを意味する。ここでは、アプリケーションが処理するデータを示す第1データに含まれるデータのうち高速な処理が要求されるデータに対応するページに対するユーザレベル情報は、「Yes」に設定されることになる。なお、ページテーブルの形態は図26の形態に限られるものではない。
例えばアプリケーションからの要求を受けたOSが、「0」を示すページ番号に対応するページへアクセスする場合、ページフォルトが発生する(図26の例では、「0」を示すページ番号に対応するページの格納場所は「第2メモリ30」であるため)。OS(移動処理制御部160)は、ページテーブルを参照して、「0」を示すページ番号に対応するユーザレベル情報を確認し、このユーザレベル情報は「Yes」を示すので、要求元のアプリケーション(ユーザレベルライブラリ)に対して、ページフォルトがあったことを通知する。この通知を受けたアプリケーションは、第2メモリ30のうち、「0」を示すページ番号に対応するオフセット(「21」)が示す領域に記憶されたデータ(ページ単位のデータ)を第1メモリ20へ移動し、第1メモリ20上のデータ(ページ単位のデータ)を第2メモリ30へ追い出すためのスワップ処理を行い、そのスワップ処理に応じてページテーブルのマッピングを変更する。
一方で、アプリケーションからの要求を受けたOSが、「4」を示すページ番号に対応するページへアクセスする場合も同様に、ページフォルトが発生する。OS(移動処理制御部160)は、ページテーブルを参照して、「4」を示すページ番号に対応するユーザレベル情報を確認し、このユーザレベル情報は「No」を示すので、そのままOSが、第2メモリ30のうち、「4」を示すページ番号に対応するオフセット(「32」)が示す領域に記憶されたデータ(ページ単位のデータ)を第1メモリ20へ移動し、第1メモリ20上のデータ(ページ単位のデータ)を第2メモリ30へ追い出すためのスワップ処理を行い、そのスワップ処理に応じてページテーブルのマッピングを変更する。
この例では、単一のアプリケーションが処理するデータ(第1データ)のうち、高速な処理が要求されるデータのアクセスに伴って発生するスワップ処理は該アプリケーションに実行させ、その他のデータのアクセスに伴って発生するスワップ処理はOS(移動処理制御部160)が実行しているが、例えば第1アプリケーションの動作中に発生するスワップ処理はOSが実行し、第1アプリケーションよりも高速性が要求される第2アプリケーションの動作中に発生するスワップ処理は該第2アプリケーションに実行させる形態であってもよい。
また、例えば図27に示すように、プロセッサ10は、I/Oコントローラ103を介して、SSDやHDDなどの第6メモリ90と接続される構成であってもよい。この構成では、単一のアプリケーションが処理するデータ(第1データ)に含まれるデータであって、第1メモリ20に存在しないデータ(第1メモリ20にマッピングされていないデータ)のうち、高速な処理が要求されるデータは第2メモリ30に配置され、その他のデータは第6メモリ90に配置されてもよい。つまり、第1データに含まれるデータのうち高速な処理が要求されるデータについては第2メモリ30をスワップデバイスとして利用し、その他のデータについては第6メモリ90をスワップデバイスとして利用することもできる。この場合、図28に示すように、OS(移動処理制御部160)は、アプリケーションが処理する第1データのうち高速な処理が要求されるデータのアクセスに伴って発生するスワップ処理(第1メモリ20と第2メモリ30との間でのスワップ処理)を実行する一方、その他のデータのアクセスに伴って発生するスワップ処理(第1メモリ20と第6メモリ90との間でのスワップ処理)は該アプリケーションに実行させる制御を行うことができる。
また、例えば第1アプリケーション(第1処理)が処理するデータ(第1データ)に含まれるデータであって、第1メモリ20に割り当てることができない(第1メモリ20に載りきらない)データは第6メモリ90に配置され、第1アプリケーションよりも高速性が要求される第2アプリケーションが処理するデータに含まれるデータであって、第1メモリ20に割り当てることができないデータは第2メモリ30に配置される形態であってもよい。つまり、第1アプリケーションを動作させる場合は第6メモリ90をスワップデバイスとして利用し、より高速性が要求される第2アプリケーションを動作させる場合は第2メモリ30をスワップデバイスとして利用することもできる。
この場合、図29に示すように、OS(移動処理制御部160)は、第1アプリケーションの動作に伴って発生するスワップ処理(第1メモリ20と第6メモリ90との間でのスワップ処理、以下の説明ではOSスワップ処理と称する場合がある)を実行する一方、第2アプリケーションの動作に伴って発生するスワップ処理(第1メモリ20と第2メモリ30との間でのスワップ処理、以下の説明ではアプリケーションスワップ処理と称する場合がある)は該第2アプリケーションに実行させる制御を行うことができる。これにより、高速な第2メモリ(NVM)30のうち、第2アプリケーションが利用することができる領域を増やすことができる。また、ページテーブルは、格納場所が第6メモリ90の場合は、OSが、データ移動(スワップ処理)あるいはデータ移動が必要なことを検出するページフォルトをハンドリングする処理を行うことが設定され(「No」を示すユーザレベル情報が設定され)、格納場所が第2メモリ30の場合は、アプリケーションが、データ移動(スワップ処理)あるいはデータ移動が必要なことを検出するページフォルトをハンドリングする処理を行うことが設定される(「Yes」を示すユーザレベル情報が設定される)。
また、図30に示すように、ユーザレベルでスワップ処理を行うと、HDDやSSDなどの第6メモリ90の代わりに、高速なNVMなどの第2メモリ30を使うことでデータ転送時間が小さくなるだけでなく、OSの処理がユーザレベル処理(ユーザレベルライブラリの処理、あるいはアプリケーションレベルの処理)に置き換わることにより高速になる。この例では、スワップ処理オーバヘッドは、データ転送時間とユーザレベル処理に要する時間を示すユーザレベル処理時間とから構成されると考えることができる。また、ユーザレベル処理を行っても、OS処理時間は減っても無くならないとすれば、スワップ処理オーバヘッドは、データ転送時間とユーザレベル処理時間とOS処理時間とから構成されると考えることもできる。ユーザレベルのスワップ処理(つまり、ここで新しく定義されたスワップ処理オーバヘッドも)は、これまでのすべての実施形態についても適用することができる。
すなわち、スワップ処理オーバヘッドは、プロセッサ10が、第1メモリ20(DRAM)の1以上の有効領域より大きいサイズの第1データを処理する第1処理を、第1メモリ20の有効領域と第2メモリ30と第6メモリ90とをワーキングエリアとして使用して実行するための期間内の一定期間において複数回発生するスワップ処理に要する時間を示す情報であり、OSによるスワップ処理に要する時間を示すOSスワップ処理オーバヘッドの累計値と、アプリケーションによるスワップ処理に要する時間を示すアプリケーションスワップ処理オーバヘッドの累計値との合計である。1回あたりのOSスワップ処理オーバヘッドは、OS処理時間と、第1メモリ20と第6メモリ90との間でのデータ転送に要する時間を示すデータ転送時間との合計となる。また、1回あたりのアプリケーションスワップ処理オーバヘッドは、スワップ処理に関してアプリケーションが実行する処理に要する時間を示すアプリケーション処理時間と、第1メモリ20と第2メモリ30との間でのデータ転送に要する時間を示すデータ転送時間との合計となる。そして、OSは、OSスワップ処理オーバヘッドとアプリケーションスワップ処理オーバヘッドとの合計であるスワップ処理オーバヘッドが閾値以下の場合は、要求性能を満たすと判断することができる。
要するに、情報処理装置1は、プロセッサ10と、第1メモリ20と、第2メモリ30と、第2メモリ30よりもデータの読み書きに要する速度を示すアクセス速度が低い第6メモリ90とを備える。プロセッサ10は、第1メモリ20の1以上の有効領域より大きいサイズの第1データを処理する第1処理を実行する。第2メモリ30は第1データの一部であって、高速な処理が要求されるデータを記憶する。第6メモリ90は、第1データの一部であって、高速な処理が要求されない他のデータを記憶する。プロセッサ10上で動作するOS(領域制御部110)は、第1メモリ20の有効領域と第2メモリ30と第6メモリ90とをワーキングエリアとして使用する第1処理を実行するための期間内の一定期間において発生するアプリケーションスワップ処理の処理量を示す処理情報(一定期間中のアプリケーションスワップ処理オーバヘッドの累計値)と、該一定期間において発生するOSスワップ処理の処理量を示す処理情報(一定期間中のOSスワップ処理オーバヘッドの累計値)と、の合計が閾値以下になるよう、有効領域の数を変化させる。また、OSは、上述のOSスワップ処理を実行する一方、上述のアプリケーションスワップ処理を、第1処理に対応するアプリケーションに実行させる。上述のアプリケーションスワップ処理は、第1メモリ20に記憶されたデータを示す第2データを第2メモリ30へ移動し、第2メモリ30に記憶されたデータを示す第3データを第1メモリ20へ移動するための処理である。上述のOSスワップ処理は、第1メモリ20に記憶されたデータを示す第13データを第6メモリ90へ移動し、第6メモリ90に記憶されたデータを示す第14データを第1メモリ20へ移動するための処理である。
また、全てのスワップ処理をOSに任せると、OSは、連続した複数ページをまとめて第1メモリ20に移動させたり、LRUなどのアルゴリズムを用いて不要と予想されるページをスワップ領域に追い出すなど、個々のアプリケーションのメモリアクセスの特性に合わせたページ移動を行うことは困難なので、必要なページをその都度第1メモリ20に移動させたり、不要なページを第1メモリ20に移動させてしまったり、すぐにアクセスするページであるにも関わらず該ページをスワップ領域に追い出してしまったりするため、結果としてOS処理時間(スワップ処理に関するOSのオーバヘッド)は大きくなってしまう。
そこで、本実施形態では、スワップ処理をユーザレベル(アプリケーションレベル)で行うことで、必要なページだけを一度で移動させることで、不要なページ移動やスワップ処理の回数を減らしてOS処理時間を小さくする。OS処理時間を小さくできれば、スワップ処理オーバヘッドも小さくできるので、その分だけ第1メモリ20の有効領域の数(有効な第1メモリ20の容量)を減らせるので、より省電力化できる。
図26の例を用いて説明すると、例えばアプリケーションからの要求を受けたOSが、「0」を示すページ番号に対応するページへアクセスする場合にページフォルトが発生し、ページテーブルの設定に従って、アプリケーションにスワップ処理が委譲される。これがOSに任されていて、OSが連続したアドレスのページを転送する設定になっていると、「0」を示すページ番号に対応するページと一緒に「1」を示すページ番号に対応するページも転送される。しかし、アプリケーション側で、「0」を示すページ番号に対応するページ0の次に使うページは「4」を示すページ番号に対応するページである場合、「1」を示すページ番号に対応するページの転送は無駄になってしまう。
そこで、本実施形態では、図31のように、ページ番号のリスト(形式は任意であってよく、例えば仮想アドレスのリストであってもよい)を持ち、このリストには、対応するページの利用順(ページを利用する順番)が設定されている。また、リストは複数あってもよい。ページフォルトしてアプリケーションにスワップ処理が委譲されると、アプリケーションは、リストの中から、ページフォルトを引き起こしたページ番号を検索し、該ページ番号に対応するページを転送する際に、該仮想アドレスよりも利用順が後の一部または全部のページ番号に対応するページを転送する。このようにすることで、ページフォルトの回数(スワップ処理に関わるOS処理の回数)を削減することができるので、スワップ処理オーバヘッドを小さくすることができる。従って、第1メモリ20の有効領域の数をより小さくすることができ、さらなる省電力化が可能になる。つまり、アプリケーションが、第1メモリ20に記憶された第2データを第2メモリ30へ移動させ、第2メモリ30に記憶された第3データを第1メモリ20に移動させる場合(アプリケーションがスワップ処理を実行する場合)、第3データを含む複数のデータ(それぞれページ単位のデータ)の処理順を示す順番情報(上述のリストに対応)に基づいて、第3データ、および、第3データよりも処理順が後の一部または全部のデータを第1メモリ20に移動させる。
また、アプリケーションがユーザレベルスワップ処理専用のユーザレベルライブラリを使って処理する際はユーザレベルライブラリからリストを設定するAPIが提供され、これを用いて設定する。すなわち、OS(見方を変えれば情報処理装置1)は、アプリケーションが、データの処理順を示す順番情報(リストに対応)を設定するためのインタフェース部(API)を有している。
(第7の実施形態)
次に、第7の実施形態を説明する。上述の第1の実施形態と共通する部分については適宜に説明を省略する。図32は、本実施形態の情報処理装置1のハードウェア構成の一例を示す図である。図32に示すように、情報処理装置1は、SoC(System On Chip)210と、DRAMなどで構成される第1メモリ20と、NVMなどで構成される第2メモリ30と、を備える。SoC210は、内部モジュールとして、プロセッサコア101、第1メモリコントローラ102、第2メモリコントローラ104、内部メモリ220と、を備え、これらはバス230を介して接続される。この例では、SoC210が「処理装置」に対応している。
この例では、プロセッサコア101はARMプロセッサなどであり、キャッシュメモリ(L1キャッシュ、L2キャッシュ)やNEONなどの汎用(Single Instruction Multiple Data)エンジンなどを備えている。SoC210は、1つのプロセッサコア101を持つシングルコアの構成であってもよいし、複数のプロセッサコアを持つマルチコアの構成(マルチコアプロセッサ)であってもよい。上述の第1の実施形態と同様、第1メモリ20は、メモリの全体あるいは一部をセルフリフレッシュモードなどの省電力モードに遷移させる、あるいは、パワーオフすることで消費電力を抑制できる。第1メモリ20は、LPDDR2などのDRAM等で構成される揮発性メモリであるが、これに限らず、例えば不揮発メモリなどであってもよい。第2メモリ30の構成は上述の第1の実施形態と同様である。
内部メモリ(処理装置内部のメモリ)220は、例えばSRAMなどから構成されるが、これに限らず、例えば高速なMRAMなどの不揮発メモリであってもよい。内部メモリ220はオンチップメモリであるためにSoC210に接続されるメモリ(第1メモリ20や第2メモリ30)よりもアクセスレイテンシも低く消費電力も低い。
図33は、情報処理装置1が有するソフトウェアの構成の一例を示す図である。本実施形態では、OSは、切替制御部170をさらに有する点で上述の第1の実施形態と相違する。ここでは、第2有効領域は、内部メモリ220のうちデータの読み書きに利用することができる領域である。切替制御部170は、上述の1以上の有効領域より大きいサイズの第1データの処理(第1処理)を、第1メモリ20の代わりに、上述の1以上の第2有効領域(内部メモリ220の空き容量に相当)を利用する処理に切り替えた場合に、第1データを処理するための期間内の一定期間(第1処理を実行するための期間内の一定期間)において、第2有効領域に記憶されたデータを示す第11データのうち少なくとも一部を第2メモリ30へ移動し、かつ第2メモリ30に記憶されたデータを示す第12データのうち少なくとも一部を内部メモリ220へ移動するための処理量を示す第6処理情報が閾値以下になるのであれば、第1メモリ20と第2メモリ30とを使用する第1データの処理を、内部メモリ220を使用する処理に切り替える制御を行う。つまり、第1処理を、第1メモリ20の代わりに、内部メモリ220(1以上の第2有効領域)を利用した処理に切り替えた場合に、該第1処理を実行するための期間内の一定期間において発生するスワップ処理の処理量を示す上述のスワップ処理オーバヘッドが上述の閾値以下になるような場合に、SoC210(プロセッサコア101)による第1データの読み書きに用いられるメモリとして第1メモリ20を利用する第1処理を、SoC210による第1データの読み書きに用いられるメモリとして内部メモリ220を利用(内部メモリ220のみを使用)する処理に切り替える制御を行う。
また、この切り替えの後、OS(領域制御部110)は、内部メモリ220に記憶されたデータを示す第11データを第2メモリ30へ移動し、第2メモリ30に記憶されたデータを示す第12データを第1メモリ20へ移動するためのスワップ処理(説明の便宜上「第4スワップ処理(第4移動処理に相当)」と称する)の処理量を示すスワップ処理オーバヘッド(説明の便宜上、「第10スワップ処理オーバヘッド(第6処理情報に相当)」と称する)が上述の閾値以下になる範囲で、内部メモリ220の第2有効領域の数を変化させることもできる。1回あたりの第4スワップ処理に要する時間(オーバヘッド)は、内部メモリ220と第2メモリ30との間でのデータ転送に要するデータ転送時間と、第4スワップ処理に関してOSが実行する処理に要するOS処理時間と、の合計である。第10スワップ処理オーバヘッドは、一定期間内に発生する1以上の第4スワップ処理ごとのオーバヘッドの合計を示す。
また、切替制御部170は、第1メモリ20と第2メモリ30とをワーキングエリアとして使用する第1処理を実行しているときの上述のスワップ処理オーバヘッドが上述の閾値以下であり、かつ、内部メモリ220の第2有効領域の数が、そのときの第1メモリ20の有効領域の数に対応していない場合、第1処理を、SoC210(プロセッサコア101)による第1データの読み書きに用いられるメモリとして第1メモリ20と内部メモリ220を併用する処理に切り替える制御を行う。
図34は、本実施形態の情報処理装置1の動作例を示すフローチャートである。図34の例では、SoC210は、第1メモリ20と第2メモリ30とをワーキングエリアとして使用する第1処理を実行中であり、スワップ処理オーバヘッドが閾値以下になるように第1メモリ20の有効領域の数が設定されていることを前提とする。まず、切替制御部170は、内部メモリ220の第2有効領域の数が、現時点の第1メモリ20の有効領域の数に対応しているか否かを判断する(ステップS1301)。なお、「内部メモリ220の第2有効領域の数が、第1メモリ20の有効領域の数に対応している」とは、内部メモリ220の第2有効領域の数(内部メモリ220の空き容量のサイズ)を合計したサイズが、第1メモリ20の有効領域を合計したサイズ以上である場合だけでなく、第1メモリ20の有効領域を合計したサイズよりも、第1メモリ20のアクセス速度と内部メモリ220のアクセス速度との差を考慮した分だけ小さい所定サイズ以上である場合も該当する。要するに、ステップS1301では、第1メモリ20の有効領域と第2メモリ30をワーキングエリアとして使用する処理を、内部メモリ220の第2有効領域(内部メモリ220の空き領域)と第2メモリ30をワーキングエリアとして使用する処理に切り替えても、要求性能を満たすことができるか否かを判断する。
ステップS1301の結果が肯定の場合(ステップS1301:Yes)、図35に示すように、切替制御部170は、第1処理を、SoC210(プロセッサコア101)による第1データの読み書きに用いられるメモリとして内部メモリ220を使用(内部メモリ220のみを使用)する処理に切り替える制御を行う(ステップS1302)。また、ステップS1301の結果が否定の場合(ステップS1301:No)、図35に示すように、切替制御部170は、第1処理を、SoC210(プロセッサコア101)による第1データの読み書きに用いられるメモリとして第1メモリ20と内部メモリ220を併用する処理に切り替える制御を行う(ステップS1303)。
図36は、図34のステップS1302の後の情報処理装置1の動作例を示すフローチャートである。まず、領域制御部110は、上述の第10スワップ処理オーバヘッドを算出する(ステップS1311)。次に、領域制御部110は、ステップS1311で算出した第10スワップ処理オーバヘッドと上述の第4閾値とを比較する(ステップS1312)。第10スワップ処理オーバヘッドが第4閾値以下の場合(ステップS1313:Yes)、領域制御部110は、第2有効領域の数を減らす制御を行う(ステップS1314)。そして、ステップS1311以降の処理が繰り返される。
一方、ステップS1311で算出した第10スワップ処理オーバヘッドが第4閾値よりも大きい場合(ステップS1313:No)、領域制御部110は、該第10スワップ処理オーバヘッドが上述の閾値以下であるか否かを判断する(ステップS1315)。ステップS1315の結果が肯定の場合(ステップS1315:Yes)、処理は終了する。ステップS1315の結果が否定の場合(ステップS1315:No)、領域制御部110は、第2有効領域の数を増やす制御を行い(ステップS1316)、ステップS1311以降の処理を繰り返す。なお、ステップS1316において、第2有効領域の数を増やすことができない場合は、図34のステップS1301の結果が否定であることと同義であるので、処理は図34のステップS1303に移行する。
なお、図34のステップS1302の切り替えは、様々なタイミングで行うことができる。例えば、アプリケーションを実行中に行ってもよい。あるいは、最初のアプリケーション実行時は第1メモリ20の有効領域と第2メモリ30をワーキングエリアとして使用し、その次にアプリケーションが実行されるときに、最初のアプリケーション実行時の結果を反映させて、内部メモリ220の第2有効領域と第2メモリ30をワーキングエリアとして使用してもよい。あるいは、アプリケーションのインストール時などに両方が実行され、消費電力が低いまたは実行時間が短い方の方法でアプリケーションが動作するように設定されてもよい。これは他のすべての実施形態についても同様である。また、以上においては仮想記憶方式を利用する前提で説明したが、その限りではない。
(第7の実施形態の変形例)
例えば図37に示すように、第1メモリ20が設けられない形態であってもよい。このようなシステムにおいて、上述の第1の実施形態で説明した第1メモリ20の省電力制御を、内部メモリ220の省電力制御に置き換えることができる。すなわち、情報処理装置1は、第1データを処理する第1処理を実行するSoC210と、SoC210による第1データの読み書きに用いられ、かつ、SoC210内部のメモリを示す内部メモリ220と、第1データの一部を記憶する第2メモリ30と、を備える。また、SoC210上で動作するOSは、上述の1以上の第2有効領域より大きいサイズの第1データを処理するための期間内の一定期間において、内部メモリ220に記憶されたデータを示す第11データのうち少なくとも一部を第2メモリ30へ移動し、第2メモリ30に記憶されたデータを示す第12データのうち少なくとも一部を内部メモリ220へ移動するための処理量(上述の第4移動処理(第4スワップ処理)の処理量)を示す第6処理情報(第10スワップ処理オーバヘッド)が閾値以下になるよう、第2有効領域の数を変化させる機能(領域制御部110)を有する形態であってもよい。
また、以上に説明した例とは逆に、内部メモリ220と第2メモリ30をワーキングエリアとして使用する処理を、第1メモリ20も使用する処理に切り替える形態であってもよい。すなわち、情報処理装置1は、SoC210と、第1メモリ20と、内部メモリ220と、第2メモリ30とを備え、情報処理装置1上で動作するOSは、内部メモリ220のうちデータの読み書きに利用することができる領域を示す1以上の第2有効領域と、第2メモリ30とを使用して、上述の1以上の第2有効領域より大きいサイズの第1データを処理するための期間内の一定期間において、内部メモリ220に記憶されたデータを示す第11データのうち少なくとも一部を第2メモリ30へ移動し、かつ第2メモリ30に記憶されたデータを示す第12データのうち少なくとも一部を第1メモリ20へ移動するための処理量(上述の第4スワップ処理の処理量)を示す第6処理情報(第10スワップ処理オーバヘッド)が閾値を超える場合は、第1処理を、SoC210による第1データの読み書きに用いられるメモリとして第1メモリ20と内部メモリ220を併用する処理に切り替える制御を行う機能を有する形態であってもよい。この切り替えを行う場合、第1メモリ20に含まれる複数の領域(電源単位領域)のうちの何れか1以上(要求性能を満たすことができる任意の数)に供給される電力が第2電力から第1電力に変更されて、無効領域から有効領域に変化する。
(第8の実施形態)
次に、第8の実施形態を説明する。上述の第1実施形態と共通する部分については適宜に説明を省略する。図38は、本実施形態の情報処理装置1のハードウェア構成の一例を示す図である。図38の例では、プロセッサ10は、DRAMなどの第1メモリ20、および、NVMなどの第2メモリ30の各々と接続されている。第2メモリ30は、MRAMや3D XPointやReRAMなどの第1実施形態で挙げたバイト単位やプロセッサのキャッシュライン単位などの(OSのページ単位よりも小さい単位)でプロセッサ10が直接データの読み書きが可能な(アクセス可能な)不揮発メモリなどを想定している。
プロセッサ10上で動作するOSは、読み書きが要求されたページを示す対象ページが第2メモリ30上に存在し、かつ、該ページの利用回数(処理を実行するための処理期間よりも短い一定期間における利用回数)が基準値以上の場合(アクセスローカリティが高い場合)、スワップ処理を介して該ページの読み書きを行う(第2メモリ30上の対象ページを第1メモリ20へ転送して読み書きを行う)機能(第1手段)を有する。また、OSは、対象ページが第2メモリ30に存在し、かつ、該ページの利用回数が基準値未満の場合(アクセスローカリティが低い場合)、第2メモリ30に対してデータの読み書きを直接行う機能(第2手段)を有する。
図38に示す第2ページは、アクセスローカリティが低いページであり、対象ページが第2ページである場合、OSが行うページテーブルの設定に基づき、プロセッサ10は、第2メモリ30に対して対象ページの読み書きを直接行う。より具体的には、OSは、第2ページを構成する複数のページデータのうち、読み書きが要求されたページデータに対する読み書きを直接行う。各ページを構成するデータ(ページデータ)の構造やサイズは任意であり、ページデータ間で同一であってもよいし異なっていてもよい。また、図38に示す第1ページは、アクセスローカリティが高いページであり、対象ページが第1ページである場合、OSが行うページテーブルの設定に基づき、プロセッサ10は、スワップ処理を介して該対象ページの読み書きを行う。
例えば、読み書きが要求された対象ページが第2メモリ30上に存在し、かつ、対象ページのアクセスローカリティが低い場合に、該対象ページを第1手段で第1メモリ20に転送したのちにアクセスする場合、ページ単位で転送してもその利用回数が少ないのであれば、データ転送に要する時間と電力の大部分が無駄になってしまい効率が悪い。それよりは、第2手段で直接キャッシュライン単位などページ単位より小さい単位でアクセスすることで、第1メモリ20より第2メモリ30のアクセス速度が遅くても、上記のような無駄が発生することを抑制できる。一方、対象ページが第2メモリ30上に存在し、かつ、該対象ページのアクセスローカリティが高い場合は、スワップ処理を介してアクセスした方が、対象ページへのアクセスが高速な第1メモリ20に対してデータの読み書きが行われるので効率が良い。このように、データへのアクセスパターンに応じて(対象ページのアクセスローカリティが低い場合などに)第1アクセスと第2アクセスを混在させることで、不要なページインと、不要にページインされたページのページアウトと、不要なページインによって他の第1メモリ20に格納されていた方がよい(すぐに使用するために)ページのページアウトなどを抑制できる。これにより、データの移動量が減り(第1メモリ20を効率よく使えるようになり)、第1メモリ20の必要な容量が小さくできる(小さい容量で性能を維持できる)ので、小さくしたことにより第1メモリ20の不要になった領域はパワーオフなどすることができる。したがって、省電力化を図ることができる。
ここでは、第1データは、第2メモリ30に対して直接読み書きを行うデータを示す1以上の第6データと、スワップ処理を介して読み書きを行うデータを示す1以上の第7データと、を含む。この場合、第7データのみが第1メモリ20を利用することになるので、OS(領域制御部110)は、第7データの数に応じて、有効領域の数を決定(第1処理の前に決定)することができる。より具体的には、第1メモリ20の有効領域の合計サイズが、第7データの合計サイズと同じかそれより小さいサイズになるよう、有効領域の数を決定することができる。上述の第1の実施形態と同様、有効領域に供給される電力は第1電力に設定され、それ以外の無効領域に供給される電力は第2電力に設定される。デフォルトの有効領域の数を決定した後は、上述の第1の実施形態と同様の動作になる。
また、プロセッサ10が、スワップ処理を介して読み書きを行うデータを多く含むデータを処理する第4処理(第4アプリケーション)を実行する場合と、第4処理に比べて、第2メモリ30に対して直接読み書きを行うデータを多く含むデータを処理する第5処理(第5アプリケーション)を実行する場合とを比較すると、第4処理を実行する場合の方が、有効領域の数は多くなる。
この例では、デフォルトの有効領域の数を決定する際に利用する上述の第7データの数は、アプリケーションからOSに通知されるヒント情報に基づいて、特定することができる。ヒント情報は、アプリケーションが処理するデータ(第1データ)に含まれる各データのアクセス特性を示す情報(各データがどのようにアクセスされるのかを示す情報)であり、その形態は任意である。例えばヒント情報は、第1データに含まれる複数のデータごとに、上述の第6データであるか上述の第7データであるのかを示す情報であってもよいし、第1データに含まれる複数のデータごとに、該データが上述の第6データであるか上述の第7データであるのかをOSが判断可能な情報であってもよい。例えばヒント情報は、第1データに含まれる複数のデータごとに、ランダムアクセスが行われるデータであるか否かを示す情報であってもよい。OSは、ランダムアクセスが行われるデータについては、上述の第6データであると判断することができる。
要するに、OSは、第1処理の実行前に該第1処理に対応するアプリケーションから、第1処理で処理するデータを示す第1データに含まれる各データのアクセス特性を示すヒント情報を受け取り、その受け取ったヒント情報に基づいて、上述の第7データの数を特定することができる。
また、別の方法として、OSが、図39に示すようなページテーブルに記録されている情報を元に上述の第7データの数を知ることもできる。図39の例では、本実施形態の説明に必要な部分のみを例示している。これは他の実施形態のページテーブルの例でも同様である。図39に示すように、ページテーブルは、複数のページ(処理対象のデータに割り当てられる仮想アドレスに対応するページ)ごとに、格納場所と、オフセットと、上述の第6データであるか否かを示す属性情報とを対応付けた情報である。図39の例では、「No」を示す属性情報は、上述の第7データであることを示す情報(上述の第6データではないことを示す情報)であり、「Yes」を示す属性情報は、上述の第6データであることを示す情報である。要するに、ページテーブル(対応情報)は、第1データに含まれる複数のデータごとに、上述の第6データであるか否かを示す属性情報が対応付けられた情報であると考えることができ、OS(領域制御部110)は、このページテーブルに基づいて、第1データに含まれる第7データの数を特定することができる。なお、上述の第7データの数を知る方法は、これらに限られるものではない。
また、例えば図40に示すように、第1データを処理する第1処理を実行する外部装置40による第1データの読み書きに用いられる第1メモリ20と、外部装置40が直接データの読み書きを行うことができ、かつ、第1データの一部を記憶する第2メモリ30と、第1メモリ20と第2メモリ30との間でデータを移動させるコントローラ50と、を備える記憶装置(メモリモジュール)が設けられる形態であってもよい。この例では、上述のOSにより提供される機能(領域制御部110等の機能)は、ハードウェア要素であるコントローラ50により実現される。このような構成の場合、コントローラ50が、読み書きが要求された対象ページの読み書きを第2メモリ30に対して直接行うか、スワップ処理を介して行うかを制御する。また、コントローラ50は、上述のページテーブルを管理し、ページテーブルに基づいて上述の第7データの数を特定し、その特定した第7データの数に応じて、デフォルトの有効領域の数を決定することもできる。また、コントローラ50は、CPUなどの外部装置50上で動作するアプリケーションから上述のヒント情報を受け取ることができるので、このヒント情報に基づいて上述の第7データの数を特定し、その特定した第7データの数に応じて、デフォルトの有効領域の数を決定することもできる。
以上、本発明の実施形態を説明したが、上述の各実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
また、上述の各実施形態および各変形例は任意に組み合わせることが可能である。