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

Libro blanco del lag en juegos › L10 Memoria

Acceso a memoria NUMA remota Remote NUMA access

ID de la causa mem-numa · Responsable principal Infraestructura de servidores (Equipo de infraestructura)

Abrir la ficha interactiva con gráficos y simulaciones →

En un servidor con dos CPU, el acceso a memoria se vuelve más lento cuando un hilo usa la memoria conectada a la otra CPU.

Por qué El hilo y su memoria quedan en sockets de CPU distintos → Efecto El acceso a memoria se vuelve más lento (1.5–2 veces, según el hardware) → En pantalla Diferencias de rendimiento entre procesos en servidores con las mismas especificaciones

Síntomas
Cámara lenta
Factores
Detención
A quién afecta
Todo el servidor
Cuándo
Siempre
Responsable
Responsable principal Infraestructura de servidores (Equipo de infraestructura)
Tareas (Equipo de infraestructura)
Fijar el proceso y su memoria a un mismo socket (numactl) y, en servidores con dos sockets, repartir los procesos del servidor del juego entre ambos.
En el gráfico
Alto solo en algunos · Tiempo de tick por proceso, memoria por nodo
Dónde mirar
En qué nodo NUMA está la memoria del proceso del servidor del juego (numastat -p PID) y si aumentan numa_miss y other_node en numastat; compararlo con el nodo de la CPU en la que corre ese proceso
Se confirma si
Solo en los procesos lentos la mayor parte de la memoria está en un nodo distinto al de la CPU en la que corren, y la diferencia desaparece al relanzarlos con la CPU y la memoria fijadas a un mismo nodo con numactl
Se descarta si
Si va lento aunque la distribución por nodos sea igual que la de un proceso rápido, apunta a otra causa (vecino ruidoso, throttling de CPU, la carga de ese proceso)
Se verifica con
Con herramientas de infraestructura (no hace falta código del juego)

Fuentes

  1. What is NUMA? Linux kernel
    La memoria de la misma celda es más rápida y tiene más ancho de banda; el acceso a la memoria de otra celda (remota) es más lento
  2. numactl(8) — Linux manual page numactl
    --cpunodebind y --membind fijan la CPU y la memoria de un proceso a un nodo NUMA concreto
  3. numastat(8) — Linux manual page numactl
    Contadores numa_miss (asignación en un nodo distinto del deseado) y other_node (asignación en este nodo de un proceso que corre en otro nodo); -p muestra la memoria por nodo de un proceso

Ver también

Misma capa: L10 Memoria

Causas de otras capas con el mismo síntoma (Cámara lenta)

Ver la ficha interactiva con gráficos y simulaciones