|Index|SUSE Telco Cloud Documentación|Configuración de las funciones Telco|Fijación de CPU en el host
Se aplica a SUSE Telco Cloud 3.6

36 Fijación de CPU en el host

La fijación de CPU, también conocida como afinidad de procesador, es la técnica de vincular un proceso o hilo a un núcleo de CPU específico, evitando que el planificador del sistema operativo lo mueva. Al asegurar que un proceso siempre se ejecute en el mismo núcleo, se beneficia de un acceso más rápido a los datos que permanecen en la memoria caché de ese núcleo. Esta práctica es común en entornos de informática de alto rendimiento porque mejora drásticamente el rendimiento y reduce la sobrecarga.

36.1 Aislamiento de CPU mediante TuneD

tuned es una herramienta de ajuste del sistema que supervisa las condiciones del sistema para optimizar el rendimiento utilizando varios perfiles predefinidos. Una característica clave es su capacidad para aislar núcleos de CPU para cargas de trabajo específicas, como aplicaciones en tiempo real. Esto evita que el sistema operativo utilice estos núcleos y aumente potencialmente la latencia.

Para habilitar y configurar esta función, lo primero es crear un perfil para los núcleos de CPU que queremos aislar. En este ejemplo, de entre 64 núcleos, dedicamos 60 núcleos (1-30,33-62) a las aplicaciones y los 4 núcleos restantes se utilizan para tareas de mantenimiento. Tened en cuenta que el diseño de las CPU aisladas depende en gran medida de las aplicaciones en tiempo real.

$ echo "export tuned_params" >> /etc/grub.d/00_tuned

$ echo "isolated_cores=1-30,33-62" >> /etc/tuned/cpu-partitioning-variables.conf

$ tuned-adm profile cpu-partitioning
Tuned (re)started, changes applied.

36.2 Aislamiento de CPU mediante argumentos del kernel

A continuación, debemos modificar la opción de GRUB para aislar los núcleos de CPU y otros parámetros importantes para el uso de la CPU. Las siguientes opciones son importantes para personalizarlas con vuestras especificaciones de hardware actuales:

parametervalordescription

isolcpus

domain,nohz,managed_irq,1-30,33-62

Aislad los núcleos 1-30 y 33-62. domain indica que estas CPU forman parte del dominio de aislamiento. nohz habilita el funcionamiento sin tick en estas CPU aisladas cuando están inactivas, para reducir las interrupciones. managed_irq aísla las CPU fijadas para que no sean objetivo de las IRQ. Esto contempla irqaffinity=0-7, que ya dirige la mayoría de las IRQ a los núcleos de mantenimiento.

skew_tick

1

Esta opción permite al kernel sesgar las interrupciones del temporizador a través de las CPU aisladas.

nohz

on

Cuando está habilitado, la interrupción periódica del temporizador del kernel (el 'tick') se detendrá en cualquier núcleo de CPU que esté inactivo. Esto beneficia principalmente a las CPU de mantenimiento (0,31,32,63). Esto ahorra energía y reduce los despertares innecesarios en esos núcleos de propósito general.

nohz_full

1-30,33-62

Para los núcleos aislados, esto detiene el tick y lo hace incluso cuando la CPU está ejecutando una única tarea activa. Significa que hace que la CPU funcione en modo sin tick completo (o 'dyntick'). El kernel solo enviará interrupciones de temporizador cuando sean realmente necesarias.

rcu_nocbs

1-30,33-62

Esta opción descarga el procesamiento de retrollamadas RCU de núcleos de CPU especificados.

rcu_nocb_poll

 

Cuando esta opción está establecida, las CPU sin retrollamadas RCU realizarán un sondeo periódico para ver si se requiere el manejo de retrollamadas, en lugar de ser despertadas explícitamente por otras CPU. Esto puede reducir la sobrecarga de interrupciones.

irqaffinity

0,31,32,63

Esta opción permite al kernel ejecutar las interrupciones en los núcleos de mantenimiento.

inactivo

poll

Esto minimiza la latencia de salida del estado de inactividad, pero a costa de mantener la CPU funcionando a máxima velocidad en el hilo de inactividad.

nmi_watchdog

0

Esta opción deshabilita solo el watchdog NMI. Esto puede omitirse cuando nowatchdog está establecido.

nowatchdog

 

Esta opción deshabilita el watchdog de soft-lockup, que se implementa como un temporizador que se ejecuta en el contexto de interrupción de hardware del temporizador.

Los siguientes comandos modifican la configuración de GRUB y aplican los cambios mencionados anteriormente para que estén presentes en el próximo arranque:

Editad el archivo /etc/default/grub con los parámetros anteriores y el archivo quedará así:

GRUB_CMDLINE_LINUX="BOOT_IMAGE=/boot/vmlinuz-6.4.0-9-rt root=UUID=77b713de-5cc7-4d4c-8fc6-f5eca0a43cf9 skew_tick=1 rd.timeout=60 rd.retry=45 console=ttyS1,115200 console=tty0 default_hugepagesz=1G hugepagesz=1G hugepages=40 hugepagesz=2M hugepages=0 ignition.platform.id=openstack net.ifnames=1 intel_iommu=on iommu=pt irqaffinity=0,31,32,63 isolcpus=domain,nohz,managed_irq,1-30,33-62 nohz_full=1-30,33-62 nohz=on mce=off nosoftlockup nowatchdog nmi_watchdog=0 quiet rcu_nocb_poll rcu_nocbs=1-30,33-62 rcupdate.rcu_cpu_stall_suppress=1 rcupdate.rcu_expedited=1 rcupdate.rcu_normal_after_boot=1 rcupdate.rcu_task_stall_timeout=0 rcutree.kthread_prio=99 security=selinux selinux=1 idle=poll"

Actualizad la configuración de GRUB:

$ transactional-update grub.cfg
$ reboot

Para validar que los parámetros se aplican después del reinicio, se puede utilizar el siguiente comando para comprobar la línea de comandos del kernel:

$ cat /proc/cmdline

Existe otro script que se puede utilizar para ajustar la configuración de la CPU, que básicamente realiza los siguientes pasos:

  • Estableced el gobernador de CPU en performance.

  • Desactivad la migración del temporizador a las CPU aisladas.

  • Migrad los hilos kdaemon a las CPU de mantenimiento.

  • Ajustad la latencia de las CPU aisladas al valor más bajo posible.

  • Retrasad las actualizaciones de vmstat a 300 segundos.

El script está disponible en el repositorio de ejemplos de SUSE Telco Cloud.