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

遊戲 Lag 白皮書 › L10 記憶體

快取未命中 CPU cache misses

原因 ID mem-cache-miss · 主要負責 遊戲開發團隊(伺服器開發)

在含圖解與實驗的完整版中開啟卡片 →

資料散落在記憶體各處時,CPU 每次都必須到較慢的 RAM 讀取並等待資料。

為什麼 物件透過指標散落各處,存取順序雜亂 → 於是 CPU 快取裡沒有,每次都要從 RAM 讀取(慢 100 倍左右) → 畫面上 做同樣的事,tick 成本卻高出數倍,嚴重時出現慢動作

症狀
慢動作
因素
停滯
誰會遇到
整個伺服器
何時
一直都有, 人潮湧入時
負責單位
主要負責 遊戲開發團隊(伺服器開發)
遊戲開發團隊要做的事
把經常一起使用的資料連續排列(資料導向設計)。
圖表上
一開始就一直偏高 · tick 時間、CPU 使用率
查看位置
對遊戲伺服器處理程序執行 perf stat -d -p PID,量測每週期指令數(insn per cycle)與 L1、LLC 快取未命中,並與 tick 時間、CPU 使用率一起看
符合的跡象
CPU 一直很忙,但 insn per cycle 偏低、LLC 未命中很多。改變資料布局的 build 在相同人數下 tick 時間大幅縮短,即可確定
不符合的跡象
CPU 使用率低但 tick 很慢時,是鎖、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 讀取比快取慢一到兩個數量級
  2. perf-stat(1) — Linux manual page perf
    -p 會計算執行中處理程序的硬體事件並顯示 insn per cycle;-d 會加上 L1、LLC 資料快取事件

相關原因

同一層:L10 記憶體

同一症狀(慢動作)在其他層的原因

查看含圖解與實驗的完整版卡片