アプリケーションソフトウェアを高速化するか、アプリケーションの起動を高速化することを目的とするソフトウェア。
OS上にユーザアプリケーションとして常駐させるか、定期的に起動することで高速化処理を行う仕様となっているものが多い。

どのようにメモリを最適化するかの手法はメモリ最適化ソフトによって異なるが、主に2つの処理で行われているらしい。

  1. 使用されていないメモリをスワップ領域に待避させ、空きメモリを確保する
  2. 物理メモリの断片化を解消することで高速化が可能となる

メモリとハードディスクのアクセス速度はそれぞれnsecとmsecのオーダであるため、前者の空き物理メモリの確保はある程度有効と考えられる。

しかしどのプロセスの使用頻度が低いのか、またプロセス中のどのメモリがワーキングセットからはずれているのかをOS以外のアプリケーションが知ることが可能かわからない。Win32APIで提供されている場合は可能であるが、プロセスのメモリは独立であり、他からの干渉を受けないという原則論からははずれてしまう。

APIのサポートが期待できない場合はメモリ最適化ソフトがメモリのアロケートと、線形メモリアクセスによるメモリ消費を行い、OSのページャにページングを起動させることでメモリ待避処理を行う。その後メモリ最適化ソフトが当該メモリを解放することで空き物理メモリを生成する。
OSのページャはページフォールト時にその都度、要求量のメモリ割り当てを行っている。OSのメモリ管理はメモリ配分を公平に行い、すべてのプロセスを平等に扱うポリシが一般的だと思われる。この最適化ツールの動きはよりクライアントOS向け、起動中のアプリおよびこれから起動するアプリケーションを重視するポリシになっていると考えられる。デスクトップ/端末向けOSのページャ/スワッパのアルゴリズムは改善の余地があるかもしれない。

近代的なOSはすべて仮想メモリをサポートしている。OSはユーザプログラムに仮想メモリを提供することで、物理メモリの不連続性を許容することが可能となった。仮想メモリと物理メモリはページテーブルによってマッピングがなされ、その高速化のためプロセッサにTLBが実装された。
物理メモリの不連続性はTLBミスととキャッシュミスとして遅延になるが。しかし1回のTLBミスで4kbyte or 4MByteのエリアが有効となり、1回のキャッシュミスで1ラインのキャッシュが更新される。不連続性による性能悪化はそれほど高くないのではないだろうか。

書いていて気づいたが、Unix向けの最適化ソフトは聞いたことがない。やはりAPIのサポート次第なのだろうか?それとも…


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: Mon, 26 Sep 2005 01:02:24 JST (4800d)