写真1●テストに使ったパソコン
デルコンピュータの「Dimension 8300」である。
図4●CPUの2次キャッシュ容量と動作周波数を変えたときのテスト結果
左がアプリケーションの起動時間で,右がファイル操作にかかった時間。どちらもキャッシュ容量の違いによる影響が大きい。動作周波数の変化による影響は小さい。
図5●主記憶のデータ転送速度によるアプリケーションの起動時間の違い
起動時間はほぼ一致する。
図6●Windows XPのプリフェッチ機能
Windows XPは,アプリケーションの起動後,どの実行ファイル(DLLなど)が10秒以内に呼び出されるかを覚えておく。2回目以降の起動では,その実行ファイルが呼び出される前に先読みしておく。このためアプリケーションの起動が高速になり,体感速度が上がる。OSの起動時も同じように機能する。OSの起動後2分以内に呼び出される実行ファイルを先読みする。

2次キャッシュが大きいと1~5割高速

 CPUのキャッシュが,主記憶へのアクセス速度の遅さをどの程度補えるかを実際に測ってみた。2次キャッシュの容量が512KバイトのPentium 4と128KバイトのCeleronの比較である。

 動作周波数はどちらも2.4GHzの製品を選んだ。Pentium 4は,CPUの高速化技術である「HT(Hyper-Threading)テクノロジ」を搭載していない旧世代のものを使った。旧世代のPentium 4はFSBが400MHzの製品と533MHzの製品があるが,Celeronにあわせて400MHzの製品を選んだ。つまりCeleronとの違いは2次キャッシュの容量だけである。テスト機にはデルコンピュータの「Dimension 8300」を使った(写真1[拡大表示])。

 調べたのはアプリケーションの起動時間とファイルの操作時間である。テストした結果,キャッシュ容量が大きいPentium 4の方が1~5割処理時間が短かった(図4[拡大表示])。

 それでは,CPUや主記憶の速度が変わるとどうなるだろうか。本来なら,どちらも大きな影響があるはずである。CPUの動作周波数が上がれば,演算性能が向上し,主記憶のアクセス速度が向上すれば,単位時間当たりのデータ処理量が増えるからだ。

 CPUの動作周波数の影響を調べるために,前述の2.4GHz動作のPentium 4とHTテクノロジに対応した3.2GHz動作のPentium 4を比較した(図4)。動作周波数が上がっても,キャッシュ容量の違いほどには速度が上がらなかった。主記憶のデータ転送速度に関しては,変更してもほとんど処理時間に違いが出なかった(図5[拡大表示])。つまり,CPUとメモリーに関しては,両者の間の2次キャッシュ容量がほぼ体感速度を決めていた。

 キャッシュ容量が決め手となるなら,CPUの選択とは独立してキャッシュ容量を変えられた方が自由度が広がる。しかしキャッシュは,米Intel社と米Advanced Micro Devices社(AMD)のどちらのCPUでも内蔵されてしまっている。CPUを選ぶとキャッシュ容量は自動的に決まってしまうのである。とはいえキャッシュの効果を論理的に議論する際には,キャッシュはCPUや主記憶とは独立した存在として考えた方が分かりやすい。

アプリの起動を高速化するWindows XP

 主記憶とハードディスクの間には,さらに大きな速度のギャップがある。半導体素子でできた主記憶と,ディスクを物理的に回転させて読み書きするハードディスクでは当然,大きな差がある。その間を埋めるキャッシュには大きな効果が期待できる。

 主記憶のデータ転送速度は,最高性能のPC3200をデュアル・チャネル構成で使う場合で6.4Gバイト/秒。この規格上の速度が主記憶を読み書きする最高速度になる。ハードディスクの場合は,少し事情が異なる。チップセットとハードディスクの間のデータ転送速度は規格で決まっている。ATA/100なら100Mバイト/秒,最近登場したシリアルATA/150なら150Mバイト/秒である。ところがハードディスク内部でディスクから実際にデータを読み書きする速度は機種ごとに異なる。100Mバイト/秒を超えるハイエンド製品もあるが,通常のデスクトップ向けでは,40M~80Mバイト/秒といったところ。いずれにしても,主記憶のデータ転送速度と比べると最高で100倍程度の差がある。

 主記憶とハードディスク間のキャッシュは,この転送速度の違いを隠蔽する役割がある。種類は大きく二つある。OS(Windows)が主記憶を使って実装しているキャッシュ機能と,ハードディスクが内蔵するキャッシュである。

 Windowsは,一度読み込んだファイルを主記憶上に記憶しておくキャッシュ機能を持つ。次に同じファイルにアクセスするときに高速に読み書きできるようになる。Windowsで一度起動したアプリケーションをもう一度実行するとすぐに立ち上がるが,それはWindowsのキャッシュ機能によるものである。

 Windows XPではこのキャッシュに「プリフェッチ」という新しい機能が付加された(図6[拡大表示])。Windows XPは,OS/アプリケーションが起動したあとに,DLL(Dynamic Link Library)などの実行ファイルのどれが読み出されるかを覚えておく。次にOS/アプリケーションが起動されたときには,いずれ読み出されるDLLファイルなどを早めに主記憶上のキャッシュ領域に読んでおく。するとDLLファイルの起動を要求されたときに主記憶から高速に読み出せる。DLLファイルをハードディスクから読み出す時間が見かけ上短くなる注5)

(安東 一真)