Cache/WriteBack/WriteThroughについて


キャッシュ/ライトバック/ライトスルーという言葉は、プロセッサに興味を持ち出したなら聞いたことがある言葉だと思います。しかし、その言葉の意味を知らず、なんだか分からないけど「ライトバックのほうが性能が良い」という風に考えている人も案外多いのではないかと思います。ここでは、そんな人のためにキャッシュ/ライトバック/ライトスルーについて説明をしたいと思います。

[0]キャッシュ
キャッシュ(メモリ)とは、プロセッサとメインメモリの間におかれた高速な記憶媒体です。メインメモリのアクセス速度というのは遅く、命令やデータを取り出すときにここにアクセスすると計算機全体の処理速度が低下します。例えばアクセススピード60nsのメモリなら、一回アクセスするごとに理論上60nsかかります。勿論メモリアクセスは1回ではないので、60nsという人間から見るとごく小さな時間でも、これが積もり積もると馬鹿にならない遅さになります。
この遅いメインメモリにできるだけアクセスしないように、メインメモリより遥かに高速なメモリによく使うデータや命令を置いておき、ここにアクセスをすれば計算機は全体として高速化することになります。これがキャッシュの基本的な考え方です。キャッシュの容量はメインメモリに比べて非常に小さく、現在の8086系のプロセッサなら8KB〜2048KBです。

メインメモリにアクセスせず、高速なキャッシュにアクセスすることで高速化を図る

現在主流の8086系プロセッサは通常二段階以上のキャッシュを持っています。プロセッサに近いほうからレベル1キャッシュ(L1)、レベル2キャッシュ(L2)、レベル3キャッシュ(L3)、・・・という風になっています。L1は命令キャッシュとデータキャッシュ、L2以降は汎用キャッシュとなっているのが普通です。なお、現行の8086系計算機の動作速度に大きな影響を与えるのはプロセッサのL2であるため、以下の議論は全てキャッシュはL2であるものとします。

さて、キャッシュを用いて計算を行うとひとつ問題が生じます。それはメインメモリとキャッシュの内容の整合性の問題です。キャッシュはブロックという単位に分かれており、データはこのブロックごとに入るようになっています。

キャッシュはブロック単位に分かれていて、ブロックごとにデータを入れる

そしてキャッシュのどのブロックにもデータが入って一杯になると、不要なブロックをクリアし、そこに新たなデータを入れます。

一杯になったら不要なブロックのデータを追い出し(ここではblock3のdata4)空いたところに新しいデータ(ここではdata8)を入れる

そこでキャッシュに計算結果を書き込み、後にその書き込まれたブロックが追い出された場合、メインメモリに計算結果が書き込まれず、データの整合性が取れないことになります。これを防ぐために「ライトバック」「ライトスルー」という二つのキャッシュの書きこみ方式があるわけです。

[1]ライトバック
ライトバックはキャッシュが一杯になるまではキャッシュ上で演算を行い、キャッシュのブロックが追い出されるときにその追い出されるデータをメインメモリに書き込む方式です。すなわち、キャッシュが一杯になるまではメインメモリへのアクセスは読み込みだけになります。キャッシュに必要なデータがある間はメモリ読み込み/書き込みにキャッシュがかかるため、計算機は全体として高速になります。

[2]ライトスルー
ライトスルーはキャッシュに書き込むとき同時にメインメモリにも同じデータを書き込む方式です。読み込みにはキャッシュがかかりますが、書き込みにはキャッシュがかかりません。すなわち、データ書き込みは常にメインメモリのアクセス速度で行うことになり、計算機はその分が足かせになり低速化の原因となります。

[3]キャッシュ動作速度
キャッシュもメモリであるため、メインメモリに動作速度があるのと同様に(いわゆるPC66/100/133/700/800など)キャッシュにも動作速度があります。動作速度は動作クロックと考えても差し支えありません。当然動作クロックが高いほうが高性能です。以下に現行の8086系プロセッサのL2動作速度と制御法を示します。

制御方式 プロセッサ 動作速度(プロセッサ動作クロックに対して)
ライトバック PentiumIII(Coppermine)/Celeron(Coppermine-128K)/PentiumIIXeon/
PentiumIIIXeon/PentiumIIODP/PentiumPro/Pentium4/K6-III/K6-2+/
K6-III+/K6-IIIE+/Athlon(Thunderbird)/Duron
同クロック動作
PentiumII/PentiumIII(Katmai)/Athlon(K7) ハーフクロック動作
ライトスルー Celeron(Mendocino) 同クロック動作
(参)L2なし Celeron(Covington)/WinChipC6/WinChip2/WinChip2A/MII/
CyrixIII/mP6/MMXPentium以前のプロセッサ
 

 

MATE-R改造の表に戻る


last modified on 1st,August,2000.
written by 98.