キャッシュの高速化手法と仮想記憶

30
キキキキキキキキキキキキキキキキ キキキキ

description

キャッシュの高速化手法と仮想記憶. 天野英晴. キャッシュの性能. キャッシュオーバーヘッド付き CPI(Clock cycles Per Instruction) =  理想の CPI +   命令キャッシュのミス率 × ミスペナルティ +   データキャッシュの読み出しミス率 × 読み出し命令の生起確率 × ミスペナルティ この式の問題点 ミスペナルティは書き戻しを伴うかどうかで違ってくる( Write Back) ライトバッファの容量、連続書き込み回数によっては書き込みミスでもストールする - PowerPoint PPT Presentation

Transcript of キャッシュの高速化手法と仮想記憶

Page 1: キャッシュの高速化手法と仮想記憶

キャッシュの高速化手法と仮想記憶

天野英晴

Page 2: キャッシュの高速化手法と仮想記憶

キャッシュの性能キャッシュオーバーヘッド付き CPI(Clock cycles Per Instruction) = 理想の CPI   +    命令キャッシュのミス率 × ミスペナルティ +  データキャッシュの読み出しミス率 × 読み出し命令の生起確率

× ミスペナルティ この式の問題点

ミスペナルティは書き戻しを伴うかどうかで違ってくる( Write Back)

ライトバッファの容量、連続書き込み回数によっては書き込みミスでもストールする

書き込み直後に読み出しをするとキャッシュが対応できないでペナルティが増えることもある→ノンブロッキングキャッシュ

実際は階層化されているのでそれぞれの階層を考えないといけない

プロセッサが Out-of-order 実行可能ならば読み出し時にストールしないかもしれない(この話は後ほど、、、)

ちゃんと評価するにはシミュレータを使うしかない、、、、

Page 3: キャッシュの高速化手法と仮想記憶

ミスの原因:3つの C

Capacity Miss:容量ミス 絶対的な容量不足により起きる

Conflict Miss:衝突ミス 容量に余裕があっても、 indexが衝突することで、格納することができなくなる

Compulsory Miss (Cold Start Miss) 初期化ミス スタート時、プロセス切り替え時に最初にキャッシュにブロックを持ってくるためのミス。避けることができない

Page 4: キャッシュの高速化手法と仮想記憶

キャッシュサイズとそれぞれもミスの割合Hennessy & PattersonComputer Architectureより

Page 5: キャッシュの高速化手法と仮想記憶

ミス率を減らす 容量を増やす

〇容量ミスはもちろん減る。衝突ミスも減る。× コストが大きくなる。ヒット時間が増える。チップ(ボード)に載らな

い Way 数を増やす

〇衝突ミスが減るキャッシュ容量が小さいと効果的、 2Way は、 2 倍の大きさの Direct Map と同

じ位のミス率になるキャッシュ容量が大きい場合、残った不運な衝突ミスを減らす効果がある

× コストが大きくなる。ヒット時間が増える。 4 以上はあまり効果がない。 ブロックサイズを大きくする

 〇局所性によりミスが減る。  × ミスペナルテイが増える。(ブロックサイズに比例はしない

が、、)   キャッシュ容量が小さいと衝突ミスが増える容量に応じて適切なブロックサイズを選ぶ。 32byte-128byte

Page 6: キャッシュの高速化手法と仮想記憶

ブロックサイズとミスの割合Hennessy & PattersonComputer Architectureより

Page 7: キャッシュの高速化手法と仮想記憶

ブロックサイズと平均アクセス時間Hennessy & PattersonComputer Architectureより

Page 8: キャッシュの高速化手法と仮想記憶

ミスペナルティを減らす

階層キャッシュ CPU-Memory間に複数のキャッシュを設ける

ノンブロッキングキャッシュ ミス処理の間にも次のアクセスを受け付ける

Critical Word Firstと Early Restart CPUに対して可能な限り早くアクセスされたデータ(命令)を渡す

Page 9: キャッシュの高速化手法と仮想記憶

CPU

L1キャッシュ

L2キャッシュ

L3キャッシュ

主記憶

~ 64KB  1-2clock

~ 256KB 3-10clock

2M~ 4MB 10-20clock

4~ 16GB 50-100clock

マルチレベルキャッシュ

CPUに近い方から L1,L2..と番号を付ける

L2・ L3キャッシュの局所ミス率はL1キャッシュより高い

Page 10: キャッシュの高速化手法と仮想記憶

マルチレベルキャッシュの制御

Multi-level Inclusion 上位階層のキャッシュが下位階層の内容を全て含む 階層間のやり取りは、キャッシューメモリ間と同じ メモリシステム中にデータの重複が数多く存在

Multi-level Exclusion 上位階層のキャッシュと下位階層のキャッシュの内容が重なることはない

階層間のやり取りは、リプレースというよりはスワップ

Page 11: キャッシュの高速化手法と仮想記憶

ノンブロッキングキャッシュ

キャッシュが動作中にも次のアクセスを受け付ける キャッシュの操作をパイプライン化する メモリアクセスを強化しないとノンブロッキングキャッシュにはできない

実際はミス中のヒットを 1回許せば大体 OK CPUがアウトオブオーダ実行可能でないと効果が小さい→来週

Page 12: キャッシュの高速化手法と仮想記憶

Critical Word Firstと Early Restart

キャッシュ

主記憶

CPU

アクセスしたワードを先に送る( Critical WordFirst)

キャッシュに転送する前にCPUにワードを渡す( Early Restart)

Page 13: キャッシュの高速化手法と仮想記憶

プリフェッチ アクセスする前にキャッシュに取って来る

(問題点 ) 使うかどうか分からないデータ(命令)のために他のラインを追い出していいのか??

→プリフェッチバッファを使う場合が多い 本当にアクセスされたらキャッシュに入れる

ハードウェアプリフェッチ 命令キャッシュで用いる。一つ(二つ)先のブロックまで取って来る 命令キャッシュは局所性が高いので効果的

ソフトウェアプリフェッチ プリフェッチ命令を使う:データキャッシュ コンパイラが挿入 命令実行のオーバーヘッドを伴う

Page 14: キャッシュの高速化手法と仮想記憶

コンパイラによる最適化

ループ構造の最適化 ループの入れ子を入れ替える

ループをくっつける

ブロック化 キャッシュにうまく入るようにデータ構造を変更する

科学技術計算には効果的

for(j=0; j<100; j=j+1) for(i=0; i<5000; i=i+1) x[i][j] = a * x[i][j];

for(i=0; i<5000; i=i+1) for(j=0; j<100; j=j+1) x[i][j] = a * x[i][j];

Page 15: キャッシュの高速化手法と仮想記憶

仮想記憶( Virtual Memory)

プロセッサから見たアドレス(論理アドレス)と実際のメモリ上のアドレス(物理アドレス)を分離する 実メモリよりも大きいメモリを扱うことができる 複数のプロセスを互いのアドレスを気にせずに並行実行可能 管理単位で記憶の保護

ページ:固定サイズ (4K-16KB)   vs. セグメント:可変サイズ→ページを用いる場合が多い

概念はキャッシュに似ているが OS が管理、用語も違う ブロック ( ライン ) : 32-128B  ⇔ ページ :4KB リプレイス  スワップイン ライトバック ⇔ スワップアウト

ページの割り付けは OS が管理 リプレイスは LRU(Least Recently Used) 書き込み制御は当然ライトバック

Page 16: キャッシュの高速化手法と仮想記憶

仮想記憶のアドレス変換

20bit 12bit

ページ内アドレス

ページ番号

論理アドレス空間(4 GB)

物理アドレス空間( 16MB)

TLB

12bit12bit

20bit→12bit の変換テーブルは巨大ソフトウェアで管理TLB(Translation Lookaside Buffer) はこの変換テーブルに対するキャッシュ

Page 17: キャッシュの高速化手法と仮想記憶

TLB(Translation Lookaside Buffer)

00110101011100000010001011001100

=

論理アドレス

=

=

=

=

=

=

=

ページ番号 ページ内アドレス

00110101011100000010 111011001110

111011001110 001011001100

Dirtybit

Prioritybit

物理アドレス

Page 18: キャッシュの高速化手法と仮想記憶

ページフォルト( Page Fault)の発生 TLBミス

ページ自体は主記憶中に存在→ TLBの入れ替え ページ自体が主記憶中にない→スワップイン+

TLBの入れ替え ヒットしたが Dirty bitが 0のページに書き込みを行った Dirty bitのセット

ヒットしたが特権命令でないのに特権ページを扱った

いずれのケースも OSで処理する

Page 19: キャッシュの高速化手法と仮想記憶

TLB変換時間の短縮

仮想アドレスキャッシュ キャッシュは仮想アドレスで参照する プロセスによってアドレスがダブる問題(シノニム問題)

の解決が難しい 仮想アドレスインデックス - 物理アドレスタグ方式   (Virtually indexed, Physically Tagged)

変換を行わないページ内アドレスをキャッシュのインデックスに使う

タグ参照、キャッシュ参照、 TLB 変換が同時に可能 Direct Map だとキャッシュサイズが 4KB に制限される

2 way だと 8K 、 4 way だと 16K 、 8 way だと 32K 1次キャッシュだけの話なので、多少小さくてもいい

か。。。。

Page 20: キャッシュの高速化手法と仮想記憶

仮想アドレスインデックス・物理アドレスタグ方式

20bit index

ページ番号 ページ内アドレス (12bit)

TLBTag

Mem. キャッシュ

=Hit

12bit Tag

CPUへ

Page 21: キャッシュの高速化手法と仮想記憶

ストレージシステム:ディスク装置

シリンダ:ヘッドの下にあるすべてのトラックのこと

ヘッド

トラック:同心円状のアクセスの単位1万 -5万ある

セクタ: 512B程度に分割したアクセスの単位100-500 セクタ番号、誤り訂正符号付きのデータを含む

磁性体の塗布された円板にデータを格納可動式のヘッドを使って読み書き不揮発性

Page 22: キャッシュの高速化手法と仮想記憶

容量と動作速度 2.5 インチー 3.5 インチ ヘッド数: 2-4 容量: 100 GB-1TB 平均ディスクアクセス時間=  平均シーク時間(ヘッドを動かす時間)+  平均回転待ち時間+転送時間→数 msec インタフェース

ATA(Advanced Technology Attachment) SCSI(Small Computer Systems Interface)

ディスク内にマイクロプロセッサを装備し、アクセス時間を最適化

ディスクキャッシュの利用

Page 23: キャッシュの高速化手法と仮想記憶

ディペンダビリティ

1. サービス仕様を満足2. サービス中断障害: 1→ 2  復旧: 2→1信頼性( reliability): 1 の連続遂行可能時間

MTTF ( Mean Time To Failure)

可用性 (availability): 1 の状態で居られる割合MTTF/ ( MTTF+MTTR)MTBF(Mean Time Between Failure)=MTTF+MTTR

ディペンダビリティを上げる→冗長性   

Page 24: キャッシュの高速化手法と仮想記憶

RAID  (Redundant Arrays of Inexpensive Disks) 複数の安価なディスクを同時にアクセス

アクセス速度の改善 信頼性を改善

RAID 0: 冗長性なし、複数ディスクに対するアクセスの分散(ストライピング)のみ

RAID 1: ミラーリング 2つ用意して同じ内容を書く コストが高い

RAID 2: ハミングコードによるデータ修復 効率が悪く実際には使われていない

Page 25: キャッシュの高速化手法と仮想記憶

ストライピングとミラーリングの組み合わせ

ディスクドライブに対する故障耐性は RAID1+0が有利 コントローラに対する故障耐性は RAID0+1が有利 RAID1+0の方が多く使われる

… …D8 D9D6 D7D4 D5D2 D3D0 D1

… …D8 D9D6 D7D4 D5D2 D3D0 D1

RAID0 RAID0

RAID1

… …D8 D9D6 D7D4 D5D2 D3D0 D1

… …D8 D9D6 D7D4 D5D2 D3D0 D1

RAID1 RAID1

RAID0

RAID0+1 (RAID01) RAID1+0 (RAID10)

Page 26: キャッシュの高速化手法と仮想記憶

C4 C5 C6 PC7C0 C1 C2 PC3B4 B5 B6 PB7B0 B1 B2 PB3A4 A5 A6 PA7

RAID 3

データ単位に分散させ、各行に対応する Parityディスクを設ける

一つのディスクが故障しても、 Parityにより復旧が可能 連続データに対してアクセスが分散されるので、ストリーム処理(画像データ)や科学技術計算で有利

A0 A1 A2 PA3

Page 27: キャッシュの高速化手法と仮想記憶

DI DII DIII DIV P

CI CII CIII CIV P

BI BII BIII BIV P

RAID4

独立した小さな読み出し(保護グループ内に入る読み出し)に対応するためにブロック単位でストライピング

それぞれのブロックに対してパリティを設ける

AI AII AIII AIV P

Page 28: キャッシュの高速化手法と仮想記憶

RAID4と RAID3の書き込み時の動作

小さな書き込みに対して、 RAID4は読み出しが 1台で済む

書き込み時に Parityディスクがボトルネックになる

A0 A1 A2 A3 P

A0’ A1 A2 A3 P’

書き込みデータD0

AI’ AII AIII AIV P’

AI AII AIII AIV P

書き込みデータD0

Page 29: キャッシュの高速化手法と仮想記憶

RAID 5

Parityブロックを分散することで Parityの書き込みを分散 障害時の回復は面倒 2重のデータ故障への対応→ Parityを二重化( RAID6) アクセス並列化の強化→ RAID 5+0 耐故障性の強化→ RAID 1+5

DI DII DIII DIVP

CI CII CIII CIVP

BI BII BIII BIVP

AI AII AIII AIV P

Page 30: キャッシュの高速化手法と仮想記憶

演習 以下の条件でキャッシュのオーバーヘッドを含めた CPIはどのようになるか計算せよ 理想の CPI:  1.1 1次キャッシュのミスペナルティ: 10クロック 2次キャッシュ(統合キャッシュ)のミスペナルティ: 50クロック→ 2次キャッシュミス時に 1次キャッシュのペナルティを加える必要はない( Critical word First + Early restart)

1次命令キャッシュのミス率: 1% 1次データキャッシュのリード時のミス率: 3% 2次キャッシュのローカルミス率: 10% データ読み出し命令の生起確率: 15% プロセッサはインオーダ実行(命令の追い越しはない) キャッシュはパイプライン化されており、十分なライトバッファを持っている