ゲームラグ白書 › L10 メモリ
NUMAのリモートメモリ Remote NUMA access
原因ID mem-numa · 主担当 インフラチーム・サーバーインフラ
図と実験のあるメインページでこのカードを開く →
CPUが2つあるサーバーで、反対側のCPUにつながったメモリを使うとアクセスが遅くなります。
なぜ スレッドとメモリが別々のCPUソケットに配置される → すると メモリアクセスが遅くなる(機器によって1.5〜2倍) → 画面では 同じスペックなのにプロセスごとに性能差
- 症状
- スローモーション
- 要因
- ストール
- 誰に起きるか
- サーバー全体
- いつ
- 常に
- 担当
- 主担当 インフラチーム・サーバーインフラ
- インフラチームの対応
- プロセス・メモリを1つのソケットに固定(numactl)、ソケットが2つならソケットごとにゲームサーバープロセスを分けて配置。
- グラフでは
- 一部だけ高い · プロセスごとのティック時間、ノードごとのメモリ
- 確認箇所
- numastat -p PIDでゲームサーバープロセスのメモリがどのNUMAノードにあるか、numastatのnuma_miss・other_nodeが増えているかを確認し、そのプロセスが動いているCPUのノードと比較
- 該当する場合
- 遅いプロセスだけ、メモリの大半が自分の動いているCPUとは別のノードにあり、numactlでCPU・メモリを1つのノードに固定して再起動すると差がなくなる
- 該当しない場合
- 速いプロセスとノード配置が同じなのに遅いなら、ノイジーネイバー、CPUスロットリング、そのプロセスの負荷など別の原因
- 確認手段
- インフラのツールで確認(ゲームコード不要)
出典
- What is NUMA? Linux kernel
同じセルのメモリはより高速で帯域幅も大きく、別の(リモート)セルのメモリはアクセスが遅い - numactl(8) — Linux manual page numactl
--cpunodebind・--membindでプロセスのCPUとメモリを特定のNUMAノードに固定 - numastat(8) — Linux manual page numactl
numa_miss(希望したノード以外へのアロケーション)・other_node(別のノードで動くプロセスがこのノードにアロケーション)カウンター、-pでプロセスのノードごとのメモリ
あわせて読みたい原因
同じ層:L10 メモリ
同じ症状(スローモーション)を起こすほかの層の原因
図と実験のあるメインページでこのカードを見る