(57)【要約】【課題】高い計算処理能力を必要とせず、ゼロページ等の頻出のパターンを持つページが大量にメモリ内に蓄積されることを抑制することができるメモリ管理装置、メモリ管理方法及びプログラムを提供すること。【解決手段】このメモリ管理装置では、書き込みデータのパターンが頻出パターンである場合に（ステップ１０１のＹＥＳ）、その書き込みデータがメモリに既に保持されていれば（ステップ１０３のＹＥＳ）、それ以後は、その頻出パターンを持つ書き込みデータについては共有参照が設定される。これにより、頻出パターンを持つデータの容量がメモリ内で大量に蓄積されることを抑制することができる。これによりメモリの空き容量が増え、効率良くメモリを使用することができる。【選択図】図２
2012014493.tif 000002
【特許請求の範囲】
【請求項１】
メモリへの書き込み命令の対象となるデータである書き込みデータのパターンが、頻出パターンであるか否かを判定する判定手段と、
前記判定手段により、前記書き込みデータのパターンが前記頻出パターンであると判定された場合であって、前記頻出パターンのデータが前記メモリに既に保持されている場合、前記頻出パターンを持つ前記書き込みデータについて共有参照を設定する設定手段と
を具備するメモリ管理装置。
【請求項２】
前記頻出パターンは、同じ値のデータが所定数連続したパターンである
請求項１に記載のメモリ管理装置。
【請求項３】
前記頻出パターンは、コンピュータの学習により蓄積されたパターンである
請求項１または２に記載のメモリ管理装置。
【請求項４】
前記頻出パターンは、コピー元のデータパターンである
請求項１または２に記載のメモリ管理装置。
【請求項５】
前記判定手段は、予め定められた頻出のパターンに、前記書き込みデータのパターンが一致するか否かにより、前記書き込みデータのパターンが頻出パターンであるか否かを判定する
請求項１または２に記載のメモリ管理装置。
【請求項６】
メモリへの書き込み命令の対象となるデータである書き込みデータのパターンが、頻出パターンであるか否かを判定し、
前記判定手段により、前記書き込みデータのパターンが前記頻出パターンであると判定された場合であって、前記頻出パターンのデータが前記メモリに既に保持されている場合、前記頻出パターンを持つ前記書き込みデータについて共有参照を設定する
メモリ管理装置によるメモリ管理方法。
【請求項７】
メモリへの書き込み命令の対象となるデータである書き込みデータのパターンが、頻出パターンであるか否かを判定し、
前記判定手段により、前記書き込みデータのパターンが前記頻出パターンであると判定された場合であって、前記頻出パターンのデータが前記メモリに既に保持されている場合、前記頻出パターンを持つ前記書き込みデータについて共有参照を設定する
ことをメモリ管理装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータのメモリ内のデータを管理するメモリ管理装置、メモリ管理方法及びプログラムに関する。
【背景技術】
【０００２】
コピーオンライト機構では、例えば子プロセスの生成時において、書き換えの可能性があるページについてのみ物理メモリ領域が確保され、書き換えの可能性がないページについてはその親プロセスの物理ページが共有参照される。そして、書き込み時に初めて子プロセスのすべてのデータの物理メモリ領域が確保され、コピーが実行される。
【０００３】
ところで、アプリケーションプログラムはメモリが初期状態でゼロデータが書き込まれていることを期待する場合が多い。この際、オペレーティングシステムは上記のコピーオンライト機構を用いることにより、ゼロページ（ページ内のデータがすべてゼロデータでなる）が共有参照されるようになり、効率化が図られる。
【０００４】
コピーオンライト機構以外にも、同じデータを共有するシステムは存在する。例えば特許文献１に記載の方法では、データブロックのハッシュ（指紋）を用いてモジュールが同じデータを探し出し、共有を試みている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−５４３１９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところが、上記のようにコピーオンライト機構を用いる場合であっても、次のような問題があった。例えばアプリケーションソフトウェアには、メモリにゼロデータが書き込まれていることを期待する場合に、アプリケーション自身が起動時にその複数のページについてすべてゼロで埋め直す処理をするものが多くある。したがって、結果的にコピーオンライト機構が有効に働かず、ゼロページが大量に増えるという問題があった。
【０００７】
一方、特許文献１の方法のようにハッシュを用いるシステムでは、ハッシュ値の計算処理にコストがかかる。また、同一ハッシュデータの検索処理にもコストが必要となるため、処理能力の低い計算機などでは適用が困難である。
【０００８】
以上のような事情に鑑み、本発明の目的は、高い計算処理能力を必要とせず、ゼロページ等の頻出のパターンを持つページが大量にメモリ内に蓄積されることを抑制することができるメモリ管理装置、メモリ管理方法及びプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一形態に係るメモリ管理装置は、判定手段と、設定手段とを具備する。  
前記判定手段は、メモリへの書き込み命令の対象となるデータである書き込みデータのパターンが、頻出パターンであるか否かを判定する。  
前記設定手段は、前記判定手段により、前記書き込みデータのパターンが前記頻出パターンであると判定された場合であって、前記頻出パターンのデータが前記メモリに既に保持されている場合、前記頻出パターンを持つ前記書き込みデータについて共有参照を設定する。
【００１０】
本発明では、書き込みデータのパターンが頻出パターンである場合に、その書き込みデータがメモリに既に保持されていれば、それ以後は、その頻出パターンを持つデータについては共有参照が設定される。これにより、頻出パターンを持つデータの容量がメモリ内で大量に蓄積されることを抑制することができる。また、本発明の処理では、ハッシュデータが用いられることもないので、高い計算処理能力は必要とされない。
【００１１】
前記頻出パターンは、同じ値のデータが所定数連続したパターンでもよい。前記頻出パターンは、コンピュータの学習により蓄積されたパターンであってもよいし、前記頻出パターンは、コピー元のデータパターンであってもよい。
【００１２】
前記判定手段は、予め定められた頻出のパターンに、前記書き込みデータのパターンが一致するか否かにより、前記書き込みデータのパターンが頻出パターンであるか否かを判定してもよい。
【００１３】
本発明に係るメモリ管理装置によるメモリ管理方法は、メモリへの書き込み命令の対象となるデータである書き込みデータのパターンが、頻出パターンであるか否かを判定する。
前記判定手段により、前記書き込みデータのパターンが前記頻出パターンであると判定された場合であって、前記頻出パターンのデータが前記メモリに既に保持されている場合、前記頻出パターンを持つ前記書き込みデータについて共有参照が設定される。
【００１４】
本発明に係るプログラムは、上記のメモリ管理方法をメモリ管理装置に実行させるためのプログラムである。
【発明の効果】
【００１５】
以上、本発明によれば、高い計算処理能力を必要とせず、ゼロページ等の頻出のパターンを持つページが大量にメモリ内に蓄積されることを抑制することができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、本発明の一実施形態に係るメモリ管理装置を実現するためのシステム構成を示すブロック図である。
【図２】図２は、メモリ管理装置による処理を示すフローチャートである。
【図３】図３は、図２におけるステップ１０２の処理を示すフローチャートである。
【図４】図４は、図２におけるステップ１０４の処理を示すフローチャートである。
【図５】図５Ａ及びＢは、書き込みデータの論理イメージ及び物理メモリブロックを示す図であり、ゼロページのパターンが頻出パターンとなる例を示す。
【図６】図６Ａ及びＢは、書き込みデータの論理イメージ及び物理メモリブロックを示す図であり、コピー元のデータパターンが頻出パターンとなる例を示す。
【発明を実施するための形態】
【００１７】
以下、図面を参照しながら、本発明の実施形態を説明する。
【００１８】
[メモリ管理装置を実現するための構成]
図１は、本発明の一実施形態に係るメモリ管理装置を実現するためのシステムの構成を示すブロック図である。このシステム１００は、コンピュータが備えるハードウェア及びソフトウェアで構成され、メモリ２８、メモリマネージャ２７、フレームワーク２６及びメモリユーザ２５を有する。
【００１９】
上記コンピュータは、図示せずともＣＰＵ（Central Processing Unit）、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置等の公知のハードウェア資源を備える。ここでメモリ２８は主にＲＡＭに相当するが、公知のＯＳ（Operating System）が持っている仮想メモリの技術により、ＲＡＭ及び補助記憶装置を仮想的な１つの記憶装置とみなすことも可能である。
【００２０】
以下の説明において、単に「メモリ」と記載する場合、基本的にはそれは物理メモリを指すが、論理メモリ及び物理メモリを総称したものを表現する場合、あるいは本実施形態の技術を理解する上で、それが論理メモリでも物理メモリでもどちらでもよい場合もある。しかし、「メモリ」と記載しただけでは理解しづらい箇所などは、「物理」及び「論理」を区別して表現する。
【００２１】
メモリユーザ２５は、実際にメモリ２８の確保（物理メモリ２８の確保）や読み書きを要求する。ここで、メモリマネージャが、後述するようにガベージコレクタまたは仮想コンピュータにおけるホストＯＳである場合には、「メモリの確保」でいう「メモリ」は、厳密な意味での「物理メモリ」にはならない。
【００２２】
フレームワーク２６は、メモリユーザ２５から指令を受けてメモリ２８上のデータのコピーや書き込み処理などを行う。
【００２３】
メモリマネージャ２７は、メモリ２８の管理を行い、メモリ２８とフレームワーク２６との間で読み書きを仲介する。
【００２４】
本システム１００の具体的な構成例としては、メモリユーザ２５がアプリケーションソフトウェア（以下、単にアプリケーションという。）、フレームワーク２６が標準ライブラリ、メモリマネージャ２７がＯＳといった構成が挙げられる。
【００２５】
他にも、メモリユーザ２５がアプリケーション、メモリマネージャ２７がガベージコレクタといった構成もある。あるいは、メモリユーザ２５が仮想コンピュータにおけるゲストＯＳ、フレームワーク２６がバーチャルマシン、メモリマネージャ２７がホストＯＳといった構成も挙げられる。
【００２６】
このような構成において、後述するようにフレームワーク２６が書き込み処理を判別し、メモリマネージャ２７に共有参照のための指令を送る。
【００２７】
[メモリ管理装置による処理]
図２〜４は、メモリ管理装置による処理を示すフローチャートである。以下のメモリ管理装置の処理は、ＲＯＭまたは補助記憶装置に記憶されたソフトウェアと、上記したハードウェア資源との協働により実現される。また、このフローチャートの説明では、メモリユーザ２５としてアプリケーション、フレームワーク２６として標準Cライブラリ、メモリマネージャ２７としてLinuxカーネルを用いた例を示す。このフローチャートによる処理は、後述するように物理メモリ２８のブロックサイズ単位で繰り返し行われる。
【００２８】
まずアプリケーションが、標準Cライブラリ（以下、単にライブラリという。）のメモリ２８への書き込み関数を呼び出す。具体的には、アプリケーション及びライブラリによってメモリ２８の書き込み先の論理ブロックアドレスが指定され、メモリマネージャ２７を介して物理ブロックアドレスが指定される。
【００２９】
ライブラリは、メモリ２８への書き込み命令の対象となるデータである書き込みデータのパターンが頻出パターンであるか否かを判定する（ステップ１０１）。このとき、ＣＰＵ及びライブラリはその判定処理を実行する判定手段として機能する。
【００３０】
ここで、例えばページング方式では、ブロックサイズはデータの書き込み時の書き込みサイズの単位であるページ単位に相当し、典型的には４ＫＢである。
【００３１】
頻出パターンとは、ここでは物理メモリ２８の１ブロックのサイズを持つデータのパターンであって、以下のように規定されるパターンである。
【００３２】
例えばステップ１０１において、固定値を書き込む関数memsetでは、その固定値が頻出値であるか否かがチェックされる。固定値とは、例えば１６進数ならば00値、FF値、FE値などである。すなわちこの場合、１ブロックのすべてが固定値であるデータパターンは頻出パターンとなる。実際にはステップ１０１では、固定値が頻出値であるか否かが判定され、かつ、その頻出値が連続して構成されるデータサイズが、メモリ２８のブロックサイズ以上、つまり１ブロックのサイズ以上であるか否かが判定されればよい。
【００３３】
あるいは、頻出パターンの例として、メモリコピー関数memcpyでは、コピー元のデータパターンが頻出パターンとなる。すなわち、後に図６Ａ及びＢで説明するように、以前に書き込まれたデータと同一内容のデータの再度の書き込み要求があった場合における、その同一内容のデータパターンである。
【００３４】
このように、頻出パターンとして、典型的には頻出が予想されるパターンが予め規定される。
【００３５】
頻出パターンが予め規定される以外にも、コンピュータの学習によって、頻出パターンが規定されてもよい。例えば、ステップ１０１における書き込みデータの情報を蓄積し（プロファイリングし）、同一の内容の情報の書き込み要求回数が閾値を超えた場合、その書き込みデータのパターンを頻出パターンとする方法がある。学習の方法としてはその他にも公知の様々な方法が採用され得る。
【００３６】
ここで図２に示したフローチャートのステップ１０１、１０３及び１０５〜１０７について、図５Ａ及びＢを参照しながら説明する。図５Ａは、書き込みデータを書き込む前の、物理メモリ２８内のブロック及びその論理イメージを示し、また、それらの間の図はメモリブロックの参照ポインタを示している。この図５Ａに示す例では、４つのブロックが示され、これら４つのブロックには異なるデータがそれぞれ保持されている。
【００３７】
図５Ｂは、図５Ａに示したメモリ内に、書き込みデータの書き込み（上書き）が行われたメモリの状態を示す図である。図５Ｂの「書き込みデータ」の例として、上から２番目のブロックの一部の値、及び、３及び４番目のブロックのすべての値が、00値である、３つ分のブロックのデータが示されている。したがって、２番目のブロックのデータパターンは頻出パターンではなく、３及び４番目のブロックのデータパターンはそれぞれ頻出パターンとなる。なお、上述したように、図２に示した処理はブロック単位で繰り返し実行される。
【００３８】
ステップ１０１において、例えば図５Ｂの上書きイメージにおける２番目のブロックのように、書き込みデータのパターンが頻出パターンではない場合、従来通りの手法でメモリ２８へ書き込みが行われる（ステップ１０２）。その後、アプリケーションへ処理が戻る。図３は、そのステップ１０２の内容を示すフローチャートであり、従来の処理を示すものである。
【００３９】
図３では、まず書き込みデータの書き込み先として指定されたメモリブロック（以下、単にブロックという。）が共有ブロックであるか否かが判定される（ステップ２０１）。共有ブロックとは、典型的には、複数のプロセス間で物理メモリ２８が共有される場合に、その共有参照の対象となるブロックである。書き込み先のブロックが共有ブロックである場合、そのブロックへの書き込みは禁止されているので、メモリ２８の新たなブロックが確保される（ステップ２０２）。そして、図５Ｂの物理メモリブロックの２番目のブロックに示すように、そのブロックのデータがコピーされ（ステップ２０３）、書き込みデータの書き込みが実行される（ステップ２０４）。この場合、アプリケーションから要求された書き込みデータは、１ブロックの一部分のデータである場合もある。
【００４０】
図２のフローチャートの説明に戻る。ステップ１０１において、書き込みデータのパターンが頻出パターンであると判定された場合（図５Ｂの例の３番目のブロック）、次の処理が実行される。その書き込みデータ全体（ここでは１ブロックサイズを超えるデータ）のうち、頻出パターンに一致するパターン（以下、指定パターンという。）のデータと同じ内容のデータを持つブロックが確保されているかが判定される（ステップ１０３）。つまり、指定パターンのデータが既に物理メモリ２８内に保持されているか否かが判定される。図５Ｂの３番目のブロックの例の場合、そのブロックパターンである指定パターン（すべて00値で埋められたページであるゼロページ）が、メモリ２８内に未だ保持されていないため（ステップ１０３のＮＯ）、従来通りの処理が行われる（ステップ１０４）。
【００４１】
図４は、そのステップ１０４の処理を示すフローチャートである。この処理は、基本的に図３に示した処理と同様であり、図３におけるステップ２０３がない点で図３の処理と異なる。ステップ１０１において書き込みデータのパターンが頻出パターンであると判定され、１ブロックを頻出パターンのデータで全て書き換えることが保障されているため、ブロックデータのコピーは不要となる。しかし、メモリマネージャの実装によっては、データのコピーが行われる場合もある。
【００４２】
一方、図５Ｂの上書きイメージの４番目のブロックの例の場合、ステップ１０１→１０２→１０３を経て、ステップ１０３においてＹＥＳ判定がなされる。すなわち、４番目のブロックの例では、既に３番目のブロックの処理においてその指定パターンのブロックが確保済みであるので、ＹＥＳ判定がなされ、処理がステップ１０５に進む。
【００４３】
ステップ１０５では、書き込み先として指定されたブロックは元々共有ブロックであったか否かが判定される。元々とは、例えば図５Ａに示したように、書き込みデータを書き込む前の時点のことを意味する。図５Ａ及びＢの例で、４番目のブロックが元々共有ブロックではない場合（ステップ１０３のＮＯ）、その４番目のブロックは自由に処分が可能となり不要となるため解放され（ステップ１０６）、その指定パターンを持つ３番目のブロックについて、共有参照が設定される（ステップ１０７）。図５Ｂでは、解放された４番目のブロックが破線で示されている。
【００４４】
なお、ブロックの解放や共有参照の設定等は、Linuxカーネルにより実行され、ＣＰＵ及びLinuxカーネルは、共有参照の設定手段として機能する。
【００４５】
一方、ステップ１０５でＹＥＳ判定の場合は、共有参照の設定をそのまま維持する（ステップ１０７）。
【００４６】
図６Ａ及びＢは、書き込みデータの他の例を示す。この例はデータがコピーされる形態を示しており、図６Ａ及びＢの論理イメージに示すように、上から１及び２番目のブロックのデータがコピーされる例である。コピー元である１及び２番目のブロックのデータパターンがそれぞれ頻出パターンとなる。図２で示した処理に従えば、１及び２番目のブロックについて共有参照が設定され、３及び４番目のブロックが空き領域となる。
【００４７】
以上のように本実施形態では、書き込みデータのパターンが頻出パターンである場合に、その書き込みデータがメモリ２８に既に保持されていれば、それ以後は、その頻出パターンを持つ書き込みデータについては共有参照が設定される。これにより、頻出パターンを持つデータの容量がメモリ２８内で大量に蓄積されることを抑制することができる。これによりメモリ２８の空き容量が増え、効率良くメモリ２８を使用することができる。
【００４８】
本発明者らは、本システム１００を用いて実際にメモリ管理の実験を行った。この実験によれば、従来技術に比べ、本実施形態では約１３％のゼロデータの削減効果が見られた。
【００４９】
また、本実施形態の処理では、例えばステップ１０３→１０５を経る工程では、同一データを持つブロックの書き込み処理が省略されるので、処理速度が向上する。また、同一内容のデータのブロックが共有参照されることにより、ＣＰＵのデータキャッシュのヒット率も増加する。
【００５０】
さらに、本実施形態では、従来技術のようなハッシュデータが用いられることもないので、高い計算処理能力は必要とされない。
【００５１】
特に、アプリケーションは、ブロックが確保された後に、それら確保されたすべてブロックをゼロページで埋めるものが多く、このようなアプリケーションに対して本システム１００が有効に働く。
【００５２】
本実施形態では、上述したように、ライブラリがステップ１０１の判定処理を実行するので、その判定処理や、同一データを保持するブロックの検索が容易になる。また、本システム１００を実現するために、アプリケーション等のメモリユーザのプログラムを変更する必要もない。
【００５３】
本発明に係る実施形態は、以上説明した実施形態に限定されず、本発明は、本発明の要旨を逸脱しない範囲で、他の種々の実施形態を取り得る。
【符号の説明】
【００５４】
２５…メモリユーザ
２６…フレームワーク
２７…メモリマネージャ
２８…メモリ
１００…メモリ管理装置を実現するためのシステム
【図１】
2012014493.tif 000003
【図２】
2012014493.tif 000004
【図３】
2012014493.tif 000005
【図４】
2012014493.tif 000006
【図６】
2012014493.tif 000007
【図５】
2012014493.tif 000008