Slide 1

Slide 1 text

長谷川智希 𝕏 @tomzoh 2024/06/22 PHPカンファレンス福岡2024 なぜキャッシュメモリは速いのか 余談集

Slide 2

Slide 2 text

2 ௕୩઒ஐر ͸͕ͤΘ ͱ΋͖ @tomzoh http://www.dgcircus.com デジタルサーカス株式会社 副団長CTO ॴଐ ٕज़ΧϯϑΝϨϯεओ࠻ دߘɾஶॻ 来たれ!PHPer!We are hiring! 𝕏

Slide 3

Slide 3 text

3 ௕୩઒ஐر ͸͕ͤΘ ͱ΋͖ @tomzoh ςοΫΧϯϑΝϨϯεӡӦࢀՃ ֤छϓϩάϥϜ։ൃ $16 ϨτϩήʔϜػ ిࢠ޻࡞ Ϗʔϧ αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ ϥΠϑϫʔΫ 𝕏

Slide 4

Slide 4 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 4

Slide 5

Slide 5 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談集 • トークのプロポーザルを書く時には「こんな面白い話をしたい!」と思う • ノリノリで資料を作る • 練習すると割り当てられた時間にまったく納まらない • 泣きながら面白いページを削り、スライドの最後に「おまけ」として収録する • 「おまけ」の供養をする時間です 5

Slide 6

Slide 6 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか cache 6

Slide 7

Slide 7 text

長谷川智希 @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

Slide 8

Slide 8 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか いろいろなキャッシュ(2) • ブラウザのキャッシュ • ネットワーク経由でファイルを取得するのに時間がかかるので取得したファイルをローカ ルに保存しておいて同じファイルへのリクエストなら保存したファイルを使う • CPUのキャッシュ • メインメモリからデータを取得するのに時間がかかるので • 取得した値を高速なメモリ(=キャッシュメモリ)に保存しておいて • 次に同じ場所からデータを取得する時はキャッシュメモリから取得する 8

Slide 9

Slide 9 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか キャッシュメモリの動作 • CPUがメインメモリからデータを読み込む • 読み込んだデータはキャッシュに保存 • 次に同じアドレスからデータを読み込む時はキャッシュから読み込む • CPUがデータをメモリに書き込む • メモリに書き込んでキャッシュを破棄する • メモリとキャッシュに書き込む (ライトスルー) • キャッシュにしか書き込まないでメインメモリにはあとでまとめて書き込む (ライトバック) 9

Slide 10

Slide 10 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか CPUのボトルネックの変遷 • メモリがボトルネックになるのは現代のCPUの話 • 1980年代のCPUは命令の処理速度がボトルネックだった • 命令の処理速度が上がりメモリ速度がボトルネックになったので キャッシュが重要になった • CPUの処理装置の利用率をできるだけ上げたい 10

Slide 11

Slide 11 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 投機的実行 • CPUの演算装置の利用率を上げたい • 今実行してる場所の先を先行して実行しておく • 条件分岐がある場合は条件が成立した時と成立しない時の両方を実行しておく • 実際の分岐じゃなかった方は捨てることになる • 投機的実行 11

Slide 12

Slide 12 text

長谷川智希 @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 ഒ ഒ ഒ ഒ

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

長谷川智希 @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ʹසൟʹ ΞΫηε ͍ͯ͠Δ ۭؒతʹ͍ۙ ಉ͡ͱ͜ΖΛճ͍ͬͯΔ

Slide 15

Slide 15 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか Apple Siliconのキャッシュ 15 https://gigazine.net/news/20211026-apple-m1-pro-max/ $16ίΞʢߴੑೳʣ ಺෦ʹ-Ωϟογϡ,# ʢ໋ྩ,# σʔλ,#ʣ -Ωϟογϡ.# ߴੑೳίΞ಺Ͱڞ༗

Slide 16

Slide 16 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談: Apple Siliconのチートなところ 16 $16ʹϝΠϯϝϞϦ΋಺ଂ͍ͯ͠Δ ͍ۙߴ଎Խ͠΍͍͢ ௒ύϥϨϧ઀ଓCJU(#T ΩϟογϡϝϞϦ 43"..# ԯτϥϯδελ ϝΠϯϝϞϦ %3".(#

Slide 17

Slide 17 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談: Apple Siliconのコアのネーミング 17 https://gigazine.net/news/20211026-apple-m1-pro-max/ $16ίΞʢߴੑೳʣ 'JSFTPUSN $16ίΞʢߴޮ཰ʣ *DFTUPSN 厨二心に…響く…

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

長谷川智希 @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 ΞΫηεݖͷ͋ΔΞυϨε ΞΫηεݖͷແ͍ΞυϨε

Slide 20

Slide 20 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談: 外付けキャッシュモジュール 20 https://jp.mercari.com/item/m54957367508 $161PXFS1$.)[ ϝΠϯϝϞϦ.# 04.BD04 .BDJOUPTI1FSGPSNB

Slide 21

Slide 21 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか RAM • RAMはメモリの一種 • メインメモリとかキャッシュメモリとか • 読み書き可能で比較的高速なメモリ • メモリは他にもいろいろある • ROMとかフラッシュメモリとか磁気メモリとかバブルメモリとか • 情報を記憶するデバイスで基板上に固定されてるやつをメモリと呼びそう…? • そういう意味ではSSDとかHDDもメモリだけどあまりメモリとは言わないな…。 • ディスク感(?)あるものはディスクって言うね…。 21

Slide 22

Slide 22 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか パラレルの時代からシリアルの時代へ • 昔はプリンタとかパラレルポートだったけど今はUSBになったりしてる。 • USB = Universal Serial Bus • パラレル8本→シリアル1本とすると通信速度1/8だけど、 シリアル化により8倍以上稼げる 22

Slide 23

Slide 23 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 本当のおわり 23

Slide 24

Slide 24 text

長谷川智希 @tomzoh なぜキャッシュメモリは速いのか Questions? 24