1 / 30

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

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

zeke
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. キャッシュの高速化手法と仮想記憶 天野英晴

  2. キャッシュの性能 キャッシュオーバーヘッド付きCPI(Clock cycles Per Instruction)=  理想のCPI+   命令キャッシュのミス率×ミスペナルティ +   データキャッシュの読み出しミス率×読み出し命令の生起確率×ミスペナルティ • この式の問題点 • ミスペナルティは書き戻しを伴うかどうかで違ってくる(Write Back) • ライトバッファの容量、連続書き込み回数によっては書き込みミスでもストールする • 書き込み直後に読み出しをするとキャッシュが対応できないでペナルティが増えることもある→ノンブロッキングキャッシュ • 実際は階層化されているのでそれぞれの階層を考えないといけない • プロセッサがOut-of-order実行可能ならば読み出し時にストールしないかもしれない(この話は後ほど、、、) • ちゃんと評価するにはシミュレータを使うしかない、、、、

  3. ミスの原因:3つのC • Capacity Miss:容量ミス • 絶対的な容量不足により起きる • Conflict Miss:衝突ミス • 容量に余裕があっても、indexが衝突することで、格納することができなくなる • Compulsory Miss (Cold Start Miss) 初期化ミス • スタート時、プロセス切り替え時に最初にキャッシュにブロックを持ってくるためのミス。避けることができない

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

  5. ミス率を減らす • 容量を増やす 〇容量ミスはもちろん減る。衝突ミスも減る。 ×コストが大きくなる。ヒット時間が増える。チップ(ボード)に載らない • Way数を増やす 〇衝突ミスが減る キャッシュ容量が小さいと効果的、2Wayは、2倍の大きさのDirect Mapと同じ位のミス率になる キャッシュ容量が大きい場合、残った不運な衝突ミスを減らす効果がある ×コストが大きくなる。ヒット時間が増える。4以上はあまり効果がない。 • ブロックサイズを大きくする  〇局所性によりミスが減る。 ×ミスペナルテイが増える。(ブロックサイズに比例はしないが、、)    キャッシュ容量が小さいと衝突ミスが増える 容量に応じて適切なブロックサイズを選ぶ。32byte-128byte

  6. ブロックサイズと ミスの割合 Hennessy & Patterson Computer Architectureより

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

  8. ミスペナルティを減らす • 階層キャッシュ • CPU-Memory間に複数のキャッシュを設ける • ノンブロッキングキャッシュ • ミス処理の間にも次のアクセスを受け付ける • Critical Word FirstとEarly Restart • CPUに対して可能な限り早くアクセスされたデータ(命令)を渡す

  9. CPU マルチレベル キャッシュ CPUに近い 方からL1,L2.. と番号を付ける L2・L3キャッシュの 局所ミス率は L1キャッシュより 高い L1キャッシュ ~64KB1-2clock L2キャッシュ ~256KB 3-10clock L3キャッシュ 2M~4MB 10-20clock 主記憶 4~16GB 50-100clock

  10. マルチレベルキャッシュの制御 • Multi-level Inclusion • 上位階層のキャッシュが下位階層の内容を全て含む • 階層間のやり取りは、キャッシューメモリ間と同じ • メモリシステム中にデータの重複が数多く存在 • Multi-level Exclusion • 上位階層のキャッシュと下位階層のキャッシュの内容が重なることはない • 階層間のやり取りは、リプレースというよりはスワップ

  11. ノンブロッキングキャッシュ • キャッシュが動作中にも次のアクセスを受け付ける • キャッシュの操作をパイプライン化する • メモリアクセスを強化しないとノンブロッキングキャッシュにはできない • 実際はミス中のヒットを1回許せば大体OK • CPUがアウトオブオーダ実行可能でないと効果が小さい→来週

  12. Critical Word FirstとEarly Restart CPU キャッシュに転送する前に CPUにワードを渡す (Early Restart) キャッシュ アクセスした ワードを先に 送る (Critical Word First) 主記憶

  13. プリフェッチ • アクセスする前にキャッシュに取って来る • (問題点) 使うかどうか分からないデータ(命令)のために他のラインを追い出していいのか?? →プリフェッチバッファを使う場合が多い • 本当にアクセスされたらキャッシュに入れる • ハードウェアプリフェッチ • 命令キャッシュで用いる。一つ(二つ)先のブロックまで取って来る • 命令キャッシュは局所性が高いので効果的 • ソフトウェアプリフェッチ • プリフェッチ命令を使う:データキャッシュ • コンパイラが挿入 • 命令実行のオーバーヘッドを伴う

  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];

  15. 仮想記憶(Virtual Memory) • プロセッサから見たアドレス(論理アドレス)と実際のメモリ上のアドレス(物理アドレス)を分離する • 実メモリよりも大きいメモリを扱うことができる • 複数のプロセスを互いのアドレスを気にせずに並行実行可能 • 管理単位で記憶の保護 • ページ:固定サイズ(4K-16KB)vs. セグメント:可変サイズ→ページを用いる場合が多い • 概念はキャッシュに似ているがOSが管理、用語も違う • ブロック(ライン):32-128B ⇔ ページ:4KB • リプレイス  スワップイン • ライトバック ⇔ スワップアウト • ページの割り付けはOSが管理 • リプレイスはLRU(Least Recently Used) • 書き込み制御は当然ライトバック

  16. 仮想記憶のアドレス変換 論理アドレス空間(4GB) ページ番号 ページ内 アドレス 物理アドレス空間(16MB) 20bit 12bit TLB 12bit 12bit 20bit→12bitの変換テーブルは巨大 ソフトウェアで管理 TLB(Translation Lookaside Buffer)はこの変換テーブルに 対するキャッシュ

  17. TLB(Translation Lookaside Buffer) 論理アドレス ページ番号 ページ内アドレス 00110101011100000010 001011001100 Dirty bit Priority bit = = 00110101011100000010 = 111011001110 = = = = 物理アドレス = 111011001110 001011001100

  18. ページフォルト(Page Fault)の発生 • TLBミス • ページ自体は主記憶中に存在→TLBの入れ替え • ページ自体が主記憶中にない→スワップイン+TLBの入れ替え • ヒットしたがDirty bitが0のページに書き込みを行った • Dirty bitのセット • ヒットしたが特権命令でないのに特権ページを扱った • いずれのケースもOSで処理する

  19. TLB変換時間の短縮 • 仮想アドレスキャッシュ • キャッシュは仮想アドレスで参照する • プロセスによってアドレスがダブる問題(シノニム問題)の解決が難しい • 仮想アドレスインデックス-物理アドレスタグ方式 (Virtually indexed, Physically Tagged) • 変換を行わないページ内アドレスをキャッシュのインデックスに使う • タグ参照、キャッシュ参照、TLB変換が同時に可能 • Direct Mapだとキャッシュサイズが4KBに制限される • 2 way だと8K、4 wayだと16K、8 wayだと32K • 1次キャッシュだけの話なので、多少小さくてもいいか。。。。

  20. 仮想アドレスインデックス・物理アドレスタグ方式仮想アドレスインデックス・物理アドレスタグ方式 ページ番号 ページ内アドレス(12bit) 20bit index Tag Mem. キャッシュ TLB = 12bit Tag Hit CPUへ

  21. ストレージシステム:ディスク装置 トラック:同心円状のアクセスの単位 1万-5万ある シリンダ:ヘッドの下にある すべてのトラックのこと ヘッド 磁性体の塗布された円板に データを格納 可動式のヘッドを使って読み書き 不揮発性 セクタ:512B程度に分割したアクセスの単位 100-500 セクタ番号、誤り訂正符号付きのデータを含む

  22. 容量と動作速度 • 2.5インチー3.5インチ • ヘッド数:2-4 • 容量: 100GB-1TB • 平均ディスクアクセス時間=   平均シーク時間(ヘッドを動かす時間)+   平均回転待ち時間+転送時間→数msec • インタフェース • ATA(Advanced Technology Attachment) • SCSI(Small Computer Systems Interface) • ディスク内にマイクロプロセッサを装備し、アクセス時間を最適化 • ディスクキャッシュの利用

  23. ディペンダビリティ • サービス仕様を満足 • サービス中断 障害:1→2  復旧:2→1 信頼性(reliability): 1の連続遂行可能時間 MTTF(Mean Time To Failure) 可用性(availability): 1の状態で居られる割合 MTTF/(MTTF+MTTR) MTBF(Mean Time Between Failure)=MTTF+MTTR ディペンダビリティを上げる→冗長性   

  24. RAID(Redundant Arrays of Inexpensive Disks) • 複数の安価なディスクを同時にアクセス • アクセス速度の改善 • 信頼性を改善 • RAID 0: 冗長性なし、複数ディスクに対するアクセスの分散(ストライピング)のみ • RAID 1: ミラーリング • 2つ用意して同じ内容を書く • コストが高い • RAID 2: ハミングコードによるデータ修復 • 効率が悪く実際には使われていない

  25. ストライピングとミラーリングの組み合わせ RAID0+1 (RAID01) RAID1+0 (RAID10) • ディスクドライブに対する故障耐性はRAID1+0が有利 • コントローラに対する故障耐性はRAID0+1が有利 • RAID1+0の方が多く使われる RAID1 RAID0 RAID0 RAID1 RAID0 RAID1 D0 D1 D0 D1 D1 D0 D0 D1 D2 D3 D2 D3 D3 D2 D2 D3 D4 D5 D4 D5 D5 D4 D4 D5 D6 D7 D6 D7 D7 D6 D6 D7 D8 D9 D8 D9 D9 D8 D8 D9 … … … … … … … …

  26. RAID 3 • データ単位に分散させ、各行に対応するParityディスクを設ける • 一つのディスクが故障しても、Parityにより復旧が可能 • 連続データに対してアクセスが分散されるので、ストリーム処理(画像データ)や科学技術計算で有利 A0 A1 A2 A3 P A4 A5 A6 A7 P B0 B1 B2 B3 P B4 B5 B6 B7 P C0 C1 C2 C3 P C4 C5 C6 C7 P

  27. RAID4 AI AII AIII AIV P • 独立した小さな読み出し(保護グループ内に入る読み出し)に対応するためにブロック単位でストライピング • それぞれのブロックに対してパリティを設ける BI BII BIII BIV P CI CII CIII CIV P DI DII DIII DIV P

  28. RAID4とRAID3の書き込み時の動作 書き込みデータD0 書き込みデータD0 • 小さな書き込みに対して、RAID4は読み出しが1台で済む • 書き込み時にParityディスクがボトルネックになる A0 A1 A2 A3 P AI AII AIII AIV P + + + A0’ A1 A2 A3 P’ AI’ AII AIII AIV P’

  29. RAID 5 AI AII AIII AIV P • Parityブロックを分散することでParityの書き込みを分散 • 障害時の回復は面倒 • 2重のデータ故障への対応→Parityを二重化(RAID6) • アクセス並列化の強化→RAID 5+0 • 耐故障性の強化→RAID 1+5 BI BII BIII P BIV CI CII P CIII CIV DI P DII DIII DIV

  30. 演習 • 以下の条件でキャッシュのオーバーヘッドを含めたCPIはどのようになるか計算せよ • 理想のCPI: 1.1 • 1次キャッシュのミスペナルティ:10クロック • 2次キャッシュ(統合キャッシュ)のミスペナルティ:50クロック→2次キャッシュミス時に1次キャッシュのペナルティを加える必要はない(Critical word First + Early restart) • 1次命令キャッシュのミス率:1% • 1次データキャッシュのリード時のミス率:3% • 2次キャッシュのローカルミス率:10% • データ読み出し命令の生起確率:15% • プロセッサはインオーダ実行(命令の追い越しはない) • キャッシュはパイプライン化されており、十分なライトバッファを持っている

More Related