한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

ゲームラグ白書 › 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の外で待っている原因
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. Designs, Lessons and Advice from Building Large Distributed Systems (LADIS 2009 keynote) Google
    L1キャッシュ0.5ns、L2キャッシュ7ns、メインメモリ100ns(2009年時点):RAMまで行くとキャッシュより1〜2桁遅い
  2. perf-stat(1) — Linux manual page perf
    -pで実行中のプロセスのハードウェアイベントを数えてinsn per cycleを表示、-dはL1・LLCのデータキャッシュイベントを追加

あわせて読みたい原因

同じ層:L10 メモリ

同じ症状(スローモーション)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る