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

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

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

PHPカンファレンス福岡の発表資料です

HASEGAWA Tomoki

June 21, 2024
Tweet

More Decks by HASEGAWA Tomoki

Other Decks in Programming

Transcript

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

    ిࢠ޻࡞  Ϗʔϧ αοΧʔ؍ઓ ϨϯλϧΧʔτϨʔε ʜ ϥΠϑϫʔΫ 𝕏
  2. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか キャッシュって何? • キャッシュと聞いてどんなものを想像しますか? • PHPのOPcache • Webのページキャッシュ

    (CDN: Varnish / Fastly / CloudFront) • ブラウザのキャッシュ • 趣味や業務で作っているシステムで重い処理の結果をファイルに保存しておくやつ • CPUのL1, L2, L3キャッシュ • どれも「何らかの理由で取得に時間がかかるデータを高速に取り寄せるため」 に使われている 10
  3. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか いろいろなキャッシュ(1) • PHPのOPcache • PHPソースコードからopcodeへのコンパイルに時間がかかるのでコンパイル結果を保 存しておいて変更がなければ保存したコンパイル結果を使う •

    Webのページキャッシュ (CDN: Varnish / Fastly / CloudFront) • Webページ(HTML)を組み立てるのに時間がかかるのでHTMLを保存しておいて同じペ ージなら保存したHTMLを返す 11
  4. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか いろいろなキャッシュ(2) • ブラウザのキャッシュ • ネットワーク経由でファイルを取得するのに時間がかかるので取得したファイルをローカ ルに保存しておいて同じファイルへのリクエストなら保存したファイルを使う •

    CPUのキャッシュ • メインメモリからデータを取得するのに時間がかかるので • 取得した値を高速なメモリ(=キャッシュメモリ)に保存しておいて • 次に同じ場所からデータを取得する時はキャッシュメモリから取得する 12
  5. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 2種類のキャッシュ • キャッシュは「何が遅いか」「何をバイパスするためか」によって2種類ある • OPcache, ページキャッシュは元データをコネコネした結果が保存されている =

    コネコネが遅い • ブラウザのキャッシュやCPUのキャッシュは元のデータとまったく同じデータが キャッシュに保存されている = 伝送経路か元のデータ供給が遅い 13
  6. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 体系的な理解を求めて • ある程度わかってくるとコンピュータサイエンスの体系的な知識が欲しくなる • パタヘネとか読む…? 学校に行く…? •

    そこに体系的な知識はある…? そもそも体系的な知識って何だろう?世の中に実在する? • みなさんが駆け出しエンジニアに「どのような順番で何を勉強していったらバック エンドからフロントエンドまで体系的に理解できますか?」と聞かれたら…? • 「IPAの試験は良いと思うけど、最終的には時間をかけていろいろ体験するしかないんじゃ ないかな」 「楽しめないとツライと思うよ。あいつら勉強を勉強と思っていないから。」 • コンピュータサイエンスについても 面白いと思える話を聞くことを繰り返して自分で体系化するしかないのでは? 18
  7. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか CPUはメモリアクセスマシン • CPUは「メインメモリから命令を読み出してその命令を実行する」を ひたすら繰り返す装置 • 「命令を実行」には「メインメモリからデータを読み出す」「書き出す」も含まれる •

    CPUはひたすらメインメモリを読んだり書いたりする装置 • 計算が速くできてもメインメモリから命令やデータを読み出すのが遅ければ 意味が無い • 現代のCPUのボトルネックはメモリアクセス 21
  8. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか SRAMとDRAMのしくみ • SRAM - Static RAM •

    トランジスタでデータを保存し、 電源ある限りデータを保持できる • 速度が速い / トランジスタ数が多い • DRAM - Dynamic RAM • コンデンサ(充電池みたいなもの)に電荷をチャージしてデータを保存する • 1を読み込むと電荷が無くなって0になっちゃう(ので読み込んだ後に再度書き込みが必要) • 1を書き込んでもしばらく時間がたつと0になっちゃう(ので定期的に再書き込みが必要) • 速度が遅い / トランジスタ数が少ない 25 DRAM トランジスタ 1つ https://www.paltek.co.jp/techblog/techinfo/201020-1 SRAM トランジスタ 4つ
  9. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか SRAMとDRAMの使い分け • トランジスタ数 = 価格・面積 • トランジスタ数が増えれば1bitあたりの単価が高くなる

    • 実装面積も増える • 容量優先のメインメモリにはDRAM,速度優先のキャッシュメモリにはSRAMが使われる • SDRAMとかDDR5とかLPDRAMとかも全部DRAM • CPUに内蔵されたキャッシュメモリは全部SRAM(だと思う) • ファミコンとかスーパーファミコンとかゲームボーイのバッテリーバックアップもSRAM • SRAMには低消費電力という利点もある • 最近のそれ系用途にはフラッシュメモリが使われる / データ保持に電力不要 26
  10. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか パラレル接続の弱点 • CPUとメモリ間は多数の配線が並行に結ばれているのでパラレル接続という • 1本の場合はシリアル接続 • USB(=

    Universal Serial Bus)はシリアル • パラレル接続は長距離の高速通信が難しい • 配線の長さが違うとビット単位で通信先への到着タイミングが変わる • 高速通信する配線が隣り合ってると干渉して通信が安定しない 30
  11. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか キャッシュメモリ • CPUのボトルネックはメモリアクセス → メモリアクセスを高速化したい • メインメモリは高速にしづらい

    • メインメモリは大容量が求められるがCPUの近くに置けるメモリ量は限られる(面積の制約) • メインメモリはコンピュータの用途によって必要量が違い、モジュールで拡張可能にしたい (= 遠くに置きたい) • CPUの近くに高速なメモリを置いて良く使うデータをコピーして使う • これがキャッシュメモリ • 一番近いところに置きたいのでCPU内に置くのが一般的 • 関連ワード: データの局所性 34
  12. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談: CPU処理装置の利用率向上 • メモリアクセスを待っているとCPUの処理装置(演算器とか)がヒマ • キャッシュメモリを導入 →

    メモリアクセスを待たない = CPU処理装置の利用率を上げて高速化 • 現在のCPUの高速化の多くは処理装置の利用率向上で実現されている • キャッシュ, パイプライン, 分岐予測, ハイパースレッディング, SIMD, ダークシリコン… 35
  13. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか まとめ キャッシュメモリとは何か • メインメモリから取得したデータを保存しておいて 次に同じ場所からデータを取得する時に高速に取得できる様にするためのメモリ なぜキャッシュメモリを使用するのか •

    CPUの動作のボトルネックであるメインメモリアクセスを速くするため キャッシュメモリはメインメモリと何が違うのか • 速い / 少量 / CPUコアの近くに配置されている 結局なぜキャッシュメモリは速いのか • 速くないとキャッシュメモリとして用をなさないから • 速いメモリ(SRAM)がCPUコアの近くに配置されているから 36
  14. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか おわりに • このタイプの話がお好きだったら関連ワードについて調べてみたり、 「コンピュータの構成と設計」(パタヘネ)とか読んでみたりしても良いかも (「体系的?」「面白い?」と言われると「う〜ん?」なのですがテーマとしては網羅されている) • アプリケーション的なキャッシュについてはまたの機会に…。

    • コンピュータサイエンスを楽しみましょう! 37 パイプライン, 分岐予測, ハイパースレッディング, SIMD, ダークシリコン, Spectre/Meltdown 関連ワード There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton https://www.martinfowler.com/bliki/TwoHardThings.html
  15. 長谷川智希 @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コア間で共有 41
  16. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談: CPUの脆弱性 Spectre / Meltdown • 2018年初頭に話題になったCPU脆弱性

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

    次に同じアドレスからデータを読み込む時はキャッシュから読み込む • CPUがデータをメモリに書き込む • メモリに書き込んでキャッシュを破棄する • メモリとキャッシュに書き込む (ライトスルー) • キャッシュにしか書き込まないでメインメモリにはあとでまとめて書き込む (ライトバック) 47
  18. 長谷川智希 @tomzoh なぜキャッシュメモリは速いのか 余談: 命令キャッシュとデータキャッシュ • Apple Silicon M1 Pro

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

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