キャッシュの高速化手法と仮想記憶
DESCRIPTION
キャッシュの高速化手法と仮想記憶. 天野英晴. キャッシュの性能. キャッシュオーバーヘッド付き CPI(Clock cycles Per Instruction) = 理想の CPI + 命令キャッシュのミス率 × ミスペナルティ + データキャッシュの読み出しミス率 × 読み出し命令の生起確率 × ミスペナルティ この式の問題点 ミスペナルティは書き戻しを伴うかどうかで違ってくる( Write Back) ライトバッファの容量、連続書き込み回数によっては書き込みミスでもストールする - PowerPoint PPT PresentationTRANSCRIPT
キャッシュの高速化手法と仮想記憶
天野英晴
キャッシュの性能キャッシュオーバーヘッド付き CPI(Clock cycles Per Instruction) = 理想の CPI + 命令キャッシュのミス率 × ミスペナルティ + データキャッシュの読み出しミス率 × 読み出し命令の生起確率
× ミスペナルティ この式の問題点
ミスペナルティは書き戻しを伴うかどうかで違ってくる( Write Back)
ライトバッファの容量、連続書き込み回数によっては書き込みミスでもストールする
書き込み直後に読み出しをするとキャッシュが対応できないでペナルティが増えることもある→ノンブロッキングキャッシュ
実際は階層化されているのでそれぞれの階層を考えないといけない
プロセッサが Out-of-order 実行可能ならば読み出し時にストールしないかもしれない(この話は後ほど、、、)
ちゃんと評価するにはシミュレータを使うしかない、、、、
ミスの原因:3つの C
Capacity Miss:容量ミス 絶対的な容量不足により起きる
Conflict Miss:衝突ミス 容量に余裕があっても、 indexが衝突することで、格納することができなくなる
Compulsory Miss (Cold Start Miss) 初期化ミス スタート時、プロセス切り替え時に最初にキャッシュにブロックを持ってくるためのミス。避けることができない
キャッシュサイズとそれぞれもミスの割合Hennessy & PattersonComputer Architectureより
ミス率を減らす 容量を増やす
〇容量ミスはもちろん減る。衝突ミスも減る。× コストが大きくなる。ヒット時間が増える。チップ(ボード)に載らな
い Way 数を増やす
〇衝突ミスが減るキャッシュ容量が小さいと効果的、 2Way は、 2 倍の大きさの Direct Map と同
じ位のミス率になるキャッシュ容量が大きい場合、残った不運な衝突ミスを減らす効果がある
× コストが大きくなる。ヒット時間が増える。 4 以上はあまり効果がない。 ブロックサイズを大きくする
〇局所性によりミスが減る。 × ミスペナルテイが増える。(ブロックサイズに比例はしない
が、、) キャッシュ容量が小さいと衝突ミスが増える容量に応じて適切なブロックサイズを選ぶ。 32byte-128byte
ブロックサイズとミスの割合Hennessy & PattersonComputer Architectureより
ブロックサイズと平均アクセス時間Hennessy & PattersonComputer Architectureより
ミスペナルティを減らす
階層キャッシュ CPU-Memory間に複数のキャッシュを設ける
ノンブロッキングキャッシュ ミス処理の間にも次のアクセスを受け付ける
Critical Word Firstと Early Restart CPUに対して可能な限り早くアクセスされたデータ(命令)を渡す
CPU
L1キャッシュ
L2キャッシュ
L3キャッシュ
主記憶
~ 64KB 1-2clock
~ 256KB 3-10clock
2M~ 4MB 10-20clock
4~ 16GB 50-100clock
マルチレベルキャッシュ
CPUに近い方から L1,L2..と番号を付ける
L2・ L3キャッシュの局所ミス率はL1キャッシュより高い
マルチレベルキャッシュの制御
Multi-level Inclusion 上位階層のキャッシュが下位階層の内容を全て含む 階層間のやり取りは、キャッシューメモリ間と同じ メモリシステム中にデータの重複が数多く存在
Multi-level Exclusion 上位階層のキャッシュと下位階層のキャッシュの内容が重なることはない
階層間のやり取りは、リプレースというよりはスワップ
ノンブロッキングキャッシュ
キャッシュが動作中にも次のアクセスを受け付ける キャッシュの操作をパイプライン化する メモリアクセスを強化しないとノンブロッキングキャッシュにはできない
実際はミス中のヒットを 1回許せば大体 OK CPUがアウトオブオーダ実行可能でないと効果が小さい→来週
Critical Word Firstと Early Restart
キャッシュ
主記憶
CPU
アクセスしたワードを先に送る( Critical WordFirst)
キャッシュに転送する前にCPUにワードを渡す( Early Restart)
プリフェッチ アクセスする前にキャッシュに取って来る
(問題点 ) 使うかどうか分からないデータ(命令)のために他のラインを追い出していいのか??
→プリフェッチバッファを使う場合が多い 本当にアクセスされたらキャッシュに入れる
ハードウェアプリフェッチ 命令キャッシュで用いる。一つ(二つ)先のブロックまで取って来る 命令キャッシュは局所性が高いので効果的
ソフトウェアプリフェッチ プリフェッチ命令を使う:データキャッシュ コンパイラが挿入 命令実行のオーバーヘッドを伴う
コンパイラによる最適化
ループ構造の最適化 ループの入れ子を入れ替える
ループをくっつける
ブロック化 キャッシュにうまく入るようにデータ構造を変更する
科学技術計算には効果的
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];
仮想記憶( Virtual Memory)
プロセッサから見たアドレス(論理アドレス)と実際のメモリ上のアドレス(物理アドレス)を分離する 実メモリよりも大きいメモリを扱うことができる 複数のプロセスを互いのアドレスを気にせずに並行実行可能 管理単位で記憶の保護
ページ:固定サイズ (4K-16KB) vs. セグメント:可変サイズ→ページを用いる場合が多い
概念はキャッシュに似ているが OS が管理、用語も違う ブロック ( ライン ) : 32-128B ⇔ ページ :4KB リプレイス スワップイン ライトバック ⇔ スワップアウト
ページの割り付けは OS が管理 リプレイスは LRU(Least Recently Used) 書き込み制御は当然ライトバック
仮想記憶のアドレス変換
20bit 12bit
ページ内アドレス
ページ番号
論理アドレス空間(4 GB)
物理アドレス空間( 16MB)
TLB
12bit12bit
20bit→12bit の変換テーブルは巨大ソフトウェアで管理TLB(Translation Lookaside Buffer) はこの変換テーブルに対するキャッシュ
TLB(Translation Lookaside Buffer)
00110101011100000010001011001100
=
論理アドレス
=
=
=
=
=
=
=
ページ番号 ページ内アドレス
00110101011100000010 111011001110
111011001110 001011001100
Dirtybit
Prioritybit
物理アドレス
ページフォルト( Page Fault)の発生 TLBミス
ページ自体は主記憶中に存在→ TLBの入れ替え ページ自体が主記憶中にない→スワップイン+
TLBの入れ替え ヒットしたが Dirty bitが 0のページに書き込みを行った Dirty bitのセット
ヒットしたが特権命令でないのに特権ページを扱った
いずれのケースも OSで処理する
TLB変換時間の短縮
仮想アドレスキャッシュ キャッシュは仮想アドレスで参照する プロセスによってアドレスがダブる問題(シノニム問題)
の解決が難しい 仮想アドレスインデックス - 物理アドレスタグ方式 (Virtually indexed, Physically Tagged)
変換を行わないページ内アドレスをキャッシュのインデックスに使う
タグ参照、キャッシュ参照、 TLB 変換が同時に可能 Direct Map だとキャッシュサイズが 4KB に制限される
2 way だと 8K 、 4 way だと 16K 、 8 way だと 32K 1次キャッシュだけの話なので、多少小さくてもいい
か。。。。
仮想アドレスインデックス・物理アドレスタグ方式
20bit index
ページ番号 ページ内アドレス (12bit)
TLBTag
Mem. キャッシュ
=Hit
12bit Tag
CPUへ
ストレージシステム:ディスク装置
シリンダ:ヘッドの下にあるすべてのトラックのこと
ヘッド
トラック:同心円状のアクセスの単位1万 -5万ある
セクタ: 512B程度に分割したアクセスの単位100-500 セクタ番号、誤り訂正符号付きのデータを含む
磁性体の塗布された円板にデータを格納可動式のヘッドを使って読み書き不揮発性
容量と動作速度 2.5 インチー 3.5 インチ ヘッド数: 2-4 容量: 100 GB-1TB 平均ディスクアクセス時間= 平均シーク時間(ヘッドを動かす時間)+ 平均回転待ち時間+転送時間→数 msec インタフェース
ATA(Advanced Technology Attachment) SCSI(Small Computer Systems Interface)
ディスク内にマイクロプロセッサを装備し、アクセス時間を最適化
ディスクキャッシュの利用
ディペンダビリティ
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
ディペンダビリティを上げる→冗長性
RAID (Redundant Arrays of Inexpensive Disks) 複数の安価なディスクを同時にアクセス
アクセス速度の改善 信頼性を改善
RAID 0: 冗長性なし、複数ディスクに対するアクセスの分散(ストライピング)のみ
RAID 1: ミラーリング 2つ用意して同じ内容を書く コストが高い
RAID 2: ハミングコードによるデータ修復 効率が悪く実際には使われていない
ストライピングとミラーリングの組み合わせ
ディスクドライブに対する故障耐性は 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)
C4 C5 C6 PC7C0 C1 C2 PC3B4 B5 B6 PB7B0 B1 B2 PB3A4 A5 A6 PA7
RAID 3
データ単位に分散させ、各行に対応する Parityディスクを設ける
一つのディスクが故障しても、 Parityにより復旧が可能 連続データに対してアクセスが分散されるので、ストリーム処理(画像データ)や科学技術計算で有利
A0 A1 A2 PA3
DI DII DIII DIV P
CI CII CIII CIV P
BI BII BIII BIV P
RAID4
独立した小さな読み出し(保護グループ内に入る読み出し)に対応するためにブロック単位でストライピング
それぞれのブロックに対してパリティを設ける
AI AII AIII AIV P
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
+
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
演習 以下の条件でキャッシュのオーバーヘッドを含めた CPIはどのようになるか計算せよ 理想の CPI: 1.1 1次キャッシュのミスペナルティ: 10クロック 2次キャッシュ(統合キャッシュ)のミスペナルティ: 50クロック→ 2次キャッシュミス時に 1次キャッシュのペナルティを加える必要はない( Critical word First + Early restart)
1次命令キャッシュのミス率: 1% 1次データキャッシュのリード時のミス率: 3% 2次キャッシュのローカルミス率: 10% データ読み出し命令の生起確率: 15% プロセッサはインオーダ実行(命令の追い越しはない) キャッシュはパイプライン化されており、十分なライトバッファを持っている