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

游戏卡顿白皮书 › 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 和内存绑定到同一节点后重启,差异消失
排除依据
节点分布与快的进程相同却仍然慢,是邻居干扰、CPU 限流、该进程自身负载等其他原因
确认手段
运维工具即可确认(无需游戏代码)

出处

  1. What is NUMA? Linux kernel
    同一单元(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 内存

其他层中同样导致“慢动作”的原因

查看含图示和实验的原卡片