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

ゲームラグ白書 › 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スロットリング、そのプロセスの負荷など別の原因
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. What is NUMA? Linux kernel
    同じセルのメモリはより高速で帯域幅も大きく、別の(リモート)セルのメモリはアクセスが遅い
  2. numactl(8) — Linux manual page numactl
    --cpunodebind・--membindでプロセスのCPUとメモリを特定のNUMAノードに固定
  3. numastat(8) — Linux manual page numactl
    numa_miss(希望したノード以外へのアロケーション)・other_node(別のノードで動くプロセスがこのノードにアロケーション)カウンター、-pでプロセスのノードごとのメモリ

あわせて読みたい原因

同じ層:L10 メモリ

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

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