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
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
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
numactl(8) — Linux manual pagenumactl --cpunodebind y --membind fijan la CPU y la memoria de un proceso a un nodo NUMA concreto
numastat(8) — Linux manual pagenumactl 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