2009-06-25

Libera Memoryという疑似科学

Macの空きメモリ解放する」という触れ込みであちこちで話題になっているらしい。信じられない。まだこんなソフトに騙されている人がいるなんて。それを平然と紹介している某ニュースサイトにも失望した。

結論から先に書こう。この類のソフトが行っている「バッファキャッシュ削除」は、パフォーマンス改善するどころか逆に悪影響を与える。特に、最近のように大容量のメモリを搭載しているコンピュータでは、そのアドバンテージを完全に殺してしまうことになる。この類のソフトは、使うべきではない。

まず、「空きメモリ」とは何か。これは、メインメモリのうち利用されていない領域のことである。当然ながら、アプリケーションを大量に起動したり、大量のデータを扱ったりすると、空きメモリが減る。そして、「実行中のアプリケーションが要求するメモリ量 > 搭載しているメインメモリ量」となったとき、OSは使っていない領域をメインメモリからハードディスクなどの二次記憶に追い出し、メインメモリに空きを作る。これが「ページアウト」である。ハードディスクなどの二次記憶は、メインメモリに比べてアクセスがとんでもなく遅い。このため、ページアウトが発生すると、パフォーマンスは極端に低下する。そのため、メインメモリ量は実行中のアプリケーションが要求するメモリ量より多いことが望ましい。

それでは、空きメモリが潤沢にある場合を考えてみる。空きメモリが潤沢にあるということは、「実行中のアプリケーションが要求するメモリ量 < 搭載しているメインメモリ量」であり、空いている領域というのは「余っている」状態である。これは、非常にもったいない

ここで、先に「ハードディスクなどの二次記憶は、メインメモリに比べてアクセスがとんでもなく遅い」と書いたことを思い出して欲しい。メインメモリに空きがあるのならば、二次記憶から読み取ったデータメインメモリにとっておく。これが「バッファキャッシュ」である。こうしておけば、次にそのデータアクセスがあったときには、遅い二次記憶アクセスすることなく、メインメモリから素早くデータを持ってくることができる。これは、パフォーマンスを大きく改善させる。ある程度メインメモリが潤沢にある環境では、大きなソフトを最初に起動するときHDDがガリガリ言うが、2回目以降の起動ではHDDは静かだしソフトは1回目より素早く起動する、という現象を体験した人も多いだろう。これこそが、バッファキャッシュ恩恵である。

最近OSでは、空きメモリを積極的にバッファキャッシュとして利用する。このため、見た目ではメインメモリの空きがとても少なく見えるかもしれない。バッファキャッシュが「なかなか消えてくれない」のは当たり前なのだ。次にそのデータを使うときのために、そこにあるのだから。

では、バッファキャッシュメインメモリを占有し、空きメモリが少ない状態で、もしアプリケーションメモリ領域を要求した場合にはどうなるか。OSバッファキャッシュのうち古いデータから消去して、ページアウトを発生させることなく空きメインメモリを増やす。バッファキャッシュによってメインメモリが「占領」されているように見えても、それがパフォーマンスに影響を与えるわけではないのだ。

OSメモリ管理戦略によっては、バッファキャッシュ領域が全て開放されていなくてもページアウトが発生することもある。これは、「あまり使わないデータメインメモリ上に保持しておくより、よく使うデータメインメモリキャッシュした方がお得」という考えに基づくものだ。よほどパフォーマンスが悪いと感じるのではない限り、多少のページアウトは気にする必要はない。逆に、パフォーマンスが悪いと感じるほどページアウトが発生しているようであれば、それは純粋メインメモリが足りていない。これは、件のソフトでどうにかできる問題ではない。

ここでもし、件のソフトを利用して、バッファキャッシュを無理矢理解放するとどうなるか。確かに空きメモリは増えるが、それは言うなれば「死にメモリ」である。よく使う可能性の高いバッファキャッシュを消されては、毎回二次記憶アクセスしなければならなくなる。これは、パフォーマンスに悪影響を及ぼすと容易に想像がつく。

メインメモリ管理は、OS重要な役割の一つだ。そのため、過去数十年にわたって研究や実証が行われ、パフォーマンスを良くするために工夫されている。それを無駄にするようなことはして欲しくない。

トラックバック - http://anond.hatelabo.jp/20090625232549