第 8 章 キャッシュ構成
8.7 ライト・アロケート
ライト・アロケートは、イネーブルのときで、プロセッサがキャッシャブル・ライン に対しペンディング・メモリ・ライト・サイクルをもっていて、当該ラインがその時 点で
L1
データ・キャッシュに存在しない場合に発生する。この場合、プロセッササイクルより実行時間が長くなるが、ライト・アロケートされたキャッシュ・ライン に対する後続のライト・サイクル・ヒットすることでパフォーマンスは向上する。
ソフトウェアの要素により、メモリ・アクセスは互いに隣接して発生する傾向をも つ(ローカリティの原理)。ライト・アロケートされたキャッシュ・ラインに対し、さ らにライト・ヒットする確率が高い。
AMD-K6
プロセッサがライト・アロケーションを実行するメカニズム4
通りを下 記に示す。ライト・アロケートは、これらメカニズムのいずれか1
つまたは2
つ以 上のペンディング・ライトが、メモリのキャッシャブル領域に対して行われること を表示した時点で実行される。キャッシャブル・ページへのライト
プロセッサがキャッシュ・ライン・フィルを実行するたびに、キャッシュ・ラインが 存在するページのアドレスは、キャッシャビリティ制御レジスタ(
CCR
)に保存さ れる。後続ライト・サイクルのページ・アドレスは、CCR
に保存されたこのペー ジ・アドレスと比較される。2
つのアドレスが等しければ、当該ページはすでに キャッシャブルであると判定されているため、ここでプロセッサはライト・アロ ケートを実行する。プロセッサが、
CCR
に保存されたアドレスとは異なるページからキャッシュ・ラ イン・フィルを実行する場合、CCR
は新規のページ・アドレスで更新される。セクタへのライト
ペンディング・ライト・サイクルのアドレスは有効(
Valid
)なキャッシュ・セクタの タグ・アドレスと一致しているが、セクタ内のアドレスされたキャッシュ・ラインが 無効(Invalid
)となっている場合(セクタ・ヒットであるが、キャッシュ・ライン・ミ スである場合)、プロセッサはライト・アロケートを実行する。当該ペンディング・ライト・サイクルは、セクタ・ヒットによって少なくとも
1
つの有効(Valid
)キャッ シュ・ラインがセクタ内に存在することを表示するものであるため、キャッシャ ブルであると判定される。セクタ内の2
本のキャッシュ・ラインは、設計により、同 一ページ内にあることが保証されている。ライト・アロケート・リミット
ライト・ハンドリング制御レジスタ(
WHCR
)は、WCDE
ビット、ライト・アロケー ト・イネーブル・リミット(WAELIM
)フィールド、ライト・アロケート・イネーブル15-to-16M
バイト(WAE15M
)ビットの3
つのフィールドをもつMSR
である(図7 1 0 6 3
Rese rved
WAELIM 8
0
W A E 1 5 M
Symbol Des cription Bits
9
Note: Hardware RESET initialize s this MSR to all zeros.
WCD E Always program to 0 8 WAELIM Write Allocate Enable Limit 7–1 WAE15M Write Allocate Enable 15-to-16-Mbyte 0
図
69.
ライト・ハンドリング制御レジスタ(WHCR
)WAELIM
のフィールド幅は7
ビットである。このフィールドに4M
バイトを掛け合 わせてメモリの上限を定義する。この上限より下のメモリをアドレスするペン ディング・ライト・サイクルが生じれば、プロセッサはライト・アロケートを実行す る。プロセッサが、前述したライト・アロケート・メカニズム、すなわちキャッシャ ブル・ページへのライト、セクタへのライトおよびライト・キャッシャビリティ検出 のうちのいずれか1
つにより、ペンディング・ライト・サイクルがキャッシャブルで あると判定しない限り、この上限に達した、またはこの上限を超えたメモリ・ア クセスに対し、ライト・アロケートは行われない。このメモリ上限の最大値は(
2
7-1
)×4M
バイト)=508M
バイトとなる。このフィールドの全ビットが0
にセッ トされている場合、全メモリが上限以上となり、ライト・アロケートを許可するためのこのメカニズムは、実際にディセーブルされる。
ライト・アロケート・イネーブル
15-to-16M
バイト(WAE15M
)ビットは、15M
バイ トと16M
バイトの間のメモリ1M
バイトをアドレスするメモリ・ライト・サイクルに 対し、ライト・アロケーションをイネーブルするために使用される。このメモリ・エリアでライト・アロケートが可能であるためには、このビットが
1
にセットされら
000F_FFFFh
)は、メモリのノン・キャッシャブル領域であると見なされるた め、この領域におけるライト・アロケートの実行は安全とは見なされない。図
70
に、メモリ・バス・サイクルに対するライト・アロケートに伴う全メカニズム の論理フローを示す。ブロック図の左側(文章部分)は、当該ラインの値が1
と なるために真でなければならない条件を示している。ブロック図の項目1
から3
は、一般的なキャッシュ動作に関するもので、項目4
から11
はライト・アロケー ト・メカニズムに関するものである。ライト・アロケートに関する詳細は、
Implementation of Write Allocate in the K86
TMProcessors Application Note
(Order#21326
)を参照。Perform Write Allocate 1) CD Bit of CR0.
2) PCD Signal 3) CI Bit of TR12
4) Write to Cacheable Page (CCR) 5) Write to a Sector
6) WCDE Bit
7) Less Than Limit (WAELIM) 8) Between 640 Kbytes and 1 Mbyte
9) Between 15–16 Mbytes
10) Write Allocate Enable 15–16 Mbyte (WAE15M)
図
70.
ライト・アロケート・ロジック・メカニズムおよび条件 ロジック・メカニズムおよび条件について1. CR0
のCD
ビット:制御レジスタ(
CR0
)のキャッシュ・ディセーブル(CD
)ビットが1
にセット されている場合、リードおよびライトの両キャッシュ・フィル・メカニズムは ディセーブルされている。したがって、ライト・アロケートは発生しない。2. PCD
信号:PCD
(ページ・キャッシュ・ディセーブル)信号がHigh
にドライブされてい る場合、そのページのキャッシングは、KEN#
がアサートされてサンプリン グされても、なおディセールされている。したがって、ライト・アロケートは 発生しない。3. TR12
のCI
ビット:テスト・レジスタ
12
のキャッシュ禁止ビットが1
にセットされている場合、L1
最後に行われたキャッシュ・フィルのページ・アドレスを格納する。この条 件の詳細は、前出「キャッシャブル・ページへのライト」の項を参照。
5.
セクタへのライト:ペンディング・ライト・サイクルのアドレスが、有効(
Valid
)なキャッシュ・セ クタのタグ・アドレスと符合するが、当該セクタ内のアドレス・キャッシュ・ラインが無効(
Invalid
)である場合、ライト・アロケートが実行される。こ の条件の詳細は、前出「キャッシャブル・ページへのライト」の項を参照。6. WCDE
ビット:
レジスタが正しく機能するために、
WHCR
のビット8
を常に0
にプログラム する。7.
リミット値未満(WAELIM
):ライト・アロケート・リミット・メカニズムは、アドレスされる時点でのメモ リ・エリアが、
WHCR
のWAELIM
フィールドにセットされた限界値未満であ るか否かを判定する。アドレスが限界値未満である場合、条件9
および10
によりライト・アロケートの実行を抑止しない限り、そのメモリ・アドレスに 対しライト・アロケートが実行される。8. 640K
バイトと1M
バイトの間のメモリ領域:メモリ領域
640K
バイトから1M
バイトの間では、ライト・アロケートは実行 されない。640K
バイトと1M
バイトの間(000A_0000h
から000F_FFFFh
) は、メモリのノン・キャッシャブル領域であると考えられるため、この間で ライト・アロケートを実行することは安全であるとは考えられない。9. 15M
バイトから16M
バイトの間のメモリ領域:ペンディング・ライト・サイクルのアドレスが、
15M
バイトから16M
バイトの 間の1M
バイトのメモリ内にあり、WAE15M
ビットが1
にセットされている 場合、このサイクルのライト・アロケートはイネーブルされている。10.
ライト・アロケート・イネーブル15-16M
バイト(WAE15M
):この条件はライト・アロケート・リミット・メカニズムと対応がとられており、