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

遊戲 Lag 白皮書 › L10 記憶體

NUMA 遠端記憶體 Remote NUMA access

原因 ID mem-numa · 主要負責 基礎設施團隊(伺服器基礎設施)

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

在有兩顆 CPU 的伺服器上,使用接在另一顆 CPU 上的記憶體時,存取會變慢。

為什麼 執行緒與記憶體位於不同的 CPU 插槽(socket) → 於是 記憶體存取變慢(依設備不同,約慢 1.5~2 倍) → 畫面上 規格相同,各處理程序的效能卻有落差

症狀
慢動作
因素
停滯
誰會遇到
整個伺服器
何時
一直都有
負責單位
主要負責 基礎設施團隊(伺服器基礎設施)
基礎設施團隊要做的事
把處理程序與記憶體綁定在同一個插槽(numactl);有兩個插槽時,每個插槽各自執行遊戲伺服器處理程序。
圖表上
只有部分偏高 · 各處理程序的 tick 時間、各節點的記憶體
查看位置
用 numastat -p PID 查看遊戲伺服器處理程序的記憶體位於哪個 NUMA 節點、numastat 的 numa_miss、other_node 是否增加,並與該處理程序執行所在 CPU 的節點比較
符合的跡象
只有慢的處理程序大部分記憶體位於與其執行 CPU 不同的節點,用 numactl 把 CPU 與記憶體綁定在同一節點重新啟動後,差距消失
不符合的跡象
節點分布與快的處理程序相同卻仍然慢時,是 noisy neighbor、CPU 節流、該處理程序本身的負載等其他原因
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. What is NUMA? Linux kernel
    同一個 cell 的記憶體較快、頻寬較大,其他(遠端)cell 的記憶體存取較慢
  2. numactl(8) — Linux manual page numactl
    以 --cpunodebind、--membind 將處理程序的 CPU 與記憶體綁定到特定 NUMA 節點
  3. numastat(8) — Linux manual page numactl
    numa_miss(配置到非預期節點)、other_node(在其他節點執行的處理程序配置到本節點)計數器;-p 顯示處理程序在各節點的記憶體

相關原因

同一層:L10 記憶體

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

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