(57)【要約】 【課題】処理装置の速度性能を担保しつつ省電力化を図る。【解決手段】実施形態の情報処理装置は、処理装置と第１メモリと第２メモリと領域制御部とを備える。処理装置は、第１データを処理する。第１メモリは、第１データの少なくとも一部を記憶する。第２メモリは、第１データの一部を記憶する。有効領域は、第１メモリのうち、少なくともデータの内容の保持に必要な第１電力が供給される領域である。領域制御部は、１以上の有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、第１メモリに記憶されたデータを示す第２データのうち少なくとも一部を第２メモリへ移動し、かつ第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を第１メモリへ移動するための処理量を示す処理情報が閾値以下になるよう、有効領域の数を変化させる。【選択図】図１
2017138853.tif 000002
【特許請求の範囲】
【請求項１】
第１データを処理する処理装置と、
前記第１データの少なくとも一部を記憶する第１メモリと、
前記第１データの一部を記憶する第２メモリと、
有効領域は、前記第１メモリのうち、少なくともデータの内容の保持に必要な第１電力が供給される領域であり、
１以上の前記有効領域より大きいサイズの前記第１データを処理するための期間内の一定期間において、前記第１メモリに記憶されたデータを示す第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための処理量を示す処理情報が閾値以下になるよう、前記有効領域の数を変化させる領域制御部と、を備える、
情報処理装置。
【請求項２】
前記第２メモリは、データを保持するための電力が前記第１メモリよりも低い、
請求項１に記載の情報処理装置。
【請求項３】
前記第１メモリのうち前記有効領域以外の領域を示す無効領域に供給される第２電力は前記第１電力よりも低い、
請求項１に記載の情報処理装置。
【請求項４】
前記領域制御部は、前記処理情報が前記閾値以下となる範囲で前記処理量を増やすことで、前記第１データを処理するために必要な前記有効領域の数を減らし、不要な前記有効領域に供給する電力を、前記第１電力から、前記第１電力よりも低い第２電力に変更する制御を行う、
請求項１に記載の情報処理装置。
【請求項５】
前記閾値は、前記一定期間中において、何れか１つの前記有効領域に供給する電力を、前記第１電力から、前記第１電力よりも低い第２電力に変更して前記有効領域の数を１つ減らした場合に削減される電力量を表し、
前記処理情報は、前記有効領域の数を減らした場合に前記一定期間中に増加する前記処理量に伴って発生する電力量であり、
前記領域制御部は、
前記処理情報が前記閾値以下になる範囲で、何れか１つの前記有効領域に供給する電力を前記第１電力から前記第２電力へ変更する制御を繰り返し実行する、
請求項１に記載の情報処理装置。
【請求項６】
第２処理情報は、前記一定期間中において、前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理に要する時間を表し、
第３処理情報は、前記有効領域の数を１つ減らした場合に前記一定期間中に増加する前記処理量に伴って発生する電力量を表し、
前記領域制御部は、
前記第２処理情報が第２閾値以下で、かつ、前記第３処理情報が第３閾値以下になる範囲で、何れか１つの前記有効領域に供給する電力を前記第１電力から前記第２電力へ変更する制御を繰り返し行う、
請求項１に記載の情報処理装置。
【請求項７】
前記領域制御部は、前記処理情報が前記閾値よりも小さい第４閾値以下の場合、何れか１つの前記有効領域に供給する電力を、前記第１電力から前記第１電力よりも小さい第２電力に変更して前記有効領域の数を減らし、該有効領域に記憶されたデータを前記第２メモリへ移動する制御を行う、
請求項１に記載の情報処理装置。
【請求項８】
データの読み書きの速度を示すアクセス速度が前記第２メモリよりも低い第３メモリと、
前記処理情報を元に、前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理を、前記第２データのうち少なくとも一部を前記第１メモリから前記第３メモリへ移動し、かつ前記第３データのうち少なくとも一部を前記第３メモリから前記第１メモリへ移動するための第２移動処理に置き換えた場合の処理量を示す第４処理情報を算出する算出部と、
前記第４処理情報が前記閾値よりも小さい場合、前記第１メモリと前記第２メモリとを使用する前記第１データの処理を、前記第１メモリと前記第３メモリとを使用する処理に切り替える制御を行う切替制御部と、を備える、
請求項１に記載の情報処理装置。
【請求項９】
前記領域制御部は、前記処理情報が第４閾値以下の場合、前記有効領域の数を減らす制御を行い、
前記第４閾値は前記閾値よりも小さい、
請求項１に記載の情報処理装置。
【請求項１０】
前記領域制御部は、前記処理情報が前記第４閾値よりも小さい場合、何れかの前記有効領域に供給される電力を、前記第１電力よりも低い第２電力とすることで、該有効領域を、前記第２電力が供給される領域を示す無効領域へ変化させる制御を行い、
前記有効領域から前記無効領域へ変化させる順番は予め定められている、
請求項９に記載の情報処理装置。
【請求項１１】
前記処理情報が前記閾値を超えない範囲で、前記第１メモリを動作させるためのクロック周波数を変化させる制御を行う周波数制御部を備える、
請求項１に記載の情報処理装置。
【請求項１２】
アプリケーションから前記第１データに含まれるデータを示す第４データの読み書きが要求された場合に、前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理を実行し、前記アプリケーションから、前記第１データに含まれるデータであって、前記第４データに比べて高速な処理が要求される第５データの読み書きが要求された場合に、前記移動処理を前記アプリケーションに実行させる制御を行う移動処理制御部を備える、
請求項１に記載の情報処理装置。
【請求項１３】
前記第１データは、
前記第２メモリに対して直接読み書きを行うデータを示す１以上の第６データと、
前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理を介して読み書きを行うデータを示す１以上の第７データと、を含み、
前記領域制御部は、前記第７データの数に応じて、前記有効領域の数を決定する、
請求項１に記載の情報処理装置。
【請求項１４】
第１データを処理する第１処理装置と、
前記第１データの少なくとも一部を記憶する第１メモリと、
前記第１データの一部を記憶する第２メモリと、
複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコルを保証するインターコネクトを介して前記第１処理装置と接続され、第８データを処理する第２処理装置と、
前記第８データの少なくとも一部を記憶する第４メモリと、
前記第８データの一部を記憶する第５メモリと、
前記第１データを処理するための期間内の一定期間において、前記第１メモリに記憶されたデータを示す第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための処理量を示す第１処理情報と、前記第８データを処理するための期間内の一定期間において、前記第４メモリに記憶されたデータを示す第９データのうち少なくとも一部を前記第５メモリへ移動し、かつ前記第５メモリに記憶されたデータを示す第１０データのうち少なくとも一部を前記第４メモリへ移動するための処理量を示す第５処理情報と、の合計が閾値以下の場合は、前記第１データの処理を前記第２処理装置に実行させる制御を行う処理制御部と、を備える、
情報処理装置。
【請求項１５】
第１データを処理する処理装置と、
前記第１データの少なくとも一部を記憶する第１メモリと、
前記処理装置内部のメモリを示す内部メモリと、
前記第１データの一部を記憶する第２メモリと、
有効領域は、前記第１メモリのうち、少なくともデータの内容の保持に必要な第１電力が供給される領域であり、
第２有効領域は、前記内部メモリのうちデータの読み書きに利用することができる領域であり、
１以上の前記有効領域より大きいサイズの前記第１データの処理を、前記第１メモリの代わりに、１以上の前記第２有効領域を利用する処理に切り替えた場合に、前記第１データを処理するための期間内の一定期間において、前記第２有効領域に記憶されたデータを示す第１１データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第１２データのうち少なくとも一部を前記内部メモリへ移動するための処理量を示す第６処理情報が閾値以下になるのであれば、前記第１メモリと前記第２メモリとを使用する前記第１データの処理を、前記内部メモリを使用する処理に切り替える制御を行う切替制御部と、を備える、
情報処理装置。
【請求項１６】
コンピュータに、
処理装置によって処理される第１データの少なくとも一部を記憶する第１メモリのうち、少なくともデータの内容の保持に必要な第１電力が供給される領域を示す１以上の有効領域より大きいサイズの前記第１データを処理するための期間内の一定期間において、前記第１メモリに記憶されたデータを示す第２データのうち少なくとも一部を、前記第１データの一部を記憶する第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための処理量を示す処理情報が閾値以下になるよう、前記有効領域の数を変化させる領域制御ステップを実行させるためのプログラム。
【請求項１７】
前記第２メモリは、データを保持するための電力が前記第１メモリよりも低い、
請求項１６に記載のプログラム。
【請求項１８】
前記第１メモリのうち前記有効領域以外の領域を示す無効領域に供給される第２電力は前記第１電力よりも低い、
請求項１６に記載のプログラム。
【請求項１９】
前記領域制御ステップは、前記処理情報が前記閾値以下となる範囲で前記処理量を増やすことで、前記第１処理を行うために必要な前記有効領域の数を減らし、不要な前記有効領域に供給する電力を、前記第１電力から、前記第１電力よりも低い第２電力に変更する制御を行う、
請求項１６に記載のプログラム。
【請求項２０】
前記閾値は、前記一定期間中において、何れか１つの前記有効領域に供給する電力を、前記第１電力から、前記第１電力よりも低い第２電力に変更して前記有効領域の数を１つ減らした場合に削減される電力量を表し、
前記処理情報は、前記有効領域の数を１つ減らした場合に前記一定期間中に増加する前記処理量に伴って発生する電力量であり、
前記領域制御ステップは、
前記処理情報が前記閾値以下になる範囲で、何れか１つの前記有効領域に供給する電力を前記第１電力から前記第２電力へ変更する制御を繰り返し実行する、
請求項１６に記載のプログラム。
【請求項２１】
第２処理情報は、前記一定期間において、前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理に要する時間を表し、
第３処理情報は、前記有効領域の数を１つ減らした場合に前記一定期間中に増加する前記処理量に伴って発生する電力量を表し、
前記領域制御ステップは、
前記第２処理情報が第２閾値以下で、かつ、前記第３処理情報が第３閾値以下になる範囲で、何れか１つの前記有効領域に供給する電力を前記第１電力から前記第２電力へ変更する制御を繰り返し行う、
請求項１６に記載のプログラム。
【請求項２２】
前記領域制御ステップは、前記処理情報が前記閾値よりも小さい第４閾値以下の場合、何れか１つの前記有効領域に供給する電力を、前記第１電力から前記第１電力よりも小さい第２電力に変更して前記有効領域の数を減らし、該有効領域に記憶されたデータを前記第２メモリへ移動する制御を行う、
請求項１６に記載のプログラム。
【請求項２３】
前記処理情報を元に、前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理を、前記第２データのうち少なくとも一部を、前記第１メモリから、データの読み書きの速度を示すアクセス速度が前記第２メモリよりも低い第３メモリへ移動し、かつ前記第３メモリに記憶された前記第３データのうち少なくとも一部を前記第１メモリへ移動するための第２移動処理に置き換えた場合の処理量を示す第４処理情報を算出する算出ステップと、
前記第４処理情報が前記閾値よりも小さい場合、前記第１メモリと前記第２メモリとを使用する前記第１データの処理を、前記第１メモリと前記第３メモリとを使用する処理に切り替える制御を行う切替制御ステップと、を含む、
請求項１６に記載のプログラム。
【請求項２４】
前記領域制御ステップは、前記処理情報が第４閾値以下の場合、前記有効領域の数を減らす制御を行い、
前記第４閾値は前記閾値よりも小さい、
請求項１６に記載のプログラム。
【請求項２５】
前記領域制御ステップは、前記処理情報が前記第４閾値よりも小さい場合、何れかの前記有効領域に供給される電力を、前記第１電力よりも低い第２電力とすることで、該有効領域を、前記第２電力が供給される領域を示す無効領域へ変化させる制御を行い、
前記有効領域から前記無効領域へ変化させる順番は予め定められている、
請求項２４に記載のプログラム。
【請求項２６】
前記処理情報に応じて、前記第１メモリを動作させるためのクロック周波数を変化させる制御を行う周波数制御ステップを含む、
請求項１６に記載のプログラム。
【請求項２７】
アプリケーションから、前記第１データに含まれる第４データの読み書きが要求された場合に、前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理を実行し、前記アプリケーションから、前記第１データに含まれるデータであって、前記第４データに比べて高速な処理が要求される第５データの読み書きが要求された場合に、前記移動処理を前記アプリケーションに実行させる制御を行う移動処理制御ステップを含む、
請求項１６に記載のプログラム。
【請求項２８】
前記第１データは、
前記第２メモリに対して直接読み書きを行うデータを示す１以上の第６データと、
前記第２データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための移動処理を介して読み書きを行うデータを示す１以上の第７データと、を含み、
前記領域制御ステップは、前記第７データの数に応じて、前記有効領域の数を決定する、
請求項１６に記載のプログラム。
【請求項２９】
第１データを処理する第１処理装置、または、複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコルを保証するインターコネクトを介して前記第１処理装置と接続され、第８データを処理する第２処理装置に、
前記第１データを処理するための期間内の一定期間において、前記第１データの少なくとも一部を記憶する第１メモリに記憶されたデータを示す第２データのうち少なくとも一部を、前記第１データの一部を記憶する第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を前記第１メモリへ移動するための処理量を示す第１処理情報と、前記第８データを処理するための期間内の一定期間において、前記第８データの少なくとも一部を記憶する第３メモリに記憶されたデータを示す第９データのうち少なくとも一部を、前記第８データの一部を記憶する第４メモリへ移動し、かつ前記第４メモリに記憶されたデータを示す第１０データのうち少なくとも一部を前記第３メモリへ移動するための処理量を示す第５処理情報と、の合計が閾値以下の場合は、前記第１データの処理を前記第２処理装置に実行させる制御を行う処理制御ステップを実行させるためのプログラム。
【請求項３０】
コンピュータに、
処理装置によって処理される第１データの少なくとも一部を記憶する第１メモリのうち少なくともデータの内容の保持に必要な第１電力が供給される１以上の領域を示す有効領域より大きいサイズの前記第１データの処理を、前記第１メモリの代わりに、前記処理装置内部のメモリを示す内部メモリのうちデータの読み書きに利用することができる１以上の領域を示す第２有効領域を利用する処理に切り替えた場合に、前記第１データを処理するための期間内の一定期間において、前記第２有効領域に記憶されたデータを示す第１１データのうち少なくとも一部を前記第２メモリへ移動し、かつ前記第２メモリに記憶されたデータを示す第１２データのうち少なくとも一部を前記内部メモリへ移動するための第処理量を示す第６処理情報が閾値以下になるのであれば、前記第１メモリと前記第２メモリとを使用する前記第１データの処理を、前記内部メモリを使用する処理に切り替える制御を行う切替制御ステップを実行させるためのプログラム。 
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置およびプログラムに関する。
【背景技術】
【０００２】
従来、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメインメモリに載りきらないデータを、メインメモリとは別のストレージ（例えばＨＤＤやＳＳＤ等）内に確保された領域（スワップファイルなどと称する場合がある）に記憶し、メインメモリからスワップ領域へページを移動する処理（ページアウト）と、スワップ領域からメインメモリへページを移動する処理（ページイン）とからなるスワップ処理（データ移動処理）を実行しながらアプリケーションを動作させる技術が知られている。
【０００３】
上記スワップ処理が発生するとアプリケーションの速度性能が大幅に低下する、あるいは、不安定になる(予測しづらくなる)ため、極力スワップ処理が発生しないように大容量のメモリを搭載しメインメモリのサイズを十分に確保するシステム設計がなされることが一般的である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−３０７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、少なくとも記憶されたデータの内容を保持するのに必要な電力が大規模なメインメモリの全領域に供給され続けるために、メインメモリの省電力化を図ることは困難であった。一方、省電力化を優先してメインメモリのサイズを低減すると、今度はプロセッサ上で動作するアプリケーションの速度性能が大幅に低下するという問題が起こる。すなわち、従来においては、プロセッサ上で動作するアプリケーションの速度性能を担保しつつ省電力化を図ることは困難であった。
【課題を解決するための手段】
【０００６】
実施形態の情報処理装置は、処理装置と第１メモリと第２メモリと領域制御部とを備える。処理装置は、第１データを処理する。第１メモリは、第１データの少なくとも一部を記憶する。第２メモリは、第１データの一部を記憶する。有効領域は、第１メモリのうち、少なくともデータの内容の保持に必要な第１電力が供給される領域である。領域制御部は、１以上の有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、第１メモリに記憶されたデータを示す第２データのうち少なくとも一部を第２メモリへ移動し、かつ第２メモリに記憶されたデータを示す第３データのうち少なくとも一部を第１メモリへ移動するための処理量を示す処理情報が閾値以下になるよう、有効領域の数を変化させる。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態の情報処理装置の構成の一例を示す図。
【図２】変形例の情報処理装置の構成の一例を示す図。
【図３】第１の実施形態の具体例を説明するための図。
【図４】第１の実施形態の情報処理装置が有するソフトウェアを示す図。
【図５】第１の実施形態のスワップ処理のオーバヘッドを説明するための図。
【図６】第１の実施形態の情報処理装置の動作例を示す図。
【図７】第１の実施形態の情報処理装置の動作例を示す図。
【図８】変形例の情報処理装置の構成の一例を示す図。
【図９】第２の実施形態の情報処理装置の構成の一例を示す図。
【図１０】第２の実施形態の情報処理装置が有するソフトウェアを示す図。
【図１１】第２の実施形態の具体例を説明するための図。
【図１２】第２の実施形態の具体例を説明するための図。
【図１３】第２の実施形態の具体例を説明するための図。
【図１４】第２の実施形態の情報処理装置の動作例を示す図。
【図１５】第３の実施形態の第１メモリの構成を示す図。
【図１６】第３の実施形態の具体例を説明するための図。
【図１７】第４の実施形態の情報処理装置が有するソフトウェアを示す図。
【図１８】第４の実施形態の具体例を説明するための図。
【図１９】第４の実施形態の具体例を説明するための図。
【図２０】第４の実施形態の情報処理装置の動作例を示す図。
【図２１】第５の実施形態の情報処理装置の構成の一例を示す図。
【図２２】第５の実施形態の情報処理装置が有するソフトウェアを示す図。
【図２３】第５の実施形態の具体例を説明するための図。
【図２４】第５の実施形態の情報処理装置の動作例を示す図。
【図２５】第６の実施形態の情報処理装置が有するソフトウェアを示す図。
【図２６】第６の実施形態のページテーブルを説明するための図。
【図２７】変形例の情報処理装置の構成の一例を示す図。
【図２８】変形例の概要を説明するための図。
【図２９】変形例の概要を説明するための図。
【図３０】第６の実施形態の効果を説明するための図。
【図３１】第６の実施形態のページ番号のリストを示す図。
【図３２】第７の実施形態の情報処理装置の構成の一例を示す図。
【図３３】第７の実施形態の情報処理装置が有するソフトウェアを示す図。
【図３４】第７の実施形態の情報処理装置の動作例を示す図。
【図３５】第７の実施形態の情報処理装置の動作例を補足するための図。
【図３６】第７の実施形態の情報処理装置の動作例を示す図。
【図３７】変形例の情報処理装置の構成の一例を示す図。
【図３８】第８の実施形態の情報処理装置の構成の一例を示す図。
【図３９】第８の実施形態のページテーブルを説明するための図。
【図４０】変形例の情報処理装置の構成の一例を示す図。
【発明を実施するための形態】
【０００８】
以下、添付図面を参照しながら、本発明に係る情報処理装置およびプログラムの実施形態を詳細に説明する。
【０００９】
（第１の実施形態）
具体的な内容を説明する前に、従来技術と併せて本実施形態の概要を説明する。コンピュータシステムでは、大規模なデータ処理をするアプリケーション向けに大容量のメモリ空間（アドレス空間）を提供することが必要である。Ｌｉｎｕｘ（登録商標）などのＯＳ（オペレーティングシステム）の仮想記憶(Ｖｉｒｔｕａｌ  Ｍｅｍｏｒｙ)方式のスワップ処理を利用すれば、メインメモリ（例えばＤＲＡＭ)のサイズより大きな仮想アドレス空間をアプリケーション（プロセス）に提供することができ、ＯＳはＤＲＡＭから構成されるメインメモリ(物理メモリ)に収まらないメモリサイズ（データが格納される領域）が必要なアプリケーションを動作させることができる。
【００１０】
ＯＳの仮想記憶システムでは、アプリケーションが指定する仮想アドレスを物理アドレス(メモリの位置を示す情報)にマッピングする（割り当てる）。マッピングはＯＳが管理するページ単位(以下、単に「ページ」と呼ぶ)で対応関係を記憶するページテーブルを利用して行われる。仮想記憶システムのスワップ処理機構が提供するスワップ処理では、メインメモリにマッピングされてないページ(ＤＲＡＭ上に存在しないページ)をＨＤＤやＳＳＤ(Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ)などのメインメモリとは異なるストレージ内に確保された領域（「スワップ領域」）に保存し、上述したスワップ処理を実行しながらアプリケーションを動作させる。このように、スワップ領域が確保されるデバイスであるスワップデバイスとしてＨＤＤ（Hard  Disk  Drive）やＳＳＤ(Solid  State  Drive)などのデバイスを利用してスワップ処理を活用することで、ＤＲＡＭから構成されるメインメモリと合わせて、アプリケーションが処理するデータが記憶される領域として（処理を行うためのワーキングエリア（作業領域）として）、大きい高速なメインメモリがあるように見せることが可能になる。
【００１１】
しかし、ＳＳＤやＨＤＤなどのストレージデバイスでは、データの読み書きの速度を示すアクセス速度（アクセスレイテンシ）が遅いため、これらをスワップデバイスとして利用した場合、上述のスワップ処理（スワップデバイスからメインメモリへデータを転送し、メインメモリからスワップデバイスへデータを転送する処理）が発生すると、メインメモリとＳＳＤとの間のデータ転送、または、メインメモリとＨＤＤとの間のデータ転送によりアプリケーションの速度性能が大幅に低下するという問題が起こる。この問題を解決するために、メインメモリとスワップデバイスとの間の無駄なデータ転送を抑制することで性能低下を防止することが考えられてきた。また、スワップ処理が発生するとアプリケーションの速度性能が不安定になる(予測しづらくなる)ため、極力スワップ処理が発生しないようにメインメモリのサイズを十分に確保するシステム設計がなされることが一般的である。
【００１２】
また、このような大規模なデータ処理をするアプリケーションが実行されるクラウドやデータセンターなどのサーバシステムや、あるいは高性能化が進むスマートフォンなどのモバイルシステムに至る幅広いコンピュータシステムにおいて、低消費電力化は重要な課題である。これらのシステムの省電力化のためには、メインメモリに利用するＤＲＡＭの消費電力を削減することが特に重要である。
【００１３】
そこで、本実施形態では、ＭＲＡＭやＰＣＭや３Ｄ  ＸＰｏｉｎｔやＲｅＲＡＭなどの大容量高速不揮発メモリの高速性を活かして、アプリケーションを高速にかつ低消費電力で実行するために積極的にスワップ処理を活用する新しい仮想記憶方式を提供する。詳細は後述するが、本実施形態では、コンピュータシステム(ＯＳやアプリケーション)で利用可能なＤＲＡＭ（メインメモリ）の容量を動的に小さくし、ＤＲＡＭのうちページがマッピングされていない領域（アプリケーションのワーキングエリアとして利用されていない領域）をパワーオフする（電力供給を停止する）ことでセルフリフレッシュなどの低消費電力モードを利用する場合よりさらに待機電力を削減する。これにより、ＤＲＡＭを搭載するサーバやスーパコンピュータなどの高性能システム、スマートフォンやタブレットやウェアラブルコンピュータや車載システムやＩｏＴ／Ｍ２Ｍ向けの組み込みシステムなどのコンピュータシステム／情報処理装置を省電力化することができる。また、後述の他の実施形態でも説明するように、ＤＲＡＭを完全にシステムから除外することで、より省電力なシステムを構築することもできる。
【００１４】
また、スワップデバイスとして、特許文献１に記載されているＳＣＭなどとも呼ばれる、ＤＲＡＭ（メインメモリ）と同等あるいは少し速度は遅いが、ＳＳＤやＨＤＤなどのストレージよりは高速で、かつ、ＤＲＡＭより大容量な大容量高速不揮発メモリ(Ｎｏｎ−ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ、以下、「ＮＶＭ」と称する）を利用すると、スワップ処理のデータ転送を高速に行うことができるので、ある程度までは積極的にスワップ処理を行っても、アプリケーションの速度性能は急激に低下することはない。本実施形態では、この大容量高速不揮発メモリを利用して、速度性能を維持しつつ省電力化が可能なコンピュータシステムを構築する。
【００１５】
以下、本実施形態の具体的な内容を説明する。図１は、本実施形態の情報処理装置１のハードウェア構成の一例を示す図である。図１に示すように、情報処理装置１は、プロセッサ１０と、第１メモリ２０と、第２メモリ３０とを備える。
【００１６】
プロセッサ１０は、「処理装置」の一例であり、各種の処理を実行するための装置である。この例では、プロセッサ１０は、Ｉｎｔｅｌ  ＸＥＯＮプロセッサなどのプロセッサであり、複数のプロセッサコア１０１を有する（説明の便宜上、図１では１つのプロセッサコア１０１のみを表示）。それぞれのプロセッサコア１０１は、Ｌ１データキャッシュ、Ｌ１命令キャッシュ、Ｌ２キャッシュなどのプライベートキャッシュを有している（不図示）。また、例えばＬ３キャッシュなどのキャッシュ階層における最下位に位置するキャッシュであるラストレベルキャッシュ（ＬＬＣ）を各プロセッサコア１０１で共有するシェアドキャッシュとして有している。以下では、このような構成を前提として説明するが、これに限られるものではなく、例えばシングルプロセッサシステムで構成されてもよい。
【００１７】
また、プロセッサ１０は、第１メモリコントローラ１０２（この例ではＤＲＡＭコントローラ）を内包しており、これを介して第１メモリ２０（この例ではＤＲＡＭ）が接続(メモリバス接続)されている。また、プロセッサ１０１はＩ／Ｏコントローラ１０３(Ｉ／Ｏアダプタ)を内包しており、これを介して第２メモリ３０（この例ではＮＶＭ）が接続(Ｉ／Ｏバス接続)されている。なお、これに限らず、例えば図２のように、プロセッサ１０が第２メモリメモリコントローラ１０４（この例ではＮＶＭコントローラ）を内包しており、これを介して第２メモリ３０が接続(メモリバス接続)されていてもよい。いずれの場合でも、第１メモリ２０と第２メモリ３０の間のデータ転送は、プロセッサコア１０１が行ってもよいし、データ転送専用ハードウェア（ＤＭＡコントローラ）が行ってもよい。第２メモリ３０とプロセッサ１０の接続方法や、第２メモリ３０の実装形態は任意である。
【００１８】
第１メモリ２０は、メインメモリ（主記憶装置）として機能し、プロセッサ１０は、第１メモリ２０上のデータを直接読み書きする。例えば、プロセッサ１０上で動作する任意のアプリケーション（プロセス、説明の便宜上「第１処理」と称する）が処理するデータ（任意のサイズのデータの集合であると考えてもよい）を「第１データ」と称すると、プロセッサ１０は、第１データを処理する。より具体的には、プロセッサ１０は、第１データを処理する第１処理を実行する。第１メモリ２０は、第１データの少なくとも一部を記憶するメモリであり、この例ではＤＲＡＭで構成される。
【００１９】
第１メモリ２０は、ＤＲＡＭチップを搭載した複数のＤＩＭＭ（電力の供給単位となる領域（電源単位領域））で構成されている。ＤＩＭＭは複数のランク(ランクは複数のバンクから構成される)から構成される。以下では、第１メモリ２０がセルフリフレッシュモードなどの低消費電力モードやパワーオフ(電力の供給が停止)されている状態を、低消費電力状態と呼ぶことがある。低消費電力状態の設定は、ＤＩＭＭ単位やランク単位やバンク単位などの単位で可能であり細かく制御できる。第１メモリ２０はＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などのメインメモリ用の高速不揮発メモリで一部あるいは全部置き換えられてもよい。
【００２０】
第２メモリ３０は、スワップ領域が確保されるメモリであり、この例ではＮＶＭで構成される。第２メモリ３０は、上述の第１データの一部を記憶するメモリであると考えることができる。ＮＶＭなどで構成される第２メモリ３０は、プロセッサ１０と接続された大容量高速不揮発メモリ（あるいは大容量低消費電力メモリ）である。一般的に、ＮＶＭは、そのアクセス速度（データの読み書きの速度）はＤＲＡＭと同等程度または少し遅いが、ＤＲＡＭより大容量(ＤＲＡＭと同等程度の容量であってもよい)で、かつ、不揮発性なので待機電力はゼロか非常に低いメモリである。第２メモリ３０であるＮＶＭは、例えばＭＲＡＭで構成されてもよいし、ＰＣＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、３Ｄ  ＸＰｏｉｎｔ、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、Ｍｅｍｒｉｓｔｏｒなどで構成されてもよいし、以上に限られるわけではない。第２メモリ３０として想定しているメモリは、アクセス速度が１０ｎｓ〜数μｓ程度であり、かつ、データを保持するための電力が第１メモリ２０よりも低いメモリであるが（典型的には不揮発メモリであるが、これに限らず揮発性メモリであってもよい）、例えばアクセス速度は、１０ｎｓ〜数μｓよりも速くてもよいし遅くてもよい。また、第２メモリ３０はバイトアドレッサブルなメモリであってもよいし、それより大きい単位でデータの読み書き（アクセス）が行われるメモリであってもよい。
【００２１】
第２メモリ３０（第２メモリ３０の一部あるいは全部）はＬｉｎｕｘなどのプロセッサ１０上で動作するＯＳ（オペレーティングシステム）の仮想記憶方式のスワップ処理で利用されるスワップデバイス（スワップ領域が確保されるデバイス）として使われる。よって、アクセス（データの読み書き）が要求されたデータを示す対象データが第２メモリ３０に存在する場合は、プロセッサ１０上で動作するＯＳの仮想記憶方式のスワップ処理により第１メモリ２０上のページ（スワップ処理の単位となるサイズのデータ）を第２メモリ３０へ転送し、第２メモリ３０上の対象データを含むページを第１メモリ２０へ転送した後、第２メモリ３０から転送された該ページに対する読み書きが行われる。なお、上記の第１メモリ２０から第２メモリ３０への転送と、第２メモリ３０から第１メモリ２０への転送の順番やタイミングは任意であってよい。例えば、第２メモリ３０上の対象データを含むページが必要になった時にすぐに第１メモリ２０へ転送できるように、その前の任意のタイミングで最近使用されてない第１メモリ２０上の複数のページをまとめて第２メモリ３０へ転送しておき第１メモリ２０を空けておくように実装されても良い。これは、以降でも同じである。
【００２２】
以上の構成の情報処理装置１において、第２メモリ３０（この例ではＮＶＭ）の高速性を活かしてＯＳやアプリケーションで使用可能な第１メモリ２０のうち、少なくともデータの内容の保持に必要な第１電力が供給される領域を示す１以上の有効領域の数を動的に変化させる（第１メモリ２０のうちデータの読み書きが可能な領域のサイズを動的に変化させる）。ここでは、第１メモリ２０のうち有効領域以外の領域を「無効領域」と称し、無効領域に供給される第２電力は第１電力よりも低い（例えばパワーオフされてゼロであってもよい）。有効領域の数が減ると（有効なＤＲＡＭの容量が減ると）、少ない数の有効領域をワーキングエリアとしてアプリケーションを実行する必要があるため、スワップ処理の回数が増加する。スワップ処理の回数が増加すると、アプリケーションの性能は低下するが、第２メモリ３０の高速性によりＨＤＤやＳＳＤをスワップデバイスとして利用する場合に比べて性能低下は緩やかになる。そのため、性能低下が許容される範囲まで積極的に有効領域の数を減らす（有効なＤＲＡＭの容量を減らす）ことで、セルフリフレッシュなどのデータの内容を保持するためなどに掛かる第１メモリ２０の消費電力を削減して省電力化を図ることができる。
【００２３】
次に、図３などを用いて一例を説明する。前提として、プロセッサ１０上で動作しているアプリケーションは、第１メモリ２０のうち第１電力が供給される領域３（有効領域となる領域３）と、ＯＳの仮想記憶が提供する第２メモリ３０上のスワップ領域と、をワーキングエリアとして利用して動作している（図３の第１状態）。図３の例では、アプリケーションを動作させるために必要なメモリサイズは、領域３のサイズよりも大きい。言い換えれば、アプリケーション（第１処理）が処理するデータを示す第１データのサイズ（アプリケーションが処理する全てのデータの合計サイズ）は、領域３のサイズよりも大きい。そのため、アプリケーションの動作中に、読み書きが要求されたデータ（対象データ）が領域３に存在せずに第２メモリ３０に存在する場合、領域３に含まれるページの中から、利用されてから所定値以上の時間が経過したページなどが選択され、その選択されたページが第２メモリ３０へ追い出され、第２メモリ３０のうち対象データを含むページが第１メモリ２０へ転送されるスワップ処理が行われる。つまり、第１メモリ２０の領域３と第２メモリ３０との間でページの入れ替えが行われる。
【００２４】
なお、ここでは、説明の便宜上、第１メモリ２０を３つの領域に分けているが、これに限られるものではなく、第１メモリ２０は任意の数のＤＩＭＭやランクやバンクなどの領域（電源単位領域）から構成されている。同様に、ここでは、有効な（ＯＳやアプリケーションから利用可能な）第１メモリ２０の容量の初期値を第１メモリ２０全体のサイズの１／３（言い換えれば、有効領域の数の初期値を第１メモリ２０に含まれる電源単位領域の全体の数の１／３）としたが、初期値は任意であり、例えば最初に利用可能にする第１メモリ２０のサイズ（有効領域の数）は第１メモリ２０全体のサイズの１／１０であってもよいし、アプリケーションを動作させるのに必要なサイズ（例えば確保するメモリサイズ）の１／１０などであってもよい。
【００２５】
領域３に供給される電力（第１電力）は、メモリアクセスが可能な電力（少なくともデータの内容の保持に必要な電力）に設定されており、図３の第１状態において、第１メモリ２０のうちＯＳやアプリケーションが利用可能な領域は領域３だけであり、領域１および領域２の各々に供給される電力は、第１電力よりも低い第２電力（典型的にはゼロ）に設定されている。領域１および領域２の各々は、ＯＳやアプリケーションからは利用不可能な状態である。
【００２６】
また、前提として、ＯＳには閾値（ｔｈｒｅｓｈｏｌｄ）が設定されている。この閾値は、第２メモリ３０をスワップデバイスに利用し、スワップ処理を積極的に行ってアプリケーションを実行した場合の実行時間の性能劣化の許容範囲の基準を示す値である。閾値は、例えば、情報処理装置１上で動作するアプリケーションが指定した値で、十分に大きいメモリサイズの第１メモリ２０が存在し、第１メモリ２０のみでアプリケーションを実行したと仮定した場合の実行時間に対して、それよりもサイズが小さい第１メモリ２０とスワップ領域とをワーキングエリアとして利用してスワップ処理を行いながらアプリケーションを実行した場合の実行時間が劣化する許容範囲の基準を示す値である。つまり、閾値は、第１データを処理する第１処理を第１メモリ２０のみで実行した場合の全体あるいは一部の実行時間を示す第１実行時間に対する、第１処理を第１メモリ２０と第２メモリ３０を利用して実行（要するにスワップ処理を行って実行）した場合の全体あるいは一部の実行時間を示す第２実行時間の劣化の度合いの許容範囲を示す基準値である。例えば、第１実行時間Ｔに対して、１割の性能劣化まで許可する場合は、閾値はＴ×０．１などと設定される。また、例えば、第１処理を実行中の一定期間Ｔに対して、１割の性能劣化まで許容する場合は、閾値はＴ×０．１などと設定される。この閾値は、情報処理装置１上で動作するアプリケーション毎に設定可能になっていてもよいし、すべてのアプリケーション（プロセス）で同じ値に設定可能になっていてもよい。また、この閾値は、アプリケーションにより指定可能になっていてもよいし、ＯＳで予め決められた値を使用してもよいし、これに限定されるわけではない。
【００２７】
以下、有効領域の数を少なくして（有効な第１メモリ２０のサイズを小さくして）低消費電力化を実現するための情報処理装置１の処理を説明する。図４は、情報処理装置１が有するソフトウェアの構成の一例を示す図であり、プロセッサ１０が実行するソフトウェア（プログラム）として、アプリケーションとＯＳが存在する。ＯＳとは、情報処理装置１が備えるハードウェア資源を制御する機能を提供するための基本プログラムである。例えばＬｉｎｕｘなどである。また、アプリケーションとは、ＯＳを利用して、特定の機能を提供するためのプログラムであり、その種類は任意である。プロセッサ１０（プロセッサコア１０１）が、ＯＳやアプリケーションを実行することにより、各種の機能を実現することができる。ここでは、ＯＳは、アプリケーションから、該アプリケーションが処理するデータ（処理対象のデータ）のアクセス要求（データの読み出し要求または書き込み要求）を受け付け、その受け付けたアクセス要求に応じた制御を行う。
【００２８】
図４に示すように、ＯＳは、領域制御部１１０を有する。言い換えれば、領域制御部１１０の機能がＯＳにより提供される。上述したように、有効領域は、第１メモリ２０のうち、少なくともデータの内容の保持に必要な第１電力が供給される領域である。領域制御部１１０は、１以上の有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、第１メモリ２０に記憶されたデータを示す第２データのうち少なくとも一部を第２メモリ３０へ移動し、かつ第２メモリ３０に記憶されたデータを示す第３データのうち少なくとも一部を第１メモリ２０へ移動するための処理量を示す処理情報が閾値以下になるよう、有効領域の数を変化させる。なお、「第１データを処理するための期間」とは、第１データを処理中（アプリケーションが動作中）の期間であると考えてもよいし、第１データを処理するための契機が発生してから第１データの処理が完了するまでの期間であると考えてもよい。また、第１データを処理するための期間とは、第１データを処理する第１処理(プロセス)を実行するための期間であると考えてもよい。また、以下の説明では、第１メモリ２０に記憶されたデータを示す第２データ（ページ単位のデータ）のうち少なくとも一部を第２メモリ３０へ移動し、かつ第２メモリ３０に記憶されたデータを示す第３データ（ページ単位のデータ）のうち少なくとも一部を第１メモリ２０へ移動するための処理を「スワップ処理(移動処理)」と称する。この例では、スワップ処理は、第１データのうち読み書きが要求されたデータ（対象データ）が第２メモリ３０に存在する場合に発生し、第１メモリ２０に含まれるページのうち、利用されてから所定値以上の時間が経過したページや利用されてからの経過時間が他のページと比較して長いページなどが第２データとして第２メモリ３０へ追い出され、第２メモリ３０のうち対象データを含むページが第３データとして第１メモリ２０へ転送される。
【００２９】
上記処理情報は、一定期間内に発生する１以上のスワップ処理（移動処理）に要する時間を示す情報であり、１回あたりのスワップ処理に要する時間（以下、「オーバヘッド」と称する場合がある）は、第１メモリ２０と第２メモリ３０との間でのデータ転送（第２データおよび第３データの各々の転送）に要する時間（以下、「データ転送時間」と称する場合がある）と、スワップ処理に関してＯＳが実行する処理に要する時間（以下、「ＯＳ処理時間」と称する場合がある）と、の合計である。ＯＳ処理時間とは、ＯＳのコンテキストスイッチ処理や、Ｉ／Ｏコントローラ１０３のデバイスドライバの処理や、どのページを第２メモリ３０へ転送するかなどを決定する処理や、ＯＳのページテーブルでマッピングを参照または変更する操作など、データ転送時間以外のスワップ処理に要する時間の合計である。このＯＳ処理時間に何が含まれるかは、実装次第で様々であり、例えばＯＳのコンテキスト処理が発生しないようにも実装できるので列挙したすべてが必ずしも含まれるわけではないのは言うまでもなく、ここでは一例を列挙しただけに過ぎず、これらのみに限定されるわけではない。ここでは、上記処理情報は、一定期間内に発生する１以上のスワップ処理ごとのオーバヘッドの合計を示すスワップ処理オーバヘッドで表される。この例では、領域制御部１１０は、上述の処理情報が閾値よりも大きい場合は、有効領域の数を増加させる制御を行う。
【００３０】
本実施形態では、図４に示すように、領域制御部１１０は、監視部１１１と、判定部１１２と、有効領域変更部１１３と、電力設定部１１４と、マッピング変更部１１５と、を有する。監視部１１１は、アプリケーションが動作中の一定期間において発生する第１メモリ２０と第２メモリ３０との間のスワップ処理を監視する。判定部１１２は、監視部１１１により監視された１以上のスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが閾値よりも大きいか否かを判定する。
【００３１】
有効領域変更部１１３は、判定部１１２によりスワップ処理オーバヘッドが閾値よりも大きいと判定された場合、有効領域の数を変更する。より具体的には、有効領域変更部１１３は、有効領域の数を「１」だけ増加させる制御を行う。この例では、有効領域変更部１１３は、電力設定部１１４に対して、第１メモリ２０に含まれる複数の電源単位領域のうち第２電力が供給される電源単位領域を示す１以上の無効領域の何れかに供給する電力を、第２電力から第１電力に変更することを指示する。この指示を受けた電力設定部１１４は、何れかの無効領域に供給する電力を第２電力から第１電力に変更する。いま、図３に示す第１状態において、判定部１１２によりスワップ処理オーバヘッドが閾値よりも大きいと判定された場合を想定する。この場合、有効領域変更部１１３は、電力設定部１１４に対して、領域２に供給される電力を第２電力から第１電力へ変更することを指示する。この指示を受けた電力設定部１１４は、領域２に供給する電力を第２電力から第１電力に変更する（図３に示す第２状態）。これにより、有効領域の数は「１」だけ増加することになる。有効領域の数が増えることで（有効な第１メモリ２０の容量が増えることで）、スワップ処理の発生頻度が減り、スワップ処理オーバヘッドも減る。なお、一度に増加する有効領域の数は「１」だけに限定されるわけではなく、任意の数であってもよい。
【００３２】
マッピング変更部１１５は、後述するように有効領域の数を減らす場合に、対象となる有効領域（無効領域に変化させる対象となる有効領域）にマッピングされたページを、他の有効領域または第２メモリ３０に移動させ、さらにページの移動に合わせて、アプリケーションが指定する仮想アドレスと物理アドレス(メモリの位置を示す情報)との対応関係をページ単位で示すページテーブルを変更する。
【００３３】
ここで、図５を用いて、監視部１１１が監視するオーバヘッドについて説明する。上述したように、監視部１１１は、アプリケーションが動作中の一定期間において発生する１以上のスワップ処理を監視し、スワップ処理ごとのオーバヘッドを求める。図５に示すように、スワップ処理１回分のオーバヘッドは、データ転送時間とＯＳ処理時間の合計である。
【００３４】
例えばデータ転送時間が１０μｓで、ＯＳ処理時間が１００μｓである場合、スワップ処理１回分のオーバヘッドは１１０μｓとなる。データ転送時間やＯＳ処理時間の値は、スワップ処理が発生するたびにＯＳ（監視部１１１）が測定して合計値を求めてもよいし、計算で求めた近似値などを利用してもよい。計算に必要な値は予めＯＳに設定されていてもよい。例えば、ＯＳのインストール時や起動時などアプリケーションを実行する前の任意のタイミングでスワップ処理に掛かるデータ転送時間とＯＳ処理時間を一度事前に測定（予め測定）してもよい。そして、一定期間中のスワップ処理の回数のみを観測し、スワップ回数がＮで、各スワップ処理のデータ転送時間が同じ(１０μｓとＯＳに設定されている)で、かつ、各スワップ処理のＯＳ処理時間も同じ(１００μｓとＯＳに設定されている)であると仮定した場合は、一定期間中のスワップ処理オーバヘッドは、Ｎ×(１００μｓ＋１０μｓ)などとして算出することもできる。
【００３５】
なお、閾値と上記処理情報の形態は上述した内容に限られない。閾値は、それ以上スワップ処理が増えるとアプリケーションやシステムの性能の低下が大きくなることを判断するための基準値であればよい。また、上記処理情報は、上記一定期間内に発生したスワップ処理の回数を示す情報であってもよい。この場合、スワップ処理の回数Ｎと、ＯＳに予め設定されている閾値（この場合はスワップ処理の回数の上限値）との比較を行う。また例えば、上記処理情報は、上記一定期間中に発生するデータ転送量（一定期間におけるデータ転送量の累積値）であってもよい。その場合には、観測されるデータ転送量と、ＯＳに予め設定されている閾値（データ転送量の上限値）との比較を行う。また、スワップ処理オーバヘッドやスワップ処理の回数やデータ転送量などは、一つのアプリケーションを対象に観測したものでもよいし、システム全体（同時にプロセッサ上で動作する複数のアプリケーションやプロセスの区別をしない）を対象に観測したものでもよい。アプリケーションに依ってもワーキングセットのサイズやアクセス量によって上記処理情報は異なるので、アプリケーションに応じて第１メモリ２０の有効領域の数を変化させる。つまり第１アプリケーションを実行させている時と第２アプリケーションを実行させている時では第１メモリ２０の有効領域の数（つまりは無効領域の数）が変化することが観測でき、さらにその時の実行時間の低下は所定値以下に抑えられている。データセンターなどでは常にワークロード（実行中のアプリケーションの数や組み合わせ）が変動するので、ワークロードに対応して第１メモリ２０の有効領域の数を変化させることが重要である。要するに、上記処理情報は、スワップ処理（移動処理）の処理量を示す情報であればよい。
【００３６】
閾値は、それ以上スワップ処理が増えるとアプリケーションやシステムの性能の低下が大きくなることを判断するための基準値であればよく、システムの性能は消費電力も含まれるのは言うまでもない。第１メモリ２０の有効領域を減らしてパワーオフすると第１メモリ２０の待機電力を減らせる一方で、スワップ処理（移動処理）の処理量は増えるのでそれに伴い第１メモリ２０へのアクセスに掛かる電力量と、第２メモリ３０へのアクセスに掛かる電力量は増える。つまり、第１メモリ２０の有効領域を１つずつ減らしていく場合は、第１メモリ２０の有効領域を１つ減らしてパワーオフして削減できる電力と、それに伴って増えるメモリアクセスの電力とのトレードオフになる。よって、閾値は、一定期間中に発生する、第１メモリ２０の有効領域を１つ減らして第１電力から第２電力（パワーオフ時の電力）にすることで削減できる電力量であってもよい。上記処理情報は、有効領域を１つ減らすことにより一定期間中に増加するスワップ処理（移動処理）で発生する第１メモリ２０へのアクセスに掛かる電力量と、第２メモリ３０へのアクセスに掛かる電力量の合計である。これらを比較し、閾値以下の場合（つまり第１メモリ２０の有効領域を１つ減らしてスワップ処理を増加させた方が電力を削減できる場合）は、第１メモリ２０の有効領域を１つ減らす。すなわち、上記閾値は、一定期間中において、何れか１つの有効領域に供給する電力を、第１電力から、第１電力よりも低い第２電力に変更して有効領域の数を１つ減らした場合に削減される電力量を表し、上記処理情報は、有効領域の数を１つ減らした場合に一定期間中に増加する処理量（スワップ処理の処理量）に伴って発生する電力量であってもよい。領域制御部１１０は、上記処理情報が上記閾値以下になる範囲で、何れか１つの有効領域に供給する電力を第１電力から第２電力に変更する制御（有効領域の数を１つ減らす制御）を繰り返し実行することができる。なお、上記処理情報である、有効領域を１つ減らした場合に一定期間中に増加するスワップ処理（移動処理）に伴って発生する電力量は、同電力量を減らすように後述する第２メモリ３０に対して直接読み書きを行う処理を第１メモリ２０へ転送して読み書きを行う処理に混在させた際のものであってもよい。
【００３７】
なお、例えば２つの閾値を同時に使用する形態であってもよい。例えば、第２閾値はこれまで説明してきた、一定期間中に許容するスワップ処理のオーバヘッド（時間）で、第３閾値を、第１メモリ２０の有効領域を１つ減らして第１電力から第２電力（パワーオフ時の電力）にすることで削減できる電力量とする。そして、第１メモリ２０の有効領域を１つ減らした時の、第２閾値に関わる第２処理情報が第２閾値以下（つまり速度性能の低下が許容範囲内）で、かつ、第３閾値に関わる第３処理情報が第３閾値以下になるような場合に（つまり増加するスワップ処理による消費電力の増加より、パワーオフすることにより削減できる消費電力の方が大きい場合に）、第１メモリ２０の有効領域を１つ減らすこともできる。つまり、第２処理情報は、一定期間中に発生する移動処理に要する時間（オーバヘッド）を表し、第３処理情報は、有効領域の数を１つ減らした場合に一定期間中に増加する処理量（スワップ処理の処理量）に伴って発生（増加）する電力量を表し、領域制御部１１０は、第２処理情報が第２閾値以下で、かつ、第３処理情報が第３閾値以下になる範囲で、何れか１つの有効領域に供給する電力を第１電力から第２電力へ変更する制御（有効領域の数を１つ減らす制御）を繰り返し実行することもできる。なお、一度に減らす有効領域の数は１だけに限定されるわけでなく、任意の数であってよい。
【００３８】
図６は、情報処理装置１の動作例を示すフローチャートである。各ステップの具体的な内容は上述したとおりである。
【００３９】
図６に示すように、まず領域制御部１１０（監視部１１１）は、上述のスワップ処理オーバヘッドを算出する（ステップＳ４０１）。次に、領域制御部１１０（判定部１１２）は、ステップＳ４０１で算出したスワップ処理オーバヘッドと閾値とを比較する（ステップＳ４０２）。スワップ処理オーバヘッドが閾値よりも大きい場合（ステップＳ４０３：Ｎｏ）、領域制御部１１０（有効領域変更部１１３、電力設定部１１４）は、有効領域の数を増加させる制御を行い（ステップＳ４０４）、ステップＳ４０１以降の処理を繰り返す。一方、スワップ処理オーバヘッドが閾値以下の場合（ステップＳ４０３：Ｙｅｓ）、処理は終了する。
【００４０】
以上は、第１メモリ２０の有効領域の数の初期値（有効な第１メモリ２０の容量の初期値）を、アプリケーションを動作させるために必要な数（例えばアプリケーションがアロケートするメモリサイズに相当する数）より小さい値に設定し、スワップ処理オーバヘッドが閾値を超えてしまう場合に、有効領域の数を動的に増加させていくことを想定していたが、この逆でもよい。具体的には、有効領域の数を動的に小さくしていく（例えば図３の第２状態から第１状態へ変化させていく）。つまり、アプリケーションの性能低下が許容される範囲内で有効領域の数を減らしていくことで、アプリケーションの性能を維持しつつ省電力化を図ることもできる。
【００４１】
つまり、領域制御部１１０は、上述の処理情報が上述の閾値以下となる範囲で有効領域の数を減らす制御を行うこともできる。より具体的には、領域制御部１１０は、上述の処理情報が、上述の閾値よりも小さい第４閾値以下の場合、有効領域の数を減らす制御を行う。上述の第４閾値は、上述のスワップ処理オーバヘッドが上述の閾値よりも十分小さいことを判断するための基準値である。ここで、十分小さいとは、例えばスワップ処理オーバヘッドの値が閾値の１／２以下などの場合などであってもよい。
【００４２】
別の言い方をすると、スワップ処理オーバヘッドが上述の閾値以下となる範囲で、スワップ処理を積極的に増やす（第１メモリ２０上のページを積極的に第２メモリ３０へ追い出す）ことで、第１処理を実行するために必要な第１メモリ２０上の有効領域の数を減らし、パワーオフなどの有効領域の数を減らす制御を行う。積極的に第２メモリ３０へページを追い出すとは、「第１メモリ２０に含まれるページのうち、利用されてから所定値以上の時間が経過されたページを第２データとして第２メモリ３０へ追い出す場合はその所定値を短く設定すること」、あるいは、「第１メモリ２０に含まれるページのうち、利用されてからの経過時間が他のページと比較して長いページを第２データとして第２メモリ３０へ追い出す場合は追い出すページの数を増やすこと」、あるいは、「第１メモリ２０に含まれるページのうち、第２データとして第２メモリ３０へ一定間隔で決まった数のページを追い出す場合にはその間隔を小さくすること」あるいは、「第１メモリ２０に含まれるページのうち、所定の数のページ以外は第２データとして第２メモリ３０へ追い出す場合にはその数（残すページの数）を減らすこと」などのことである。このように積極的に第２メモリ３０へページを追い出すことで、必要な第１メモリ２０上の有効領域を減らすことができる。そして、このように積極的にスワップ処理回数を増やしても、ＮＶＭは高速なので性能低下は小さく抑えられる。要するに、領域制御部１１０は、スワップ処理オーバヘッド（処理情報）が上記閾値以下となる範囲で上記処理量（スワップ処理の処理量）を増やすことで、第１データを処理するために必要な（第１処理を行うために必要な）有効領域の数を減らし、不要な有効領域に供給する電力を、第１電力から、第１電力よりも低い第２電力に変更（つまり無効領域に変更）する制御を行うことができる。
【００４３】
ここでは、前提として、プロセッサ１０上で動作しているアプリケーションは、第１メモリ２０のうち第１電力が供給される領域２および領域３と、ＯＳの仮想記憶が提供する第２メモリ３０上のスワップ領域と、をワーキングメモリとして利用して動作している（図３の第２状態）。アプリケーションを動作させるために必要なメモリサイズは、領域２と領域３の合計サイズよりも大きい。そのため、ＯＳは、第１メモリ２０の領域２および領域３と、第２メモリ３０との間で必要なデータを入れ替えるスワップ処理を行いながらアプリケーションを実行する。この例では、領域２および領域３の各々に供給される電力（第１電力）は、少なくとも記憶したデータの内容の保持に必要な電力（あるいはメモリアクセスが可能な電力）に設定されており、図３の第２状態において、第１メモリ２０のうちＯＳが利用可能な領域は領域２および領域３であり、領域１に供給される電力は、第１電力よりも低い第２電力（典型的にはゼロ）に設定されている（例えばパワーオフされている）。領域１は、ＯＳやアプリケーションからは利用不可能な状態である（無効領域である）。
【００４４】
図７は、この場合の情報処理装置１の動作例を示すフローチャートである。ステップＳ６０１の処理内容は、図６のステップＳ４０１の処理内容と同様である。ステップＳ６０１の後、領域制御部１１０（判定部１１２）は、ステップＳ６０１で算出したスワップ処理オーバヘッドと上述の第４閾値とを比較する（ステップＳ６０２）。スワップ処理オーバヘッドが第４閾値以下の場合（ステップＳ６０３：Ｙｅｓ）、領域制御部１１０（有効領域変更部１１３、電力設定部１１４）は、有効領域の数を減らす制御を行う（ステップＳ６０４）。例えば有効領域変更部１１３は、電力設定部１１４に対して、領域２に供給される電力を第１電力から第２電力へ変更することを指示する。この指示を受けた電力設定部１１４は、領域２に供給する電力を第１電力から第２電力に変更する（図３に示す第１状態）。これにより、有効領域の数は「１」だけ減少することになる。また、このとき、領域制御部１１０は、無効領域に変更する有効領域に記憶されたデータを第２メモリ３０へ移動する制御も行う。このようにして、有効領域の数が減ることで（有効な第１メモリ２０の容量が減ることで）、スワップ処理の発生頻度が増加し、スワップ処理オーバヘッドも増加することになる。そして、ステップＳ６０１以降の処理が繰り返される。要するに、領域制御部１１０は、上述の処理情報が上述の閾値よりも小さい第４閾値以下の場合、何れか１つの有効領域に供給する電力を、第１電力から第１電力よりも小さい第２電力に変更して有効領域の数を減らし、該有効領域に記憶されたデータを第２メモリ３０へ移動する制御を行うこともできる。
【００４５】
一方、スワップ処理オーバヘッドが第４閾値よりも大きい場合（ステップＳ６０３：Ｎｏ）、処理は、ステップＳ６０５に移行する。ステップＳ６０５およびステップＳ６０６の処理内容は、図６に示すステップＳ４０３およびステップＳ４０４の処理内容と同様であるので、詳細な説明は省略する。
【００４６】
なお、第１処理(アプリケーション)のメモリアクセス特性によって、適した有効な第１メモリ２０の容量は異なる。アプリケーションのメモリアクセス頻度が高い場合（そのようなアプリケーションを第２処理とする）は、有効領域の数を減らしすぎるとスワップ処理の発生頻度が増加しすぎる。一方で、アプリケーションのメモリアクセス頻度が低い場合（そのようなアプリケーションを第３処理とする）は、有効領域の数をより積極的に減らしてもスワップ処理の発生頻度は極端に増加しない。即ち、アプリケーションを実行するための期間内の一定期間において発生するスワップ処理の処理量を示すスワップ処理オーバヘッドが閾値以下になるよう、有効領域の数を変化させる制御を行うことで、第２処理と第３処理では、有効領域の数は異なる。また、第１処理（１つのアプリケーション）の中で、第２処理（メモリアクセス頻度が高い）と第３処理（メモリアクセス頻度が低い）が混在する場合は、第１処理（１つのアプリケーション）の実行中に、有効領域の数が変化する。
【００４７】
以上に説明したように、本実施形態では、上述の１以上の有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、上記スワップ処理の処理量を示すスワップ処理オーバヘッドが閾値以下になるよう、有効領域の数を変化させる制御を行う。これにより、プロセッサ１０上で動作するアプリケーションの速度性能を担保しつつ省電力化を図ることができる。
【００４８】
（第１実施形態の変形例）
例えばＯＳの仮想記憶を使わない形態であってもよい。例えば図８に示すように、第１データを処理する第１処理を実行する外部装置４０による第１データの読み書きに用いられる第１メモリ２０と、外部装置４０が直接データの読み書きを行うことができず、かつ、第１データの一部を記憶する第２メモリ３０と、第１メモリ２０と第２メモリ３０との間でデータ（この例ではページ単位のデータ）を移動させるコントローラ５０と、を備える記憶装置（メモリモジュール）が設けられる形態であってもよい。なお、データの移動のためにデータ転送専用ハードウェア（ＤＭＡコントローラ）を設けておくのが望ましい。
【００４９】
図８の例では、上述のＯＳにより提供される機能（領域制御部１１０等の機能）は、ハードウェア要素であるコントローラ５０により実現される。つまり、この例では、コントローラ５０は、上述の１以上の有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、上記スワップ処理の処理量を示す処理情報が閾値以下になるよう、有効領域の数を変化させる。コントローラ５０は、上述の処理情報が上述の閾値よりも大きい場合は、有効領域の数を増加させる制御を行うこともできる。また、コントローラ５０は、上述の処理情報が上述の閾値以下となる範囲で有効領域の数を減らす制御を行うこともできる。より具体的には、領域制御部１１０は、上述の処理情報が、上述の第４閾値以下の場合、有効領域の数を減らす制御を行うこともできる。
【００５０】
（第２の実施形態）
次に、第２の実施形態を説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。図９は、本実施形態の情報処理装置１のハードウェア構成の一例を示す図である。図９に示すように、情報処理装置１は、データの読み書きの速度を示すアクセス速度が第２メモリ３０よりも低い第３メモリ６０をさらに備える。この例では、第３メモリ６０は、ＮＶＭで構成されるが、これに限らず、例えばＳＳＤやＨＤＤなどで構成されてもよい。第２メモリ３０と第３メモリ６０の組み合わせは任意に変更可能である。また、プロセッサ１０は、第２メモリコントローラ１０４（この例ではＮＶＭコントローラ）を内包しており、これを介して第２メモリ３０が接続(メモリバス接続)されている。さらに、プロセッサ１０は、第３メモリコントローラ１０５（この例ではＮＶＭコントローラ）を内包しており、これを介して第３メモリ６０が接続(メモリバス接続)されている。ＳＳＤやＨＤＤはＩ／Ｏコントローラで接続されていてもよく、プロセッサ１０との接続方法は任意である。
【００５１】
ここで、第２メモリ３０の代わりに第３メモリ６０をスワップデバイスとして利用してアプリケーションを動作させても要求性能を満たす（スワップ処理オーバヘッドが閾値以下になる）場合がある。スワップ処理の回数が比較的少ない場合などである。例えば、アプリケーションのメモリアクセス頻度が少ないような場合である。このような場合、第３メモリ６０をスワップデバイスとしてこのアプリケーション（第１アプリケーション）を動作させることで、その分だけ有効な第２メモリ３０の容量を空けて別のアプリケーション（第２アプリケーション）に利用させることができる。第２アプリケーションのみで第２メモリ３０をスワップデバイスとして利用できれば、第２メモリ３０のメモリバンド幅を第２アプリケーションのみで使えることになるので、データ転送時間を小さくできる。データ転送時間が小さくできれば、さらにスワップ処理の回数が増えても要求性能は満たせるので、第１メモリ２０のサイズ（有効領域の数）をさらに小さくでき、より第１メモリ２０の消費電力を減らして省電力化することができる。
【００５２】
図１０は、本実施形態の情報処理装置１が有するソフトウェアの構成の一例を示す図である。図１０に示すように、ＯＳは、算出部１２０と切替制御部１３０とをさらに有する。
【００５３】
算出部１２０は、監視部１１１により監視された上述のスワップ処理オーバヘッドを元に、上述のスワップ処理を、上述の第２データを第１メモリ２０から第３メモリ６０へ移動し、上述の第３データを第３メモリ６０から第１メモリ２０へ移動するための第２スワップ処理（第２移動処理）に置き換えた場合の処理量を示す第２スワップ処理オーバヘッド（第４処理情報）を算出する。
【００５４】
切替制御部１３０は、算出部１２０により算出された第２スワップ処理オーバヘッドが上述の閾値以下の場合、対応する処理（アプリケーション）を、第１メモリ２０と第３メモリ６０とをワーキングエリアとして使用する処理に切り替える制御を行う。
【００５５】
なお、この例では、算出部１２０および切替制御部１３０は、領域制御部１１０とは別に設けられているが、これに限らず、例えば領域制御部１１０が、算出部１２０および切替制御部１３０のうちの少なくとも一方を有する形態であってもよい。
【００５６】
図１１を用いて、より詳細な内容を説明する。図１１では、第１メモリ２０は、４つの領域（領域１〜領域４）に分けられていて、第１アプリケーション（図１１では「第１Ａｐｐ」と表記）と第２アプリケーション（図１１では「第２Ａｐｐ」と表記）がプロセッサ１０上で動作している。第１アプリケーションは、第１メモリ２０の領域１と、第２メモリ３０上のスワップ領域とを利用して動作しており、領域１より大きなメモリサイズが要求されるアプリケーションである。また、第２アプリケーションは、第１メモリ２０の領域２および領域３と、第２メモリ３０上のスワップ領域とを利用して動作しており、領域２と領域３の合計より大きなメモリサイズが要求されるアプリケーションである。図１１の第１状態において、第１メモリ２０のうちＯＳやアプリケーションが利用可能な領域は領域１〜領域３であり、領域４に供給される電力は、第１電力よりも低い第２電力（典型的にはゼロ）に設定されている。領域４は、ＯＳやアプリケーションからは利用不可能な状態である。
【００５７】
ここで、ＯＳは、第１アプリケーションが第２メモリ３０の代わりに第３メモリ６０をスワップデバイスとして利用しても要求性能を満たすか否か（スワップ処理オーバヘッドが閾値以下になるか否か）を判定する。判定は、第１アプリケーションを、第１メモリ２０の領域１と第２メモリ３０を利用して動作させて、一定期間に発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドを監視し、それを基に、第１アプリケーションを、第１メモリ２０の領域１と第３メモリ６０を利用して動作させた場合の性能を見積もり、要求性能を引き続き満たすかを判定する。
【００５８】
図１２を用いて詳細を説明する。まず、ＯＳは、第１アプリケーションを、第１メモリ２０の領域１と第２メモリ３０を利用して動作させて、一定期間に発生するスワップ処理を監視し、上述のスワップ処理オーバヘッド（第１スワップ処理オーバヘッドと称する）を算出する。その結果、図１２に示すように、第１スワップ処理オーバヘッドが閾値よりも小さい場合、ＯＳ（算出部１２０）は、この第１スワップ処理オーバヘッドを元に上述の第２スワップ処理オーバヘッドを算出する。
【００５９】
ここで、第１アプリケーションの処理に用いるスワップデバイスを、第２メモリ３０から第３メモリ６０へ変更することに伴い、データ転送時間が変化（アクセス速度が異なるため）したとしても、ＯＳ処理時間は大きく変化しないので（あるいはそう仮定して）、各スワップ処理に対応するデータ転送時間のみを、第２メモリ３０のアクセス速度に応じたデータ転送時間の値から第３メモリ６０のアクセス速度に応じたデータ転送時間の値に置き換えることで、第２スワップ処理オーバヘッドを算出することができる。第３メモリ６０を利用した場合のデータ転送時間は、ＯＳのインストール時などに測定され、ＯＳが参照できる形式で保存されているのでこれを計算に利用することができる。そして、ＯＳ（切替制御部１３０）は、第２スワップ処理オーバヘッドを上述の閾値と比較する。図１２に示すように、第２スワップ処理オーバヘッドが上述の閾値以下の場合は、ＯＳ（切替制御部１３０）は、第１アプリケーションに対応する処理を、第１メモリ２０と第３メモリ６０を利用した処理に切り替える（スワップデバイスを第２メモリ３０から第３メモリ６０へ変更する）。
【００６０】
第１アプリケーションのスワップデバイスが第３メモリ６０に変更されると、図１１の第２状態に示すように、第１アプリケーションは第１メモリ２０の領域１と第３メモリ６０を利用して動作するようになる。これにより、第２メモリ３０のメモリバンド幅を第２アプリケーションのみで使える（第２メモリ３０を独占して使える）ことになるので、第２アプリケーションの動作中に発生するスワップ処理におけるデータ転送時間をより小さくできる。
【００６１】
このように、第１アプリケーションのスワップ領域を変更することで、図１３に示すように、第２アプリケーションのスワップ処理オーバヘッドは、第１アプリケーションのスワップデバイスが第２メモリ３０の場合のスワップ処理オーバヘッドを示す第３スワップ処理オーバヘッドから、第１アプリケーションのスワップデバイスを第３メモリ６０へ変更した場合のスワップ処理オーバヘッドを示す第４スワップ処理オーバヘッドになる。第４スワップ処理オーバヘッドは第３スワップ処理オーバヘッドと比較すると、スワップ処理の回数も変わらず（あるいは大きく変化せず）、ＯＳ処理時間は変わらない（あるいは大きく変化しない）が、第２メモリ３０のメモリバンド幅を第２アプリケーションのみで使えるようになったためにデータ転送時間が小さくなっている。このように、スワップ処理オーバヘッドが小さくなったので、第２アプリケーションが利用可能な第１メモリ２０の有効領域の数を上述の方法などでさらに小さくできる可能性がある。例えば有効領域の数を減らした結果（有効な第１メモリ２０の容量を小さくした結果）、スワップ処理の回数が増加して、第２アプリケーションのスワップ処理オーバヘッドが、第４スワップ処理オーバヘッドよりも大きい第５スワップ処理オーバヘッドになっても、この第５スワップ処理オーバヘッドが上述の閾値以下であれば速度性能は担保できる。したがって、速度性能を担保しつつ消費電力をさらに削減することができる。
【００６２】
図１４は、本実施形態の情報処理装置１の動作例を示すフローチャートである。この例では、ＯＳは、第１アプリケーションを、第１メモリ２０の領域１と第２メモリ３０を利用して動作させていることを前提とする。各ステップの具体的な内容は上述したとおりである。
【００６３】
図１４に示すように、まずＯＳ（監視部１１１）は、上述の第１スワップ処理オーバヘッドを算出する（ステップＳ１００１）。次に、ＯＳ（算出部１２０）は、ステップＳ１００１で算出した第１スワップ処理オーバヘッドを元に、上述の第２スワップ処理オーバヘッドを算出する（ステップＳ１００２）。次に、ＯＳ（切替制御部１３０）は、ステップＳ１００２で算出した第２スワップ処理オーバヘッドが上述の閾値以下であるか否かを判定する（ステップＳ１００３）。第２スワップ処理オーバヘッドが上述の閾値以下の場合（ステップＳ１００３：Ｙｅｓ）、ＯＳ（切替制御部１３０）は、第１アプリケーションのスワップデバイスを第３メモリ６０に切り替える（ステップＳ１００４）。一方、第２スワップ処理オーバヘッドが上述の閾値よりも大きい場合（ステップＳ１００３：Ｎｏ）、そのまま処理は終了する。
【００６４】
（第３の実施形態）
次に、第３の実施形態を説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。上述の第１の実施形態と同様に、領域制御部１１０は、上述のスワップ処理オーバヘッドが上述の第４閾値以下の場合、有効領域の数を減らす制御を行う。より具体的には、領域制御部１１０は、上述のスワップ処理オーバヘッドが上述の第４閾値以下の場合、何れかの有効領域に供給される電力を、第１電力よりも低い第２電力とすることで、該有効領域を、第２電力が供給される領域を示す無効領域へ変化させる制御を行う。ここでは、有効領域から無効領域へ変化させる順番は予め定められている。
【００６５】
本実施形態では、図１５に示すように、第１メモリ２０は、第１ＤＩＭＭ(Dual  Inline  Memory  Module)〜第４ＤＩＭＭの４つのＤＩＭＭ（電力の供給単位となる領域（電源単位領域））で構成されている。なお、電力の供給単位はＤＩＭＭには限られず、ランクやバンクなどの第１メモリ２０（この例ではＤＲＡＭ）を構成する要素単位であって、かつ電力制御が可能な任意の単位であればよいが、ここでは、電力の供給単位はＤＩＭＭである場合を例に挙げて説明する。
【００６６】
ＤＩＭＭ単位（メモリモジュール単位）で電力の供給を停止して（パワーオフして）、有効領域の数を小さくしていく（有効な第１メモリ２０の容量を小さくしていく）場合に、効率よくＤＩＭＭをパワーオフできるように、ＤＩＭＭをパワーオフする順番を予め決めておき、スワップ領域に移動させたくないデータを適切に配置しておくことで、高速化および省電力化を実現できる。つまり、例えば、パワーオフの直後に使うデータや頻繁にアクセスするデータ（つまり、スワップ領域に移動させたくないデータ）が配置されているＤＩＭＭがパワーオフされると、ＤＩＭＭに配置（マッピング）されたデータは一度スワップ領域に転送され(マッピングを変更され)、その後ですぐにパワーオフされていない別のＤＩＭＭに戻される（転送される）分だけ時間も電力も無駄になるので、スワップ領域に移動させたくないデータを、パワーオフの順番が遅い（より好適には最も遅い）ＤＩＭＭに配置することにより、上記のような無駄が発生することを抑制できる。
【００６７】
図１５に示す第１メモリ２０を例に挙げて説明する。この第１メモリ２０を使う際に、省電力化のためにＤＩＭＭを決まった順番でパワーオフする。具体的には、第１ＤＩＭＭ、第２ＤＩＭＭ、第３ＤＩＭＭの順番にパワーオフしていく。情報処理装置１が動作し続けるためのＤＩＭＭは必要であるため、第４ＤＩＭＭはパワーオフされないＤＩＭＭである。言い換えれば、この第１メモリ２０（ＤＲＡＭ）は、少なくとも第１の領域と第２の領域と第３の領域とから構成され、ＯＳ（領域制御部１１０）は、第１の領域(ＤＩＭＭ)、第２の領域(ＤＩＭＭ)、および、第３の領域(ＤＩＭＭ)の各々に供給される電力が上述の第１電力（ＯＳやアプリケーションが使用可能となる電力で、少なくともデータの内容を保持可能な電力）であり、かつ、プロセッサ１０が、第１の領域、第２の領域および第３の領域の合計サイズよりも大きい第１データを処理する第１処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の第４閾値以下の場合、第１の領域に記憶されたデータを第２の領域あるいは第３の領域あるいは第２メモリ３０へ移して、第１の領域に供給される電力を第１電力より低いパワーオフ時などの電力である第２電力にする制御と、第２の領域に記憶されたデータを第３の領域あるいは第２メモリ３０へ移して、第２の領域に供給される電力を第２電力にする制御と、を予め決められた順番で行う。
【００６８】
また、別の言い方をすれば、第１メモリ２０は、少なくとも第１の領域と第２の領域とから構成され、第１の領域および第２の領域の各々に供給される電力が上述の第１電力であり、かつ、プロセッサ１０が、第１の領域および第２の領域の合計サイズよりも大きい第１データを処理する第１処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の第４閾値以下の場合に、先に無効領域にするための制御を行う領域は第１の領域と決まっている。
【００６９】
また、スワップ領域へ移動させたくないデータを、パワーオフされる順番がより遅い（パワーオフされる可能性が低い）ＤＩＭＭに配置し、スワップ領域に移動させてもよいデータを、パワーオフされる順番がより早いＤＩＭＭに配置するためには、アプリケーションあるいはＯＳが処理するデータが記憶される領域（それぞれに任意のサイズのデータが格納される複数のメモリ領域の集合であると考えてもよい）を確保する際に確保するメモリ領域の優先度を指定する。言い換えれば、第１メモリ２０は、少なくとも第１の領域と第２の領域とから構成され、第１の領域および第２の領域の各々に供給される電力が上述の第１電力であり、かつ、第１の領域および第２の領域の合計サイズよりも大きい第１データを処理する第１処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の第４閾値以下の場合に、先に無効領域にするための制御を行う領域は第１の領域と決まっている場合は、第１データのうち第２の領域に優先的に配置されるデータは予め指定されていてもよい（例えばアプリケーションが指定することができる）。具体的には、第１データに含まれるデータが格納されるメモリ領域を割り当てる（アロケートする）関数の引数に優先度を数値等で設定する方法などがある。その結果、例えば、優先度を高く指定したデータを、パワーオフされる順番が遅い第４ＤＩＭＭに配置し（図１５参照）、それよりも優先度を低く指定したデータは第４ＤＩＭＭよりも早い順番でパワーオフされる第１ＤＩＭＭなどに配置されるようにする。
【００７０】
また、優先度を高く指定したにも関わらずＤＩＭＭの空き状況で第１ＤＩＭＭなどのパワーオフされやすいＤＩＭＭに配置されてしまった場合でも、スワップ領域へ移動されて次にＤＩＭＭに割り当てられる（マッピングされる）際、あるいは別の任意のタイミングで、すぐにはパワーオフされないＤＩＭＭに再配置（再度マッピング）してもよい。別の方法としては、メモリ領域を確保する際に利用するＤＩＭＭを直接指定する方法もある。具体的には、メモリ領域をアロケートする関数の引数に特定のＤＩＭＭを表す値等（例えば第４ＤＩＭＭなら「４」などの値）を指定する方法である。例えば、スワップ領域に移動させたくないデータを格納するメモリ領域を確保する際に利用するＤＩＭＭとして、第４ＤＩＭＭを直接指定することもできる。つまり、ＯＳ（見方を変えれば情報処理装置１）は、アプリケーションが、スワップ領域へ移動させたくないデータを指定するためのインタフェース部（ＡＰＩ）を有しており、ＯＳは、このインタフェース部を介して指定されたデータを優先的にパワーオフされないＤＩＭＭにマッピングする。
【００７１】
また、アプリケーションが、データのアクセス特性をヒント情報としてＯＳ(領域制御部１１０)に通知してもよい。例えば、データが繰り返しよく使われるデータなのか、一度しか使わないデータなのかを通知する。ＯＳは、アプリケーションから通知されたヒント情報を参照して、繰り返しよく使われるデータであればパワーオフされる順番が遅いＤＩＭＭに配置するようにし、一度しか使われないデータであればパワーオフされる順番が早いＤＩＭＭに配置することができる。つまり、ＯＳ（見方を変えれば情報処理装置１）は、アプリケーションが、処理するデータの利用頻度（処理を実行するための期間よりも短い一定期間において利用される回数等であると考えてもよい）などのアクセス特性を指定するためのインタフェース部（ＡＰＩ）を有しており、ＯＳは、このインタフェース部を介して指定されたアクセス特性に応じて、予め決められた順番でパワーオフされる複数のＤＩＭＭのうちの何れかに、対応するデータが記憶されるメモリ領域を割り当てる（マッピングする）。例えば利用頻度が高いことを示すアクセス特性が指定された場合は、対応するデータが記憶されるメモリ領域を、遅い順番でパワーオフされるＤＩＭＭへ優先的にマッピングし、利用頻度が低いことを示すアクセス特性が指定された場合は、対応するデータが記憶されるメモリ領域を、早い順番でパワーオフされるＤＩＭＭへ優先的にマッピングする。
【００７２】
また、決められた順番でＤＩＭＭをパワーオフする際に、パワーオフするＤＩＭＭに記憶されたデータをパワーオフする前に移動させる必要があるが、その移動先を、ＤＩＭＭをパワーオフする順番に応じて変えてもよい。例えば図１６に示すように、第１メモリ２０が、第１ＤＩＭＭと第２ＤＩＭＭと第３ＤＩＭＭと第４ＤＩＭＭとから構成され、パワーオフの順番としては、第１ＤＩＭＭ→第２ＤＩＭＭ→第３ＤＩＭＭ→第４ＤＩＭＭのように昇順にパワーオフしていく場合を想定する。
【００７３】
この場合、ＯＳは、基準となる第２ＤＩＭＭをパワーオフする場合、第２ＤＩＭＭをパワーオフする前に、第２ＤＩＭＭに記憶されたデータを第２メモリ３０に移動させる。同様に、ＯＳは、第２ＤＩＭＭよりも先にパワーオフされることが決まっている第１ＤＩＭＭをパワーオフする場合、第１ＤＩＭＭをパワーオフする前に、第１ＤＩＭＭに記憶されたデータを第２メモリ３０に移動させる。一方、基準となる第２ＤＩＭＭより遅い順番でパワーオフされるＤＩＭＭをパワーオフする場合、該ＤＩＭＭをパワーオフする前に、該ＤＩＭＭに記憶されたデータを、該ＤＩＭＭよりも遅い順番でパワーオフされる別のＤＩＭＭに移動させる（可能な限り移動させる）。具体的には、第３ＤＩＭＭをパワーオフする場合、第３ＤＩＭＭをパワーオフする前に、第３ＤＩＭＭに記憶されたデータを、第３ＤＩＭＭよりも遅い順番でパワーオフされる第４ＤＩＭＭへ移動させる。
【００７４】
要するに、第１メモリ２０（ＤＲＡＭ）は、少なくとも第１の領域と第２の領域と第３の領域と第４の領域とから構成され、ＯＳ（領域制御部１１０）は、プロセッサ１０が、第１の領域、第２の領域、第３の領域および第４の領域の合計サイズよりも大きい第１データを処理する第１処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の閾値以下となる範囲で、第１の領域、第２の領域、第３の領域および第４の領域のうちの何れかを、予め決められた順番で有効領域から無効領域に変更する制御（供給する電力を第１電力から第２電力に変更する制御）を行う。
【００７５】
また、ＯＳ（領域制御部１１０）は、基準となる第２の領域よりも早い順番で無効領域に変更する第１の領域を有効領域から無効領域に変更する場合は、第１の領域に記憶されたデータを第２メモリ３０に移動させてから、第１の領域に供給する電力を第２電力に変更し、第２の領域を有効領域から無効領域に変更する場合は、第２の領域に記憶されたデータを第２メモリ３０に移動させてから、第２の領域に供給する電力を第２電力に変更する。また、第２の領域よりも遅い順番で無効領域に変更する第３の領域を無効領域に変更する場合は、第３の領域に記憶されたデータを、第３の領域よりも遅い順番で無効領域に変更する第４の領域に移動させてから、第３の領域に供給する電力を第２電力に変更する。このように、より重要なデータ（スワップ領域に移動させたくないデータ）は可能な限りＤＩＭＭ（第１メモリ２０）に残しておくことで、スワップ領域へ移動されることによる性能低下と消費電力の増加を抑制することができる。なお、第３ＤＩＭＭから第４ＤＩＭＭへ移動するデータは、第３ＤＩＭＭに記憶されたデータの一部でもよいし全部でもよい。一部の場合は、残りのデータは第２メモリ３０へ移動される。
【００７６】
また、アプリケーションやＯＳから、有効領域から無効領域に変更する順番を、部分的あるいは全面的に無視するように指定することも可能である。例えば、指定されたデータ（あるいはアドレス）を含むＤＩＭＭを無効領域に変更しない（パワーオフしない）ように指定され、該指定されたデータが第１ＤＩＭＭに存在する場合に、本来は決まった順番に従って第１ＤＩＭＭをパワーオフするところを、第１ＤＩＭＭをパワーオフせずに第２ＤＩＭＭからパワーオフするように制御することもできる。この制御は、アプリケーションの動作中に一時的に行うようにすることも可能である。
【００７７】
また、ＤＩＭＭのパワーオフを決まった順番で行う方法とは別の方法として、パワーオフするＤＩＭＭをＬＲＵなどのアルゴリズムを用いて選択する方法がある。例えば、ＬＲＵ（Least  Recently  Used）でスワップ領域へ移動する候補として近々選択されるページが最も多く配置されているＤＩＭＭを選択する方法でもよい。ＯＳは、ＤＩＭＭを決まった順番でパワーオフする方法と、ＬＲＵなどの任意のアルゴリズムを用いてパワーオフするＤＩＭＭを選択する方法とを、切り替える手段（ＡＰＩ）を提供してもよい。アプリケーションは、この手段（ＡＰＩ）を用いて、パワーオフするＤＩＭＭを選択することが可能である。また、複数のＤＩＭＭのうち、一部のＤＩＭＭはＬＲＵなどの任意のアルゴリズムを用いた方法でパワーオフし、その他のＤＩＭＭについては予め決められた順番でパワーオフしてもよい。
【００７８】
言い換えれば、第１メモリ２０は、少なくとも第１の領域と第２の領域と第３の領域とから構成され、ＯＳ（領域制御部１１０）は、プロセッサ１０が、第１の領域、第２の領域および第３の領域の合計サイズよりも大きい第１データを処理する第１処理を実行するための期間内の一定期間において発生するスワップ処理に要する時間を示す上述のスワップ処理オーバヘッドが上述の閾値以下となる範囲で、第１の領域または第２の領域を、所定のアルゴリズム（例えばＬＲＵ）に従った順番で有効領域から無効領域に変更する制御を行い、第３の領域を無効領域に変更する制御は行わない形態であってもよい。
【００７９】
（第４の実施形態）
次に、第４の実施形態を説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。本実施形態では、図１７に示すように、ＯＳは、周波数制御部１４０をさらに有する。周波数制御部１４０は、上述のスワップ処理オーバヘッドが上述の閾値以下となる範囲で、第１メモリ２０を動作させるためのクロック周波数（ＤＩＭＭのクロック周波数）を変化させる制御を行う。なお、この例では、領域制御部１１０が周波数制御部１４０の機能を有する形態であるが、これに限らず、例えば周波数制御部１４０は領域制御部１１０とは別に設けられる形態であってもよい。
【００８０】
具体的には、上述のスワップ処理オーバヘッドが上述の閾値よりも小さい場合は、上述の閾値以下となる範囲でＤＩＭＭのクロック周波数を下げて、要求性能（要求されるアプリケーションの速度性能）を満たしつつ省電力化を図ることができる。また、上述のスワップ処理オーバヘッドが上述の閾値を少し超えているものの、ＤＩＭＭのクロック周波数の調整により、上述のスワップ処理オーバヘッドを上述の閾値以下に収めることができる場合は、ＤＩＭＭのクロック周波数を上げることで、有効領域の数を増やすことなく要求性能を満たすことができる。つまり、要求性能を満たしつつ省電力化を図ることができる。
【００８１】
いま、第１メモリ２０を動作させるためのクロック周波数（ＤＩＭＭのクロック周波数）が第１クロック周波数である場合を想定する。上述したように、領域制御部１１０は、アプリケーションが動作中の一定期間において発生する１以上のスワップ処理に要する時間を示すスワップ処理オーバヘッドを算出し、算出したスワップ処理オーバヘッドが上述の閾値よりも大きいか否かを判定する。以下では、第１クロック周波数でのスワップ処理オーバヘッドを「第１オーバヘッド」と称する場合がある。
【００８２】
図１８に示すように、第１オーバヘッドが上述の閾値よりも小さい場合、周波数制御部１４０は、ＤＩＭＭのクロック周波数を、第１クロック周波数から、第１クロック周波数よりも低いクロック周波数を示す第２クロック周波数に下げた場合のスワップ処理オーバヘッドを示す低周波数オーバヘッドを見積もる（算出する）。ここでは、クロック周波数を変更してもＯＳ処理時間は大きく変わらないとし、データ転送時間の変化分を見積もる。上述の第１オーバヘッドと上述の低周波数オーバヘッドとの差は、第１クロック周波数を使用した場合のデータ転送時間の合計（複数回発生するスワップ処理ごとのデータ転送時間の合計）と、第２クロック周波数を使用した場合のデータ転送時間の合計との差であるとして見積もることができる。この見積もりに必要な、第１クロック周波数を使用した場合のデータ転送時間や第２クロック周波数を使用した場合のデータ転送時間の計測は、ＯＳのインストール時やアプリケーション起動時など任意のタイミングで行い、領域制御部１１０が参照できるテーブルなどの任意の形式で保存することができる。そして、領域制御部１１０は、このテーブルを参照して、低周波数オーバヘッドの見積もりに必要な計算を行う。領域制御部１１０（周波数制御部１４０）は、見積もった低周波数オーバヘッドが上述の閾値以下の場合、ＤＩＭＭのクロック周波数を第２クロック周波数に変更する。上述の閾値を超える場合は、処理を終了する。
【００８３】
一方、図１９に示すように、上述の第１オーバヘッドが上述の閾値を超えている場合、周波数制御部１４０は、ＤＩＭＭのクロック周波数を、第１クロック周波数から、第１クロック周波数よりも高いクロック周波数を示す第３クロック周波数に上げた場合のスワップ処理オーバヘッドを示す高周波数オーバヘッドを見積もる。この見積もりの方法は、低周波数オーバヘッドの見積もりの方法と同様である。領域制御部１１０（周波数制御部１４０）は、見積もった高周波数オーバヘッドが上述の閾値以下の場合、ＤＩＭＭのクロック周波数を第３クロック周波数に変更する。上述の閾値を超える場合は、処理を終了する。
【００８４】
図２０は、本実施形態の情報処理装置１の動作例を示すフローチャートである。図２０に示すステップＳ１１０１〜ステップＳ１１０３の処理内容は、図６に示すステップＳ４０１〜ステップＳ４０３の処理内容と同様である。ステップＳ１１０３の結果が肯定の場合（ステップＳ１１０３：Ｙｅｓ）、周波数制御部１４０は上述の低周波数オーバヘッドを算出する（ステップＳ１１０４）。例えば周波数制御部１４０は、互いに異なる複数種類の第２クロック周波数と１対１に対応する複数の低周波数オーバヘッドを算出してもよい。次に、周波数制御部１４０は、ステップＳ１１０４で算出した低周波数オーバヘッドが閾値以下であるか否かを判断する（ステップＳ１１０５）。ステップＳ１１０５の結果が肯定の場合（ステップＳ１１０５：Ｙｅｓ）、周波数制御部１４０は、クロック周波数を第２クロック周波数に変更する（ステップＳ１１０６）。ステップＳ１１０５の結果が否定の場合（ステップＳ１１０５：Ｎｏ）、そのまま処理は終了する。
【００８５】
一方、上述のステップＳ１１０３の結果が否定の場合（ステップＳ１１０３：Ｎｏ）、周波数制御部１４０は上述の高周波数オーバヘッドを算出する（ステップＳ１１０７）。例えば周波数制御部１４０は、互いに異なる複数種類の第３クロック周波数と１対１に対応する複数の高周波数オーバヘッドを算出してもよい。次に、周波数制御部１４０は、ステップＳ１１０７で算出した高周波数オーバヘッドが閾値以下であるか否かを判断する（ステップＳ１１０８）。ステップＳ１１０８の結果が肯定の場合（ステップＳ１１０８：Ｙｅｓ）、周波数制御部１４０は、クロック周波数を第３クロック周波数に変更する（ステップＳ１１０９）。ステップＳ１１０８の結果が否定の場合（ステップＳ１１０８：Ｎｏ）、処理はステップＳ１１１０に移行する。ステップＳ１１１０の処理内容は、図６に示すステップＳ４０４の処理内容と同様である。
【００８６】
（第５の実施形態）
次に、第５の実施形態を説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。本実施形態では、図２１に示すように、複数のプロセッサ１０（図２１の例では、第１プロセッサ１０Ａおよび第２プロセッサ１０Ｂ）が、複数のキャッシュメモリ間のデータの不一致が起こらないようにするための手順を示すプロトコル（キャッシュコヒーレンスプロトコル）を保証するＱＰＩ（Intel  QuickPath  Interconnect）などの高速なインターコネクト（キャッシュコヒーレント・インターコネクト）２００を介して、相互に接続されている。あるいはネットワークや共有メモリを介して接続されていてもよい。図２１の例は、ＸＥＯＮプロセッサシステムなどのＮＵＭＡ（Non-Uniform  Memory  Access）型の構成のプロセッサシステムの一例である。以下では、図２１の構成を例に挙げて説明する。なお、図２１に示す第１プロセッサ１０Ａおよび第２プロセッサ１０Ｂの各々の構成は、図１に示すプロセッサ１０の構成と同様である。
【００８７】
第１プロセッサ１０Ａは、「第１処理装置」の一例であり、第１データを処理する。より具体的には、第１プロセッサ１０Ａは、第１データを処理する第１処理（この例では第１アプリケーション）を実行する。第１メモリ２０は、第１データの少なくとも一部を記憶するメモリであり、この例ではＤＲＡＭで構成される。第１メモリ２０は、メインメモリ（主記憶装置）として機能し、第１プロセッサ１０Ａは、第１メモリ２０上のデータを直接読み書きする。第２メモリ３０は、スワップ領域が確保されるメモリであり、この例ではＮＶＭで構成される。第２メモリ３０は、上述の第１データの一部を記憶するメモリであると考えることができる。第１プロセッサ１０Ａ、第１メモリ２０および第２メモリ３０の各々の構成は、図１の構成と同様である。
【００８８】
第２プロセッサ１０Ｂは、「第２処理装置」の一例であり、第８データ（説明の便宜上、このように表記する）を処理する。より具体的には、第２プロセッサ１０Ｂは第８データを処理する第２処理（この例では第２アプリケーション）を実行する。第４メモリ７０は、第８データの少なくとも一部を記憶するメモリであり、この例ではＤＲＡＭで構成される。第４メモリ７０は、メインメモリ（主記憶装置）として機能し、第２プロセッサ１０Ｂは、第４メモリ７０上のデータを直接読み書きする。ここでは、第４メモリ７０は、図１に示す第１メモリ２０に対応するメモリである。第５メモリ８０は、スワップ領域が確保されるメモリであり、この例ではＮＶＭで構成される。第５メモリ８０は、上述の第８データの一部を記憶するメモリであると考えることができる。ここでは、第５メモリ８０は、図１に示す第２メモリ３０に対応するメモリである。第８データは、上述の第１データと同様に、第４メモリ７０のうち、少なくともデータの内容の保持に必要な第１電力が供給される領域を示す１以上の有効領域より大きいサイズのデータである。
【００８９】
また、本実施形態のプロセッサシステムでは、第１プロセッサ１０Ａおよび第２プロセッサ１０Ｂは、共通のＯＳを実行する。図２２は、本実施形態のＯＳが有する機能の一例を示す図である。図２２に示すように、ＯＳは、処理制御部１５０を有する。なお、図２２の例では、本実施形態に関する機能のみを例示して説明するが、ＯＳが有する機能はこれに限られるものではなく、例えばＯＳは、第１プロセッサ１０Ａおよび第２プロセッサ１０Ｂごとに、対応する領域制御部１１０の機能を有する形態であってもよい。また、ネットワークや共有メモリで接続されるなどの場合は別々のＯＳが実行されていてもよい。
【００９０】
処理制御部１５０は、第１データを処理するための期間内の一定期間（第１処理を実行するための期間内の一定期間）において、第１メモリ２０に記憶されたデータを示す第２データのうち少なくとも一部を第２メモリ３０へ移動し、かつ第２メモリ３０に記憶されたデータを示す第３データのうち少なくとも一部を第１メモリ２０へ移動するための処理量を示す（第１スワップ処理（第１移動処理）のスワップ処理オーバヘッドを示す）第１スワップ処理オーバヘッド（第１処理情報）を算出する。例えば第１スワップ処理は、第１処理を実行するための期間内の一定期間において、第１データに含まれるページのうち読み書きが要求されたページを示す第１対象ページが第２メモリ３０上に存在する場合に発生し、第１メモリ２０上のページを第２データとして第２メモリ３０へ移動し、第２メモリ３０上の第１対象ページを第３データとして第１メモリ２０へ移動するための処理である。
【００９１】
また、処理制御部１５０は、第８データを処理するための期間内の一定期間（第２処理を実行するための期間内の一定期間）において、第４メモリ７０に記憶されたデータを示す第９データのうち少なくとも一部を第５メモリ８０へ移動し、かつ第５メモリ８０に記憶されたデータを示す第１０データのうち少なくとも一部を第４メモリ７０へ移動するための処理量を示す（第３スワップ処理（第３移動処理）のスワップ処理オーバヘッドを示す）第６スワップ処理オーバヘッド（第５処理情報）を算出する。例えば第３スワップ処理は、第２処理を実行するための期間内の一定期間において、第８データに含まれるページのうち読み書きが要求されたページを示す第２対象ページが第５メモリ８０上に存在する場合に発生し、第４メモリ７０上のページを第９データとして第５メモリ８０へ移動し、第５メモリ８０上の第２対象ページを第１０データとして第４メモリ７０へ移動するための処理である。
【００９２】
そして、処理制御部１５０は、第１スワップ処理オーバヘッドと第６スワップ処理オーバヘッドの合計を示す第７スワップ処理オーバヘッドを算出する。図２３に示すように、第７スワップ処理オーバヘッドが上述の閾値以下の場合、処理制御部１５０は、第１処理を第２プロセッサ１０Ｂに移しても要求性能を満たせると判断し、第１データの処理（第１処理）を第２プロセッサ１０Ｂに実行させる制御を行う。この場合、第１プロセッサ１０Ａで動作しているプロセスは無くなるので、ＯＳは、第１プロセッサ１０Ａ、第１メモリ２０および第２メモリ３０の各々に供給する電力を、それぞれが動作可能な電力よりも低い値（例えばゼロ）に制御することができる。これにより、省電力化を図ることができる。また、処理制御部１５０は、上記とは反対に、第２処理を第１プロセッサ１０Ａに実行させる制御を行うこともできる。なお、第７処理スワップ処理オーバヘッドを算出する際に、第１スワップ処理オーバヘッドと第６スワップ処理オーバヘッドと、さらに、第１処理を第２プロセッサ１０Ｂに実行させる（第１処理を第２プロセッサ１０Ｂへ移す）制御に掛かるオーバヘッド、とを合計してもよい。
【００９３】
図２４は、本実施形態の情報処理装置１（処理制御部１５０）の動作例を示すフローチャートである。各ステップの具体的な内容は上述したとおりである。図２４に示すように、処理制御部１５０は、上述の第１スワップ処理オーバヘッドを算出する（ステップＳ１２０１）。また、処理制御部１５０は、上述の第６スワップ処理オーバヘッドを算出する（ステップＳ１２０２）。次に、処理制御部１５０は、上述の第７スワップ処理オーバヘッドを算出する（ステップＳ１２０３）。次に、処理制御部１５０は、ステップＳ１２０３で算出した第７スワップ処理オーバヘッドが上述の閾値以下であるか否かを判断する（ステップＳ１２０４）。ステップＳ１２０４の結果が肯定の場合（ステップＳ１２０４：Ｙｅｓ）、処理制御部１５０は、第１処理を第２プロセッサ１０Ｂに実行させる（第１処理を第２プロセッサ１０Ｂへ移す）制御を行う（ステップＳ１２０５）。ステップＳ１２０４の結果が否定の場合（ステップＳ１２０４：Ｎｏ）、そのまま処理は終了する。
【００９４】
なお、上述の第７スワップ処理オーバヘッドを計算する際に、第４メモリ７０や第５メモリ８０のメモリバンド幅を第１処理と第２処理で共有することによるアクセス速度の低下を考慮してもよい。具体的には、まず、処理制御部１５０は、第１スワップ処理オーバヘッドに含まれるデータ転送時間を、アクセス速度の低下を考慮したデータ転送時間に置き換えた結果を示す第８スワップ処理オーバヘッドを求める。次に、処理制御部１５０は、第６スワップ処理オーバヘッドに含まれるデータ転送時間を、アクセス速度の低下を考慮したデータ転送時間に置き換えた結果を示す第９スワップ処理オーバヘッドを求める。次に、第８スワップ処理オーバヘッドと第９スワップ処理オーバヘッドとの合計を、第７スワップ処理オーバヘッドとして計算し、上述の閾値と比較する形態であってもよい。
【００９５】
（第６の実施形態）
次に、第６の実施形態を説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。図２５は、本実施形態のＯＳが有する機能の一例を示す図である。図２５に示すように、ＯＳは、移動処理制御部１６０をさらに有する。なお、この例では、移動処理制御部１６０は、領域制御部１１０とは別に設けられているが、これに限らず、例えば領域制御部１１０が、移動処理制御部１６０の機能を有する形態であってもよい。
【００９６】
第２メモリ３０と組み合わせて、小さなサイズの（有効領域の数を制限した）第１メモリ２０を利用する処理をＯＳに任せると（ＯＳの仮想記憶方式のスワップ処理に任せると）、アプリケーションの開発は容易になるが、主にコンテキストスイッチ処理の時間が原因でＯＳ処理時間は大きくなってしまい、要求性能を満たすことができない場合がある。そこで、本実施形態では、スワップ処理をユーザレベル（アプリケーションレベル）で行うことで、ＯＳの介在を減らす（あるいは無くす）ことでコンテキストスイッチ処理などに要する時間（オーバヘッド）を減らすことで、ＯＳ処理時間を小さくする。ＯＳ処理時間を小さくすることにより、スワップ処理オーバヘッドも小さくなるので、その分、第１メモリ２０の有効領域の数（有効な第１メモリ２０の容量）を減らせるので、より省電力化を図ることができる。
【００９７】
本実施形態の移動処理制御部１６０は、上述の第１データ（第１メモリ２０の１以上の有効領域よりも大きいサイズのデータ）を処理する第１処理に対応するアプリケーションから、第１データに含まれるデータを示す第４データの読み書きが要求された場合に発生するスワップ処理（移動処理）を実行し、該アプリケーションから、第１データに含まれるデータであって、第４データに比べて高速な処理が要求される第５データの読み書きが要求された場合に発生するスワップ処理を、該アプリケーションに実行させる制御を行う。
【００９８】
移動処理制御部１６０は、例えば図２６に示すような、複数のページ（仮想アドレスに対応するページ）ごとに、スワップ処理をアプリケーションに実行させるか否かを示すユーザレベル情報を対応付けた対応情報を用いて、アプリケーションの動作中に発生するスワップ処理を、該アプリケーションに実行させるか否かを制御することができる。図２６の例では、対応情報は上述のページテーブルであり、仮想空間におけるデータ（処理単位のデータ）の所在を示す仮想アドレスに対応するページを識別するページ番号と、該ページの物理的な格納場所と、オフセットと、ユーザレベル情報とを対応付けた情報である。オフセットは、第１メモリ２０や第２メモリ３０のうちページがマッピングされた位置を示す情報（つまり、物理アドレス）である。また、図２６の例ではユーザレベル情報が「Ｙｅｓ」を示す場合は、対応するページへのアクセスに伴って発生するスワップ処理はアプリケーションに実行させることを意味し、ユーザレベル情報が「Ｎｏ」を示す場合は、対応するページへのアクセスに伴って発生するスワップ処理はアプリケーションに実行させずにＯＳ（移動処理制御部１６０）が実行することを意味する。ここでは、アプリケーションが処理するデータを示す第１データに含まれるデータのうち高速な処理が要求されるデータに対応するページに対するユーザレベル情報は、「Ｙｅｓ」に設定されることになる。なお、ページテーブルの形態は図２６の形態に限られるものではない。
【００９９】
例えばアプリケーションからの要求を受けたＯＳが、「０」を示すページ番号に対応するページへアクセスする場合、ページフォルトが発生する（図２６の例では、「０」を示すページ番号に対応するページの格納場所は「第２メモリ３０」であるため）。ＯＳ（移動処理制御部１６０）は、ページテーブルを参照して、「０」を示すページ番号に対応するユーザレベル情報を確認し、このユーザレベル情報は「Ｙｅｓ」を示すので、要求元のアプリケーション（ユーザレベルライブラリ）に対して、ページフォルトがあったことを通知する。この通知を受けたアプリケーションは、第２メモリ３０のうち、「０」を示すページ番号に対応するオフセット（「２１」）が示す領域に記憶されたデータ（ページ単位のデータ）を第１メモリ２０へ移動し、第１メモリ２０上のデータ（ページ単位のデータ）を第２メモリ３０へ追い出すためのスワップ処理を行い、そのスワップ処理に応じてページテーブルのマッピングを変更する。
【０１００】
一方で、アプリケーションからの要求を受けたＯＳが、「４」を示すページ番号に対応するページへアクセスする場合も同様に、ページフォルトが発生する。ＯＳ（移動処理制御部１６０）は、ページテーブルを参照して、「４」を示すページ番号に対応するユーザレベル情報を確認し、このユーザレベル情報は「Ｎｏ」を示すので、そのままＯＳが、第２メモリ３０のうち、「４」を示すページ番号に対応するオフセット（「３２」）が示す領域に記憶されたデータ（ページ単位のデータ）を第１メモリ２０へ移動し、第１メモリ２０上のデータ（ページ単位のデータ）を第２メモリ３０へ追い出すためのスワップ処理を行い、そのスワップ処理に応じてページテーブルのマッピングを変更する。
【０１０１】
この例では、単一のアプリケーションが処理するデータ（第１データ）のうち、高速な処理が要求されるデータのアクセスに伴って発生するスワップ処理は該アプリケーションに実行させ、その他のデータのアクセスに伴って発生するスワップ処理はＯＳ（移動処理制御部１６０）が実行しているが、例えば第１アプリケーションの動作中に発生するスワップ処理はＯＳが実行し、第１アプリケーションよりも高速性が要求される第２アプリケーションの動作中に発生するスワップ処理は該第２アプリケーションに実行させる形態であってもよい。
【０１０２】
また、例えば図２７に示すように、プロセッサ１０は、Ｉ／Ｏコントローラ１０３を介して、ＳＳＤやＨＤＤなどの第６メモリ９０と接続される構成であってもよい。この構成では、単一のアプリケーションが処理するデータ（第１データ）に含まれるデータであって、第１メモリ２０に存在しないデータ（第１メモリ２０にマッピングされていないデータ）のうち、高速な処理が要求されるデータは第２メモリ３０に配置され、その他のデータは第６メモリ９０に配置されてもよい。つまり、第１データに含まれるデータのうち高速な処理が要求されるデータについては第２メモリ３０をスワップデバイスとして利用し、その他のデータについては第６メモリ９０をスワップデバイスとして利用することもできる。この場合、図２８に示すように、ＯＳ（移動処理制御部１６０）は、アプリケーションが処理する第１データのうち高速な処理が要求されるデータのアクセスに伴って発生するスワップ処理（第１メモリ２０と第２メモリ３０との間でのスワップ処理）を実行する一方、その他のデータのアクセスに伴って発生するスワップ処理（第１メモリ２０と第６メモリ９０との間でのスワップ処理）は該アプリケーションに実行させる制御を行うことができる。
【０１０３】
また、例えば第１アプリケーション（第１処理）が処理するデータ（第１データ）に含まれるデータであって、第１メモリ２０に割り当てることができない（第１メモリ２０に載りきらない）データは第６メモリ９０に配置され、第１アプリケーションよりも高速性が要求される第２アプリケーションが処理するデータに含まれるデータであって、第１メモリ２０に割り当てることができないデータは第２メモリ３０に配置される形態であってもよい。つまり、第１アプリケーションを動作させる場合は第６メモリ９０をスワップデバイスとして利用し、より高速性が要求される第２アプリケーションを動作させる場合は第２メモリ３０をスワップデバイスとして利用することもできる。
【０１０４】
この場合、図２９に示すように、ＯＳ（移動処理制御部１６０）は、第１アプリケーションの動作に伴って発生するスワップ処理（第１メモリ２０と第６メモリ９０との間でのスワップ処理、以下の説明ではＯＳスワップ処理と称する場合がある）を実行する一方、第２アプリケーションの動作に伴って発生するスワップ処理（第１メモリ２０と第２メモリ３０との間でのスワップ処理、以下の説明ではアプリケーションスワップ処理と称する場合がある）は該第２アプリケーションに実行させる制御を行うことができる。これにより、高速な第２メモリ（ＮＶＭ）３０のうち、第２アプリケーションが利用することができる領域を増やすことができる。また、ページテーブルは、格納場所が第６メモリ９０の場合は、ＯＳが、データ移動（スワップ処理）あるいはデータ移動が必要なことを検出するページフォルトをハンドリングする処理を行うことが設定され（「Ｎｏ」を示すユーザレベル情報が設定され）、格納場所が第２メモリ３０の場合は、アプリケーションが、データ移動（スワップ処理）あるいはデータ移動が必要なことを検出するページフォルトをハンドリングする処理を行うことが設定される（「Ｙｅｓ」を示すユーザレベル情報が設定される）。
【０１０５】
また、図３０に示すように、ユーザレベルでスワップ処理を行うと、ＨＤＤやＳＳＤなどの第６メモリ９０の代わりに、高速なＮＶＭなどの第２メモリ３０を使うことでデータ転送時間が小さくなるだけでなく、ＯＳの処理がユーザレベル処理（ユーザレベルライブラリの処理、あるいはアプリケーションレベルの処理）に置き換わることにより高速になる。この例では、スワップ処理オーバヘッドは、データ転送時間とユーザレベル処理に要する時間を示すユーザレベル処理時間とから構成されると考えることができる。また、ユーザレベル処理を行っても、ＯＳ処理時間は減っても無くならないとすれば、スワップ処理オーバヘッドは、データ転送時間とユーザレベル処理時間とＯＳ処理時間とから構成されると考えることもできる。ユーザレベルのスワップ処理（つまり、ここで新しく定義されたスワップ処理オーバヘッドも）は、これまでのすべての実施形態についても適用することができる。
【０１０６】
すなわち、スワップ処理オーバヘッドは、プロセッサ１０が、第１メモリ２０(ＤＲＡＭ)の１以上の有効領域より大きいサイズの第１データを処理する第１処理を、第１メモリ２０の有効領域と第２メモリ３０と第６メモリ９０とをワーキングエリアとして使用して実行するための期間内の一定期間において複数回発生するスワップ処理に要する時間を示す情報であり、ＯＳによるスワップ処理に要する時間を示すＯＳスワップ処理オーバヘッドの累計値と、アプリケーションによるスワップ処理に要する時間を示すアプリケーションスワップ処理オーバヘッドの累計値との合計である。１回あたりのＯＳスワップ処理オーバヘッドは、ＯＳ処理時間と、第１メモリ２０と第６メモリ９０との間でのデータ転送に要する時間を示すデータ転送時間との合計となる。また、１回あたりのアプリケーションスワップ処理オーバヘッドは、スワップ処理に関してアプリケーションが実行する処理に要する時間を示すアプリケーション処理時間と、第１メモリ２０と第２メモリ３０との間でのデータ転送に要する時間を示すデータ転送時間との合計となる。そして、ＯＳは、ＯＳスワップ処理オーバヘッドとアプリケーションスワップ処理オーバヘッドとの合計であるスワップ処理オーバヘッドが閾値以下の場合は、要求性能を満たすと判断することができる。
【０１０７】
要するに、情報処理装置１は、プロセッサ１０と、第１メモリ２０と、第２メモリ３０と、第２メモリ３０よりもデータの読み書きに要する速度を示すアクセス速度が低い第６メモリ９０とを備える。プロセッサ１０は、第１メモリ２０の１以上の有効領域より大きいサイズの第１データを処理する第１処理を実行する。第２メモリ３０は第１データの一部であって、高速な処理が要求されるデータを記憶する。第６メモリ９０は、第１データの一部であって、高速な処理が要求されない他のデータを記憶する。プロセッサ１０上で動作するＯＳ（領域制御部１１０）は、第１メモリ２０の有効領域と第２メモリ３０と第６メモリ９０とをワーキングエリアとして使用する第１処理を実行するための期間内の一定期間において発生するアプリケーションスワップ処理の処理量を示す処理情報（一定期間中のアプリケーションスワップ処理オーバヘッドの累計値）と、該一定期間において発生するＯＳスワップ処理の処理量を示す処理情報（一定期間中のＯＳスワップ処理オーバヘッドの累計値）と、の合計が閾値以下になるよう、有効領域の数を変化させる。また、ＯＳは、上述のＯＳスワップ処理を実行する一方、上述のアプリケーションスワップ処理を、第１処理に対応するアプリケーションに実行させる。上述のアプリケーションスワップ処理は、第１メモリ２０に記憶されたデータを示す第２データを第２メモリ３０へ移動し、第２メモリ３０に記憶されたデータを示す第３データを第１メモリ２０へ移動するための処理である。上述のＯＳスワップ処理は、第１メモリ２０に記憶されたデータを示す第１３データを第６メモリ９０へ移動し、第６メモリ９０に記憶されたデータを示す第１４データを第１メモリ２０へ移動するための処理である。
【０１０８】
また、全てのスワップ処理をＯＳに任せると、ＯＳは、連続した複数ページをまとめて第１メモリ２０に移動させたり、ＬＲＵなどのアルゴリズムを用いて不要と予想されるページをスワップ領域に追い出すなど、個々のアプリケーションのメモリアクセスの特性に合わせたページ移動を行うことは困難なので、必要なページをその都度第１メモリ２０に移動させたり、不要なページを第１メモリ２０に移動させてしまったり、すぐにアクセスするページであるにも関わらず該ページをスワップ領域に追い出してしまったりするため、結果としてＯＳ処理時間（スワップ処理に関するＯＳのオーバヘッド）は大きくなってしまう。
【０１０９】
そこで、本実施形態では、スワップ処理をユーザレベル（アプリケーションレベル）で行うことで、必要なページだけを一度で移動させることで、不要なページ移動やスワップ処理の回数を減らしてＯＳ処理時間を小さくする。ＯＳ処理時間を小さくできれば、スワップ処理オーバヘッドも小さくできるので、その分だけ第１メモリ２０の有効領域の数（有効な第１メモリ２０の容量）を減らせるので、より省電力化できる。
【０１１０】
図２６の例を用いて説明すると、例えばアプリケーションからの要求を受けたＯＳが、「０」を示すページ番号に対応するページへアクセスする場合にページフォルトが発生し、ページテーブルの設定に従って、アプリケーションにスワップ処理が委譲される。これがＯＳに任されていて、ＯＳが連続したアドレスのページを転送する設定になっていると、「０」を示すページ番号に対応するページと一緒に「１」を示すページ番号に対応するページも転送される。しかし、アプリケーション側で、「０」を示すページ番号に対応するページ０の次に使うページは「４」を示すページ番号に対応するページである場合、「１」を示すページ番号に対応するページの転送は無駄になってしまう。
【０１１１】
そこで、本実施形態では、図３１のように、ページ番号のリスト（形式は任意であってよく、例えば仮想アドレスのリストであってもよい）を持ち、このリストには、対応するページの利用順（ページを利用する順番）が設定されている。また、リストは複数あってもよい。ページフォルトしてアプリケーションにスワップ処理が委譲されると、アプリケーションは、リストの中から、ページフォルトを引き起こしたページ番号を検索し、該ページ番号に対応するページを転送する際に、該仮想アドレスよりも利用順が後の一部または全部のページ番号に対応するページを転送する。このようにすることで、ページフォルトの回数（スワップ処理に関わるＯＳ処理の回数）を削減することができるので、スワップ処理オーバヘッドを小さくすることができる。従って、第１メモリ２０の有効領域の数をより小さくすることができ、さらなる省電力化が可能になる。つまり、アプリケーションが、第１メモリ２０に記憶された第２データを第２メモリ３０へ移動させ、第２メモリ３０に記憶された第３データを第１メモリ２０に移動させる場合（アプリケーションがスワップ処理を実行する場合）、第３データを含む複数のデータ（それぞれページ単位のデータ）の処理順を示す順番情報（上述のリストに対応）に基づいて、第３データ、および、第３データよりも処理順が後の一部または全部のデータを第１メモリ２０に移動させる。
【０１１２】
また、アプリケーションがユーザレベルスワップ処理専用のユーザレベルライブラリを使って処理する際はユーザレベルライブラリからリストを設定するＡＰＩが提供され、これを用いて設定する。すなわち、ＯＳ（見方を変えれば情報処理装置１）は、アプリケーションが、データの処理順を示す順番情報（リストに対応）を設定するためのインタフェース部（ＡＰＩ）を有している。
【０１１３】
（第７の実施形態）
次に、第７の実施形態を説明する。上述の第１の実施形態と共通する部分については適宜に説明を省略する。図３２は、本実施形態の情報処理装置１のハードウェア構成の一例を示す図である。図３２に示すように、情報処理装置１は、ＳｏＣ(Ｓｙｓｔｅｍ  Ｏｎ  Ｃｈｉｐ)２１０と、ＤＲＡＭなどで構成される第１メモリ２０と、ＮＶＭなどで構成される第２メモリ３０と、を備える。ＳｏＣ２１０は、内部モジュールとして、プロセッサコア１０１、第１メモリコントローラ１０２、第２メモリコントローラ１０４、内部メモリ２２０と、を備え、これらはバス２３０を介して接続される。この例では、ＳｏＣ２１０が「処理装置」に対応している。
【０１１４】
この例では、プロセッサコア１０１はＡＲＭプロセッサなどであり、キャッシュメモリ（Ｌ１キャッシュ、Ｌ２キャッシュ）やＮＥＯＮなどの汎用（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）エンジンなどを備えている。ＳｏＣ２１０は、１つのプロセッサコア１０１を持つシングルコアの構成であってもよいし、複数のプロセッサコアを持つマルチコアの構成（マルチコアプロセッサ）であってもよい。上述の第１の実施形態と同様、第１メモリ２０は、メモリの全体あるいは一部をセルフリフレッシュモードなどの省電力モードに遷移させる、あるいは、パワーオフすることで消費電力を抑制できる。第１メモリ２０は、ＬＰＤＤＲ２などのＤＲＡＭ等で構成される揮発性メモリであるが、これに限らず、例えば不揮発メモリなどであってもよい。第２メモリ３０の構成は上述の第１の実施形態と同様である。
【０１１５】
内部メモリ（処理装置内部のメモリ）２２０は、例えばＳＲＡＭなどから構成されるが、これに限らず、例えば高速なＭＲＡＭなどの不揮発メモリであってもよい。内部メモリ２２０はオンチップメモリであるためにＳｏＣ２１０に接続されるメモリ（第１メモリ２０や第２メモリ３０）よりもアクセスレイテンシも低く消費電力も低い。
【０１１６】
図３３は、情報処理装置１が有するソフトウェアの構成の一例を示す図である。本実施形態では、ＯＳは、切替制御部１７０をさらに有する点で上述の第１の実施形態と相違する。ここでは、第２有効領域は、内部メモリ２２０のうちデータの読み書きに利用することができる領域である。切替制御部１７０は、上述の１以上の有効領域より大きいサイズの第１データの処理（第１処理）を、第１メモリ２０の代わりに、上述の１以上の第２有効領域（内部メモリ２２０の空き容量に相当）を利用する処理に切り替えた場合に、第１データを処理するための期間内の一定期間（第１処理を実行するための期間内の一定期間）において、第２有効領域に記憶されたデータを示す第１１データのうち少なくとも一部を第２メモリ３０へ移動し、かつ第２メモリ３０に記憶されたデータを示す第１２データのうち少なくとも一部を内部メモリ２２０へ移動するための処理量を示す第６処理情報が閾値以下になるのであれば、第１メモリ２０と第２メモリ３０とを使用する第１データの処理を、内部メモリ２２０を使用する処理に切り替える制御を行う。つまり、第１処理を、第１メモリ２０の代わりに、内部メモリ２２０（１以上の第２有効領域）を利用した処理に切り替えた場合に、該第１処理を実行するための期間内の一定期間において発生するスワップ処理の処理量を示す上述のスワップ処理オーバヘッドが上述の閾値以下になるような場合に、ＳｏＣ２１０（プロセッサコア１０１）による第１データの読み書きに用いられるメモリとして第１メモリ２０を利用する第１処理を、ＳｏＣ２１０による第１データの読み書きに用いられるメモリとして内部メモリ２２０を利用（内部メモリ２２０のみを使用）する処理に切り替える制御を行う。
【０１１７】
また、この切り替えの後、ＯＳ（領域制御部１１０）は、内部メモリ２２０に記憶されたデータを示す第１１データを第２メモリ３０へ移動し、第２メモリ３０に記憶されたデータを示す第１２データを第１メモリ２０へ移動するためのスワップ処理（説明の便宜上「第４スワップ処理（第４移動処理に相当）」と称する）の処理量を示すスワップ処理オーバヘッド（説明の便宜上、「第１０スワップ処理オーバヘッド（第６処理情報に相当）」と称する）が上述の閾値以下になる範囲で、内部メモリ２２０の第２有効領域の数を変化させることもできる。１回あたりの第４スワップ処理に要する時間（オーバヘッド）は、内部メモリ２２０と第２メモリ３０との間でのデータ転送に要するデータ転送時間と、第４スワップ処理に関してＯＳが実行する処理に要するＯＳ処理時間と、の合計である。第１０スワップ処理オーバヘッドは、一定期間内に発生する１以上の第４スワップ処理ごとのオーバヘッドの合計を示す。
【０１１８】
また、切替制御部１７０は、第１メモリ２０と第２メモリ３０とをワーキングエリアとして使用する第１処理を実行しているときの上述のスワップ処理オーバヘッドが上述の閾値以下であり、かつ、内部メモリ２２０の第２有効領域の数が、そのときの第１メモリ２０の有効領域の数に対応していない場合、第１処理を、ＳｏＣ２１０（プロセッサコア１０１）による第１データの読み書きに用いられるメモリとして第１メモリ２０と内部メモリ２２０を併用する処理に切り替える制御を行う。
【０１１９】
図３４は、本実施形態の情報処理装置１の動作例を示すフローチャートである。図３４の例では、ＳｏＣ２１０は、第１メモリ２０と第２メモリ３０とをワーキングエリアとして使用する第１処理を実行中であり、スワップ処理オーバヘッドが閾値以下になるように第１メモリ２０の有効領域の数が設定されていることを前提とする。まず、切替制御部１７０は、内部メモリ２２０の第２有効領域の数が、現時点の第１メモリ２０の有効領域の数に対応しているか否かを判断する（ステップＳ１３０１）。なお、「内部メモリ２２０の第２有効領域の数が、第１メモリ２０の有効領域の数に対応している」とは、内部メモリ２２０の第２有効領域の数（内部メモリ２２０の空き容量のサイズ）を合計したサイズが、第１メモリ２０の有効領域を合計したサイズ以上である場合だけでなく、第１メモリ２０の有効領域を合計したサイズよりも、第１メモリ２０のアクセス速度と内部メモリ２２０のアクセス速度との差を考慮した分だけ小さい所定サイズ以上である場合も該当する。要するに、ステップＳ１３０１では、第１メモリ２０の有効領域と第２メモリ３０をワーキングエリアとして使用する処理を、内部メモリ２２０の第２有効領域（内部メモリ２２０の空き領域）と第２メモリ３０をワーキングエリアとして使用する処理に切り替えても、要求性能を満たすことができるか否かを判断する。
【０１２０】
ステップＳ１３０１の結果が肯定の場合（ステップＳ１３０１：Ｙｅｓ）、図３５に示すように、切替制御部１７０は、第１処理を、ＳｏＣ２１０（プロセッサコア１０１）による第１データの読み書きに用いられるメモリとして内部メモリ２２０を使用（内部メモリ２２０のみを使用）する処理に切り替える制御を行う（ステップＳ１３０２）。また、ステップＳ１３０１の結果が否定の場合（ステップＳ１３０１：Ｎｏ）、図３５に示すように、切替制御部１７０は、第１処理を、ＳｏＣ２１０（プロセッサコア１０１）による第１データの読み書きに用いられるメモリとして第１メモリ２０と内部メモリ２２０を併用する処理に切り替える制御を行う（ステップＳ１３０３）。
【０１２１】
図３６は、図３４のステップＳ１３０２の後の情報処理装置１の動作例を示すフローチャートである。まず、領域制御部１１０は、上述の第１０スワップ処理オーバヘッドを算出する（ステップＳ１３１１）。次に、領域制御部１１０は、ステップＳ１３１１で算出した第１０スワップ処理オーバヘッドと上述の第４閾値とを比較する（ステップＳ１３１２）。第１０スワップ処理オーバヘッドが第４閾値以下の場合（ステップＳ１３１３：Ｙｅｓ）、領域制御部１１０は、第２有効領域の数を減らす制御を行う（ステップＳ１３１４）。そして、ステップＳ１３１１以降の処理が繰り返される。
【０１２２】
一方、ステップＳ１３１１で算出した第１０スワップ処理オーバヘッドが第４閾値よりも大きい場合（ステップＳ１３１３：Ｎｏ）、領域制御部１１０は、該第１０スワップ処理オーバヘッドが上述の閾値以下であるか否かを判断する（ステップＳ１３１５）。ステップＳ１３１５の結果が肯定の場合（ステップＳ１３１５：Ｙｅｓ）、処理は終了する。ステップＳ１３１５の結果が否定の場合（ステップＳ１３１５：Ｎｏ）、領域制御部１１０は、第２有効領域の数を増やす制御を行い（ステップＳ１３１６）、ステップＳ１３１１以降の処理を繰り返す。なお、ステップＳ１３１６において、第２有効領域の数を増やすことができない場合は、図３４のステップＳ１３０１の結果が否定であることと同義であるので、処理は図３４のステップＳ１３０３に移行する。
【０１２３】
なお、図３４のステップＳ１３０２の切り替えは、様々なタイミングで行うことができる。例えば、アプリケーションを実行中に行ってもよい。あるいは、最初のアプリケーション実行時は第１メモリ２０の有効領域と第２メモリ３０をワーキングエリアとして使用し、その次にアプリケーションが実行されるときに、最初のアプリケーション実行時の結果を反映させて、内部メモリ２２０の第２有効領域と第２メモリ３０をワーキングエリアとして使用してもよい。あるいは、アプリケーションのインストール時などに両方が実行され、消費電力が低いまたは実行時間が短い方の方法でアプリケーションが動作するように設定されてもよい。これは他のすべての実施形態についても同様である。また、以上においては仮想記憶方式を利用する前提で説明したが、その限りではない。
【０１２４】
（第７の実施形態の変形例）
例えば図３７に示すように、第１メモリ２０が設けられない形態であってもよい。このようなシステムにおいて、上述の第１の実施形態で説明した第１メモリ２０の省電力制御を、内部メモリ２２０の省電力制御に置き換えることができる。すなわち、情報処理装置１は、第１データを処理する第１処理を実行するＳｏＣ２１０と、ＳｏＣ２１０による第１データの読み書きに用いられ、かつ、ＳｏＣ２１０内部のメモリを示す内部メモリ２２０と、第１データの一部を記憶する第２メモリ３０と、を備える。また、ＳｏＣ２１０上で動作するＯＳは、上述の１以上の第２有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、内部メモリ２２０に記憶されたデータを示す第１１データのうち少なくとも一部を第２メモリ３０へ移動し、第２メモリ３０に記憶されたデータを示す第１２データのうち少なくとも一部を内部メモリ２２０へ移動するための処理量（上述の第４移動処理（第４スワップ処理）の処理量）を示す第６処理情報（第１０スワップ処理オーバヘッド）が閾値以下になるよう、第２有効領域の数を変化させる機能（領域制御部１１０）を有する形態であってもよい。
【０１２５】
また、以上に説明した例とは逆に、内部メモリ２２０と第２メモリ３０をワーキングエリアとして使用する処理を、第１メモリ２０も使用する処理に切り替える形態であってもよい。すなわち、情報処理装置１は、ＳｏＣ２１０と、第１メモリ２０と、内部メモリ２２０と、第２メモリ３０とを備え、情報処理装置１上で動作するＯＳは、内部メモリ２２０のうちデータの読み書きに利用することができる領域を示す１以上の第２有効領域と、第２メモリ３０とを使用して、上述の１以上の第２有効領域より大きいサイズの第１データを処理するための期間内の一定期間において、内部メモリ２２０に記憶されたデータを示す第１１データのうち少なくとも一部を第２メモリ３０へ移動し、かつ第２メモリ３０に記憶されたデータを示す第１２データのうち少なくとも一部を第１メモリ２０へ移動するための処理量（上述の第４スワップ処理の処理量）を示す第６処理情報（第１０スワップ処理オーバヘッド）が閾値を超える場合は、第１処理を、ＳｏＣ２１０による第１データの読み書きに用いられるメモリとして第１メモリ２０と内部メモリ２２０を併用する処理に切り替える制御を行う機能を有する形態であってもよい。この切り替えを行う場合、第１メモリ２０に含まれる複数の領域（電源単位領域）のうちの何れか１以上（要求性能を満たすことができる任意の数）に供給される電力が第２電力から第１電力に変更されて、無効領域から有効領域に変化する。
【０１２６】
（第８の実施形態）
次に、第８の実施形態を説明する。上述の第１実施形態と共通する部分については適宜に説明を省略する。図３８は、本実施形態の情報処理装置１のハードウェア構成の一例を示す図である。図３８の例では、プロセッサ１０は、ＤＲＡＭなどの第１メモリ２０、および、ＮＶＭなどの第２メモリ３０の各々と接続されている。第２メモリ３０は、ＭＲＡＭや３Ｄ  ＸＰｏｉｎｔやＲｅＲＡＭなどの第１実施形態で挙げたバイト単位やプロセッサのキャッシュライン単位などの（ＯＳのページ単位よりも小さい単位）でプロセッサ１０が直接データの読み書きが可能な（アクセス可能な）不揮発メモリなどを想定している。
【０１２７】
プロセッサ１０上で動作するＯＳは、読み書きが要求されたページを示す対象ページが第２メモリ３０上に存在し、かつ、該ページの利用回数（処理を実行するための処理期間よりも短い一定期間における利用回数）が基準値以上の場合（アクセスローカリティが高い場合）、スワップ処理を介して該ページの読み書きを行う（第２メモリ３０上の対象ページを第１メモリ２０へ転送して読み書きを行う）機能（第１手段）を有する。また、ＯＳは、対象ページが第２メモリ３０に存在し、かつ、該ページの利用回数が基準値未満の場合（アクセスローカリティが低い場合）、第２メモリ３０に対してデータの読み書きを直接行う機能（第２手段）を有する。
【０１２８】
図３８に示す第２ページは、アクセスローカリティが低いページであり、対象ページが第２ページである場合、ＯＳが行うページテーブルの設定に基づき、プロセッサ１０は、第２メモリ３０に対して対象ページの読み書きを直接行う。より具体的には、ＯＳは、第２ページを構成する複数のページデータのうち、読み書きが要求されたページデータに対する読み書きを直接行う。各ページを構成するデータ（ページデータ）の構造やサイズは任意であり、ページデータ間で同一であってもよいし異なっていてもよい。また、図３８に示す第１ページは、アクセスローカリティが高いページであり、対象ページが第１ページである場合、ＯＳが行うページテーブルの設定に基づき、プロセッサ１０は、スワップ処理を介して該対象ページの読み書きを行う。
【０１２９】
例えば、読み書きが要求された対象ページが第２メモリ３０上に存在し、かつ、対象ページのアクセスローカリティが低い場合に、該対象ページを第１手段で第１メモリ２０に転送したのちにアクセスする場合、ページ単位で転送してもその利用回数が少ないのであれば、データ転送に要する時間と電力の大部分が無駄になってしまい効率が悪い。それよりは、第２手段で直接キャッシュライン単位などページ単位より小さい単位でアクセスすることで、第１メモリ２０より第２メモリ３０のアクセス速度が遅くても、上記のような無駄が発生することを抑制できる。一方、対象ページが第２メモリ３０上に存在し、かつ、該対象ページのアクセスローカリティが高い場合は、スワップ処理を介してアクセスした方が、対象ページへのアクセスが高速な第１メモリ２０に対してデータの読み書きが行われるので効率が良い。このように、データへのアクセスパターンに応じて（対象ページのアクセスローカリティが低い場合などに）第１アクセスと第２アクセスを混在させることで、不要なページインと、不要にページインされたページのページアウトと、不要なページインによって他の第１メモリ２０に格納されていた方がよい（すぐに使用するために）ページのページアウトなどを抑制できる。これにより、データの移動量が減り（第１メモリ２０を効率よく使えるようになり）、第１メモリ２０の必要な容量が小さくできる（小さい容量で性能を維持できる）ので、小さくしたことにより第１メモリ２０の不要になった領域はパワーオフなどすることができる。したがって、省電力化を図ることができる。
【０１３０】
ここでは、第１データは、第２メモリ３０に対して直接読み書きを行うデータを示す１以上の第６データと、スワップ処理を介して読み書きを行うデータを示す１以上の第７データと、を含む。この場合、第７データのみが第１メモリ２０を利用することになるので、ＯＳ（領域制御部１１０）は、第７データの数に応じて、有効領域の数を決定（第１処理の前に決定）することができる。より具体的には、第１メモリ２０の有効領域の合計サイズが、第７データの合計サイズと同じかそれより小さいサイズになるよう、有効領域の数を決定することができる。上述の第１の実施形態と同様、有効領域に供給される電力は第１電力に設定され、それ以外の無効領域に供給される電力は第２電力に設定される。デフォルトの有効領域の数を決定した後は、上述の第１の実施形態と同様の動作になる。
【０１３１】
また、プロセッサ１０が、スワップ処理を介して読み書きを行うデータを多く含むデータを処理する第４処理（第４アプリケーション）を実行する場合と、第４処理に比べて、第２メモリ３０に対して直接読み書きを行うデータを多く含むデータを処理する第５処理（第５アプリケーション）を実行する場合とを比較すると、第４処理を実行する場合の方が、有効領域の数は多くなる。
【０１３２】
この例では、デフォルトの有効領域の数を決定する際に利用する上述の第７データの数は、アプリケーションからＯＳに通知されるヒント情報に基づいて、特定することができる。ヒント情報は、アプリケーションが処理するデータ（第１データ）に含まれる各データのアクセス特性を示す情報（各データがどのようにアクセスされるのかを示す情報）であり、その形態は任意である。例えばヒント情報は、第１データに含まれる複数のデータごとに、上述の第６データであるか上述の第７データであるのかを示す情報であってもよいし、第１データに含まれる複数のデータごとに、該データが上述の第６データであるか上述の第７データであるのかをＯＳが判断可能な情報であってもよい。例えばヒント情報は、第１データに含まれる複数のデータごとに、ランダムアクセスが行われるデータであるか否かを示す情報であってもよい。ＯＳは、ランダムアクセスが行われるデータについては、上述の第６データであると判断することができる。
【０１３３】
要するに、ＯＳは、第１処理の実行前に該第１処理に対応するアプリケーションから、第１処理で処理するデータを示す第１データに含まれる各データのアクセス特性を示すヒント情報を受け取り、その受け取ったヒント情報に基づいて、上述の第７データの数を特定することができる。
【０１３４】
また、別の方法として、ＯＳが、図３９に示すようなページテーブルに記録されている情報を元に上述の第７データの数を知ることもできる。図３９の例では、本実施形態の説明に必要な部分のみを例示している。これは他の実施形態のページテーブルの例でも同様である。図３９に示すように、ページテーブルは、複数のページ（処理対象のデータに割り当てられる仮想アドレスに対応するページ）ごとに、格納場所と、オフセットと、上述の第６データであるか否かを示す属性情報とを対応付けた情報である。図３９の例では、「Ｎｏ」を示す属性情報は、上述の第７データであることを示す情報（上述の第６データではないことを示す情報）であり、「Ｙｅｓ」を示す属性情報は、上述の第６データであることを示す情報である。要するに、ページテーブル（対応情報）は、第１データに含まれる複数のデータごとに、上述の第６データであるか否かを示す属性情報が対応付けられた情報であると考えることができ、ＯＳ（領域制御部１１０）は、このページテーブルに基づいて、第１データに含まれる第７データの数を特定することができる。なお、上述の第７データの数を知る方法は、これらに限られるものではない。
【０１３５】
また、例えば図４０に示すように、第１データを処理する第１処理を実行する外部装置４０による第１データの読み書きに用いられる第１メモリ２０と、外部装置４０が直接データの読み書きを行うことができ、かつ、第１データの一部を記憶する第２メモリ３０と、第１メモリ２０と第２メモリ３０との間でデータを移動させるコントローラ５０と、を備える記憶装置（メモリモジュール）が設けられる形態であってもよい。この例では、上述のＯＳにより提供される機能（領域制御部１１０等の機能）は、ハードウェア要素であるコントローラ５０により実現される。このような構成の場合、コントローラ５０が、読み書きが要求された対象ページの読み書きを第２メモリ３０に対して直接行うか、スワップ処理を介して行うかを制御する。また、コントローラ５０は、上述のページテーブルを管理し、ページテーブルに基づいて上述の第７データの数を特定し、その特定した第７データの数に応じて、デフォルトの有効領域の数を決定することもできる。また、コントローラ５０は、ＣＰＵなどの外部装置５０上で動作するアプリケーションから上述のヒント情報を受け取ることができるので、このヒント情報に基づいて上述の第７データの数を特定し、その特定した第７データの数に応じて、デフォルトの有効領域の数を決定することもできる。
【０１３６】
以上、本発明の実施形態を説明したが、上述の各実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【０１３７】
また、上述の各実施形態および各変形例は任意に組み合わせることが可能である。
【符号の説明】
【０１３８】
１      情報処理装置
１０    プロセッサ
２０    第１メモリ
３０    第２メモリ
４０    外部装置
５０    コントローラ
６０    第３メモリ
７０    第４メモリ
８０    第５メモリ
９０    第６メモリ
１０１  プロセッサコア
１０２  第１メモリコントローラ
１０３  Ｉ／Ｏコントローラ
１０４  第２メモリコントローラ
１０５  第３メモリコントローラ
１１０  領域制御部
１１１  監視部
１１２  判定部
１１３  有効領域変更部
１１４  電力設定部
１１５  マッピング変更部
１２０  算出部
１３０  切替制御部
１４０  周波数制御部
１５０  処理制御部
１６０  移動処理制御部
１７０  切替制御部
２００  インターコネクト
２１０  ＳｏＣ
２２０  内部メモリ
２３０  バス
【図１】
2017138853.tif 000003
【図２】
2017138853.tif 000004
【図３】
2017138853.tif 000005
【図４】
2017138853.tif 000006
【図５】
2017138853.tif 000007
【図６】
2017138853.tif 000008
【図７】
2017138853.tif 000009
【図８】
2017138853.tif 000010
【図９】
2017138853.tif 000011
【図１０】
2017138853.tif 000012
【図１１】
2017138853.tif 000013
【図１２】
2017138853.tif 000014
【図１３】
2017138853.tif 000015
【図１４】
2017138853.tif 000016
【図１５】
2017138853.tif 000017
【図１６】
2017138853.tif 000018
【図１７】
2017138853.tif 000019
【図１８】
2017138853.tif 000020
【図１９】
2017138853.tif 000021
【図２０】
2017138853.tif 000022
【図２１】
2017138853.tif 000023
【図２２】
2017138853.tif 000024
【図２３】
2017138853.tif 000025
【図２４】
2017138853.tif 000026
【図２５】
2017138853.tif 000027
【図２６】
2017138853.tif 000028
【図２７】
2017138853.tif 000029
【図２８】
2017138853.tif 000030
【図２９】
2017138853.tif 000031
【図３０】
2017138853.tif 000032
【図３１】
2017138853.tif 000033
【図３２】
2017138853.tif 000034
【図３３】
2017138853.tif 000035
【図３４】
2017138853.tif 000036
【図３５】
2017138853.tif 000037
【図３６】
2017138853.tif 000038
【図３７】
2017138853.tif 000039
【図３８】
2017138853.tif 000040
【図３９】
2017138853.tif 000041
【図４０】
2017138853.tif 000042