Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なぜキャッシュメモリは速いのか 余談集 / Why is Cache Memory So Fa...

なぜキャッシュメモリは速いのか 余談集 / Why is Cache Memory So Fast? Extended.

PHPカンファレンス福岡2024のアンカンファレンスで使った資料です。
本編
https://speakerdeck.com/tomzoh/why-is-cache-memory-so-fast
の「おまけ」部分の増補改訂版です。

HASEGAWA Tomoki

June 22, 2024
Tweet

More Decks by HASEGAWA Tomoki

Other Decks in Programming

Transcript

  1. 3 ௕୩઒ஐر ͸͕ͤΘ ͱ΋͖ @tomzoh ςοΫΧϯϑΝϨϯεӡӦࢀՃ ֤छϓϩάϥϜ։ൃ  $16 ϨτϩήʔϜػ

    ిࢠ޻࡞  Ϗʔϧ αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ ϥΠϑϫʔΫ 𝕏
  2. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 多段キャッシュ • CPUのキャッシュは多段になっていることが多い • L1, L2, L3:

    Layer 1, 2, 3 • CPUコアから近い順に L1, L2, L3 • サイズは L1 < L2 < L3 • 速度は L1 > L2 > L3 • コア間での共有の違い: 異なる局所性のカバー • 構成はCPUによって違う • Intel CPU: L1, L2は各CPUコアに内蔵されて専有, L3はCPUコア間で共有 • Apple Silicon: L1は各CPUコアに内蔵されて専有, L2はCPUコア間で共有 7
  3. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか いろいろなキャッシュ(2) • ブラウザのキャッシュ • ネットワーク経由でファイルを取得するのに時間がかかるので取得したファイルをローカ ルに保存しておいて同じファイルへのリクエストなら保存したファイルを使う •

    CPUのキャッシュ • メインメモリからデータを取得するのに時間がかかるので • 取得した値を高速なメモリ(=キャッシュメモリ)に保存しておいて • 次に同じ場所からデータを取得する時はキャッシュメモリから取得する 8
  4. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか キャッシュメモリの動作 • CPUがメインメモリからデータを読み込む • 読み込んだデータはキャッシュに保存 • 次に同じアドレスからデータを読み込む時はキャッシュから読み込む

    • CPUがデータをメモリに書き込む • メモリに書き込んでキャッシュを破棄する • メモリとキャッシュに書き込む (ライトスルー) • キャッシュにしか書き込まないでメインメモリにはあとでまとめて書き込む (ライトバック) 9
  5. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか メモリの速度差 12 ()[   ճTFDԯճTFD ʢʢ5#TFDˠ5#TFDˠ(#TFDʣˠ(#TFDˠ(#TFDʣˠ.#TFD

    FUIFS ˠ.#TFD JOUFSOFU $16 -.# (#TFD ίΞ -,# 5#TFD -,# 5#TFD ॲཧ૷ஔ ϝΠϯϝϞϦ (#(#TFD 44% 5#(#TFD ഒ ഒ ഒ ഒ
  6. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 命令キャッシュとデータキャッシュ • Apple Silicon M1 Pro のCPUコア(高性能)のL1キャッシュは320KB

    • これは命令192KB, データ128KBの合算 • 内部ハーバードアーキテクチャ • 命令用メモリとデータ用メモリを別に扱うアーキテクチャ • 初期のコンピュータ Harvard Mark I で使われたアーキテクチャ • ガチのハーバードアキテクチャはメインメモリも命令用とデータ用がある • 命令とデータはメモリアクセスパターンが違う • それぞれに局所性がある • 命令は(普通は)書き換えが発生しない 13
  7. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 命令・データの局所性 14  QIQ GPS JJJ \

    FDIP)FMMP8PSME ^ L2 #0 EXT_STMT L2 #1 ASSIGN $i 0 L2 #2 JMP J7 L3 #3 EXT_STMT L3 #4 ECHO "Hello World." L2 #5 POST_INC $i ~1 L2 #6 FREE ~1 L2 #7 IS_SMALLER $i 10 ~2 L2 #8 EXT_STMT L2 #9 JMPNZ ~2 J3 L6 #10 RETURN 1 Jʹසൟʹ ΞΫηε ͍ͯ͠Δ ۭؒతʹ͍ۙ ಉ͡ͱ͜ΖΛճ͍ͬͯΔ
  8. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか CPUの脆弱性 Spectre / Meltdown • 2018年初頭に話題になったCPU脆弱性 Spectre

    / Meltdown • 本来読み込めてはいけないメモリ領域を読み込めてしまう(サイドチャネル攻撃) • とても衝撃的だった • キャッシュ、パイプライン、分岐予測といった現代のCPU高速化の基礎となる技 術に対する攻撃 • 根本的な解決をするためにはキャッシュ、パイプライン、分岐予測に手を入れる必要がある • 最近のIntel CPUでハイパースレッディング(1コア内で2コア分の命令実行をする技術)が廃 止されたのはこのタイプの攻撃への対策では…との話もある 18
  9. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか Spectre / Meltdownの仕組み • #0001あたりを実行してる時に#0002〜 #0005あたりも投機的に実行される •

    メモリのアクセス権のチェックはされない • 実行が#0003に進んで等式が成り立つと #0004〜#0005の実行結果は捨てられる (ので#0004は実行されず権限違反エラーは出ない) • #0005が投機的に実行されてるので、$b + 1500のアドレスのデータは読込してる • #1000-#10ffまでを読み込んでみて「やたら 読込が速い所」があればそれが本来読めない #2000のデータ 19  FDIP)FMMP  BSBOE   JG B \HPUP9999^  CSFBE    DSFBE C      c  ff G ΞΫηεݖͷ͋ΔΞυϨε  ΞΫηεݖͷແ͍ΞυϨε
  10. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか RAM • RAMはメモリの一種 • メインメモリとかキャッシュメモリとか • 読み書き可能で比較的高速なメモリ

    • メモリは他にもいろいろある • ROMとかフラッシュメモリとか磁気メモリとかバブルメモリとか • 情報を記憶するデバイスで基板上に固定されてるやつをメモリと呼びそう…? • そういう意味ではSSDとかHDDもメモリだけどあまりメモリとは言わないな…。 • ディスク感(?)あるものはディスクって言うね…。 21