Ir al contenido

numactl - Enlace de CPU y memoria NUMA

numactl - Enlace de CPU y memoria NUMA

numactl controla la política de NUMA (Acceso a memoria no uniforme) para procesos. En servidores multi-socket, la memoria conectada a un socket de CPU (nodo) es más rápida para que ese socket acceda que la memoria en otro nodo; un proceso rebotando entre nodos paga una penalidad de latencia. numactl te permite enlazar un proceso a nodos NUMA específicos — fijando sus CPUs y su memoria al mismo nodo — lo que puede mejorar significativamente el rendimiento para cargas de trabajo vinculadas a memoria como bases de datos y trabajos de HPC.

Instalación

PlataformaComando
Debian/Ubuntusudo apt install numactl
Fedora/RHELsudo dnf install numactl
Arch Linuxsudo pacman -S numactl
Verificarnumactl --version

Inspeccionando la topología

ComandoMuestra
numactl --hardware (-H)Nodos NUMA, CPUs por nodo, memoria por nodo, distancias
numactl --show (-s)Política NUMA del proceso actual
numastatEstadísticas de hit/miss de asignación por nodo
lscpuMapeo de CPU a nodo (CPUs de nodo NUMA)
# Ve cuántos nodos NUMA y qué CPUs/memoria pertenecen a cada uno
numactl --hardware

Enlazando un proceso

ComandoEfecto
numactl --cpunodebind=0 --membind=0 ./appEjecuta en CPUs y memoria del nodo 0
numactl -N 1 -m 1 ./appForma corta: CPUs + memoria del nodo 1
numactl --physcpubind=0-7 ./appEnlaza a núcleos de CPU específicos
numactl --membind=0,1 ./appPermite memoria de nodos 0 y 1
numactl --interleave=all ./appDispersa memoria entre todos los nodos (round-robin)

Políticas de memoria

PolíticaBanderaSignificado
Enlace--membind=NODESSolo asignar de estos nodos (falla si está lleno)
Preferido--preferred=NODEPrefiere un nodo, retrocede si es necesario
Intercalar--interleave=NODESRound-robin entre nodos (ancho de banda)
Local--localallocAsigna en el nodo donde se ejecuta el thread

Cuándo usar cuál

ObjetivoPolítica
Sensible a latencia, cabe en un nodo--cpunodebind=N --membind=N (co-locate)
Vinculado a ancho de banda, huella grande--interleave=all
Principalmente un nodo, derrame ocasional--preferred=N
Dejar que el kernel decida localmente--localalloc

Flujos de trabajo comunes

# Fija una base de datos al nodo 0 para evitar latencia de memoria entre nodos
numactl --cpunodebind=0 --membind=0 postgres -D /data

# Trabajo de análisis intensivo en ancho de banda: intercala memoria entre todos los nodos
numactl --interleave=all ./analytics-job

# Reserva núcleos específicos para un proceso de tiempo real
numactl --physcpubind=8-15 --membind=1 ./rt-app

# Comprueba qué política usa una configuración en ejecución
numactl --show

Herramientas de sintonización relacionadas

HerramientaRol
numactlEstablece política de CPU/memoria NUMA por proceso
numastatMonitorea eficiencia de asignación por nodo
tasksetAfinidad de CPU (sin política de memoria NUMA)
cpupowerSintonización de frecuencia/gobernador de CPU
numa_balancing del kernelEquilibrio automático de NUMA (/proc/sys/kernel)

Empareja numactl con cpupower para control de frecuencia; usa numastat para confirmar que tu enlace realmente redujo fallos entre nodos.

Verificando la ganancia

# Antes/después: ve cómo numa_miss / numa_foreign caen después de enlazar
numastat -p $(pgrep -n app)

numa_miss / numa_foreign alto significa que la memoria se sirve desde un nodo remoto — exactamente lo que arregla el enlace.

Recursos