ゲームラグ白書 › L10 メモリ
キャッシュミス CPU cache misses
原因ID mem-cache-miss · 主担当 ゲーム開発チーム・サーバー開発
図と実験のあるメインページでこのカードを開く →
データがメモリのあちこちに散らばっていると、CPUが毎回遅いRAMまで取りに行って待つことになります。
なぜ オブジェクトがポインターでつながって散らばり、順不同にアクセス → すると CPUキャッシュにないので毎回RAMから読む(100倍前後遅い) → 画面では 同じ処理でもティックのコストが数倍、ひどいとスローモーション
- 症状
- スローモーション
- 要因
- ストール
- 誰に起きるか
- サーバー全体
- いつ
- 常に, 人が集中したとき
- 担当
- 主担当 ゲーム開発チーム・サーバー開発
- ゲーム開発チームの対応
- よく一緒に使うデータを連続して配置(データ指向設計)。
- グラフでは
- 最初から常に高い · ティック時間、CPU使用率
- 確認箇所
- ゲームサーバープロセスにperf stat -d -p PIDをかけて、サイクルあたりの命令数(insn per cycle)とL1・LLCのキャッシュミスを計測し、ティック時間・CPU使用率と合わせて確認
- 該当する場合
- CPUはずっと忙しいのにinsn per cycleが低く、LLCミスが多い。データ配置を変えたビルドで、同じ人数でのティック時間が大きく減れば確定
- 該当しない場合
- CPU使用率が低いのにティックが遅いなら、ロック・I/O待ちのようにCPUの外で待っている原因
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
L1キャッシュ0.5ns、L2キャッシュ7ns、メインメモリ100ns(2009年時点):RAMまで行くとキャッシュより1〜2桁遅い - perf-stat(1) — Linux manual page perf
-pで実行中のプロセスのハードウェアイベントを数えてinsn per cycleを表示、-dはL1・LLCのデータキャッシュイベントを追加
あわせて読みたい原因
同じ層:L10 メモリ
同じ症状(スローモーション)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る