Estoy tratando de reducir la latencia de mi aplicación de red de Linux. Aprendí que hay dos herramientas para "vincular" un programa a un núcleo de CPU en particular: conjunto de tareas y cpuset.
- ¿Cuál debería preferir? ¿Son equivalentes en un nivel inferior?
- (la disposición) Mi aplicación tiene un solo subproceso y se supone que procesa una conexión tcp única (sin reconexión) a través de una red LAN rápida con la menor latencia posible. ¿Estoy en el camino correcto?
central-processing-unit
performance-tuning
latency
multi-core
John Linberg
fuente
fuente
Respuestas:
El conjunto de tareas es para vincular un proceso a una o más CPU; esencialmente especificando dónde puede ejecutarse en la ejecución inicial o mientras se está ejecutando. Si utiliza RHEL / CentOS en equipos de servidores modernos,
numactl
se recomienda que lo hagataskset
.Cpuset / cset es para el blindaje de la CPU y es un marco creado alrededor de cgroups de Linux. Cset nunca fue popular en ciertas distribuciones (como RHEL) porque hay otras herramientas disponibles para la gestión de procesos.
El primer comando a continuación crea un escudo que limitaría las tareas del sistema operativo a los núcleos de CPU 0 y 8. El segundo movería su sesión de shell actual al escudo de CPU especificado, lo que da como resultado un aislamiento de los procesos del sistema y del usuario.
Hay otras cosas para verificar y ajustar antes de seguir el camino de los procesos de enlace a las CPU; interrupciones (
irqbalance
deshabilitación parcial), configuración de ahorro de energía, programador del sistema, elevadores de E / S, política en tiempo real (chrt
).Ver: Configuraciones TCP de baja latencia en Ubuntu
Aquí hay un ejemplo ( complicado ) de un contenedor de aplicaciones que selecciona un núcleo, detiene el desequilibrio, lo inicia y pone en la lista negra el núcleo seleccionado, luego ejecuta ./your_program con SCHED_FIFO y la prioridad 99 en el núcleo seleccionado.
fuente
taskset
. Si usa cpuset no es posible alterar sus afinidades de lo que le otorga cpuset.numactl
??sched_setaffinity
.