遊戲 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 節流、該處理程序本身的負載等其他原因
- 確認方式
- 用基礎設施工具確認(不需要遊戲程式碼)
出處
- What is NUMA? Linux kernel
同一個 cell 的記憶體較快、頻寬較大,其他(遠端)cell 的記憶體存取較慢 - numactl(8) — Linux manual page numactl
以 --cpunodebind、--membind 將處理程序的 CPU 與記憶體綁定到特定 NUMA 節點 - numastat(8) — Linux manual page numactl
numa_miss(配置到非預期節點)、other_node(在其他節點執行的處理程序配置到本節點)計數器;-p 顯示處理程序在各節點的記憶體
相關原因
同一層:L10 記憶體
同一症狀(慢動作)在其他層的原因
查看含圖解與實驗的完整版卡片