Control de los estados del procesador de la instancia EC2 - Amazon Elastic Compute Cloud

Control de los estados del procesador de la instancia EC2

Los estados C controlan los niveles de suspensión en los que puede entrar el núcleo cuando está inactivo. Los estados C se enumeran comenzando por C0 (el estado menos profundo, cuando el núcleo está totalmente activo y ejecutando instrucciones) y hasta C6 (el estado de inactividad más profundo en el que el núcleo está desactivado).

Los estados P controlan el rendimiento deseado (en frecuencia de CPU) desde un núcleo. Los estados P se enumeran comenzando por P0 (el ajuste de rendimiento más alto con el que el núcleo puede utilizar la tecnología Intel Turbo Boost Technology para aumentar la frecuencia si es posible) y van de P1 (el estado P que solicita la frecuencia básica máxima) hasta P15 (la frecuencia más baja posible).

Los siguientes tipos de instancias ofrecen la capacidad de que un sistema operativo controle los estados C y P del procesador:

  • Uso general: m4.10xlarge | m4.16xlarge | m5.metal | m5d.metal | m5n.metal | m5zn.metal | m6i.metal | m6id.metal

  • Optimizada para computación: c4.8xlarge | c5.metal | c5n.metal | c6i.metal | c6id.metal

  • Optimizadas para memoria: r4.8xlarge | r4.16xlarge | r5.metal | r5b.metal | r5d.metal | r6i.metal | u-6tb1.metal | u-9tb1.metal | u-12tb1.metal | u-18tb1.metal | u-24tb1.metal | x1.16xlarge | x1.32xlarge | x1e.8xlarge | x1e.16xlarge | x1e.32xlarge | z1d.metal

  • Optimizadas para almacenamiento: d2.8xlarge | i3.8xlarge | i3.16xlarge | i3.metal | i3en.metal | h1.8xlarge | h1.16xlarge

  • Computación acelerada: f1.16xlarge | g3.16xlarge | g4dn.metal | p2.16xlarge | p3.16xlarge

Los siguientes tipos de instancias ofrecen la capacidad de que un sistema operativo controle los estados C del procesador:

  • De uso general: m5.12xlarge | m5.24xlarge | m5d.12xlarge | m5d.24xlarge | m5n.12xlarge | m5n.24xlarge | m5dn.12xlarge | m5dn.24xlarge | m6a.24xlarge | m6a.48xlarge | m6ad.metal | m6i.16xlarge | m6i.32xlarge | m7i.large | m7i.xlarge | m7i.2xlarge | m7i.4xlarge | m7i.8xlarge | m7i.12xlarge | m7i.16xlarge | m7i.24xlarge | m7i.48xlarge

  • Optimizado para computación: c5.9xlarge | c5.12xlarge | c5.18xlarge | c5.24xlarge | c5a.24xlarge | c5ad.24xlarge | c5d.9xlarge | c5d.12xlarge | c5d.18xlarge | c5d.24xlarge | c5n.9xlarge | c5n.18xlarge | c6a.24xlarge | c6a.32xlarge | c6a.48xlarge | c6i.16xlarge | c6i.32xlarge

  • Optimizadas para memoria: r5.12xlarge | r5.24xlarge | r5d.12xlarge | r5d.24xlarge | r5n.12xlarge | r5n.24xlarge | r5dn.12xlarge | r5dn.24xlarge | r6a.24xlarge | r6a.48xlarge | r6i.16xlarge | r6i.32xlarge | u-6tb1.56xlarge | u-6tb1.112xlarge | u-9tb1.112xlarge | u-12tb1.112xlarge | u-18tb1.112xlarge | u-24tb1.112xlarge | z1d.6xlarge | z1d.12xlarge

  • Optimizado para almacenamiento: d3en.12xlarge | dl1.24xlarge | i3en.12xlarge | i3en.24xlarge | i4i.metal | r5b.12xlarge | r5b.24xlarge | i4i.16xlarge

  • Computación acelerada: dl1.24xlarge | g5.24xlarge | g5.48xlarge | inf1.24xlarge | p3dn.24xlarge | p4d.24xlarge | p4de.24xlarge | vt1.24xlarge

Los procesadores AWS Graviton tienen modos de ahorro de energía integrados y funcionan a una frecuencia fija. Por lo tanto, no proporcionan la capacidad del sistema operativo para controlar los estados C y P.

Es posible que desee cambiar los ajustes del estado C o P para aumentar la uniformidad del rendimiento del procesador, reducir la latencia o ajustar la instancia para una carga de trabajo concreta. Los ajustes de estado C y P predeterminados ofrecen un rendimiento máximo, que es óptimo para la mayoría de cargas de trabajo. Sin embargo, si la aplicación puede beneficiarse de una latencia reducida a costa de frecuencias superiores de núcleo doble o único, o de un rendimiento uniforme a frecuencias más bajas en lugar de frecuencias por ráfagas Turbo Boost, plantéese experimentar con los ajustes de estado C o P disponibles para estas instancias.

Las siguientes secciones describen las distintas configuraciones de estado del procesador y cómo monitorizar los efectos de la configuración. Estos procedimientos se han escrito para Amazon Linux; sin embargo, también pueden funcionar para otras distribuciones de Linux con una versión de kernel de Linux 3.9 o más nueva. Para obtener más información acerca de otras distribuciones de Linux y el control de estados del procesador, consulte la documentación específica de su sistema.

nota

En los ejemplos de esta página se utiliza lo siguiente:

  • La utilidad turbostat para mostrar la frecuencia del procesador y la información del estado C. La utilidad turbostat está disponible en Amazon Linux de forma predeterminada.

  • El comando stress para simular una carga de trabajo. Para instalar stress, habilite primero el repositorio EPEL mediante la ejecución de sudo amazon-linux-extras install epel y, a continuación, sudo yum install -y stress.

Si la salida no muestra la información del estado C, incluya la opción --debug en el comando (sudo turbostat --debug stress <options>).

Máximo rendimiento con frecuencia máxima de Turbo Boost

Esta es la configuración predeterminada de control de estados del procesador para Amazon Linux AMI y se recomienda para la mayoría de cargas de trabajo. Esta configuración ofrece el rendimiento más alto con la menor variabilidad. Al permitir que los núcleos inactivos entren en estados de suspensión más profundos, se obtiene el margen térmico necesario para que los procesos de núcleo único o doble alcancen su máximo potencial de Turbo Boost.

El siguiente ejemplo muestra una instancia c4.8xlarge con dos núcleos funcionando activamente y llegando a su frecuencia máxima de procesador Turbo Boost.

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [30680] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [30680] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.54 3.44 2.90 0 9.18 0.00 85.28 0.00 0.00 0.00 0.00 0.00 94.04 32.70 54.18 0.00 0 0 0 0.12 3.26 2.90 0 3.61 0.00 96.27 0.00 0.00 0.00 0.00 0.00 48.12 18.88 26.02 0.00 0 0 18 0.12 3.26 2.90 0 3.61 0 1 1 0.12 3.26 2.90 0 4.11 0.00 95.77 0.00 0 1 19 0.13 3.27 2.90 0 4.11 0 2 2 0.13 3.28 2.90 0 4.45 0.00 95.42 0.00 0 2 20 0.11 3.27 2.90 0 4.47 0 3 3 0.05 3.42 2.90 0 99.91 0.00 0.05 0.00 0 3 21 97.84 3.45 2.90 0 2.11 ... 1 1 10 0.06 3.33 2.90 0 99.88 0.01 0.06 0.00 1 1 28 97.61 3.44 2.90 0 2.32 ... 10.002556 sec

En este ejemplo, las vCPU 21 y 28 funcionan a su máxima frecuencia Turbo Boost porque los demás núcleos han pasado al estado de inactividad C6 para ahorrar energía y ofrecer margen térmico y de potencia para los núcleos que están en funcionamiento. Las vCPU 3 y 10 (cada una comparte un núcleo de procesador con las vCPU 21 y 28) se encuentran en el estado C1, a la espera de instrucciones.

En el siguiente ejemplo, los 18 núcleos están funcionando activamente, de modo que no hay margen para la frecuencia máxima Turbo Boost, pero todos funcionan a la velocidad "todos los núcleos Turbo Boost" de 3,2 GHz.

[ec2-user ~]$ sudo turbostat stress -c 36 -t 10 stress: info: [30685] dispatching hogs: 36 cpu, 0 io, 0 vm, 0 hdd stress: info: [30685] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 99.27 3.20 2.90 0 0.26 0.00 0.47 0.00 0.00 0.00 0.00 0.00 228.59 31.33 199.26 0.00 0 0 0 99.08 3.20 2.90 0 0.27 0.01 0.64 0.00 0.00 0.00 0.00 0.00 114.69 18.55 99.32 0.00 0 0 18 98.74 3.20 2.90 0 0.62 0 1 1 99.14 3.20 2.90 0 0.09 0.00 0.76 0.00 0 1 19 98.75 3.20 2.90 0 0.49 0 2 2 99.07 3.20 2.90 0 0.10 0.02 0.81 0.00 0 2 20 98.73 3.20 2.90 0 0.44 0 3 3 99.02 3.20 2.90 0 0.24 0.00 0.74 0.00 0 3 21 99.13 3.20 2.90 0 0.13 0 4 4 99.26 3.20 2.90 0 0.09 0.00 0.65 0.00 0 4 22 98.68 3.20 2.90 0 0.67 0 5 5 99.19 3.20 2.90 0 0.08 0.00 0.73 0.00 0 5 23 98.58 3.20 2.90 0 0.69 0 6 6 99.01 3.20 2.90 0 0.11 0.00 0.89 0.00 0 6 24 98.72 3.20 2.90 0 0.39 ...

Alto rendimiento y baja latencia con limitación de estados C más profundos

Los estados C controlan los niveles de suspensión en los que puede entrar un núcleo cuando está inactivo. Puede que desee controlar los estados C para ajustar el sistema en cuanto a latencia, en lugar del rendimiento. Hacer que los núcleos pasen al estado de suspensión lleva tiempo y aunque un núcleo en suspensión ofrece más margen para que otro núcleo arranque a una frecuencia superior, el núcleo en suspensión tarda un tiempo en activarse y en funcionar. Por ejemplo, si un núcleo al que se asigna que gestione un paquete de red interrumpe su suspensión, puede haber un retraso en el servicio que produzca una interrupción. Puede configurar el sistema para que no utilice estados C más profundos, con lo que se reduce la latencia de reacción del procesador, aunque también se reduce el margen disponible para que otros núcleos alcancen la frecuencia Turbo Boost.

Un caso habitual en el que se deshabilitan los estados de suspensión más profundos es una aplicación de base de datos Redis que almacena la base de datos en la memoria del sistema para ofrecer la máxima rapidez al responder a una consulta.

Para limitar estados de suspensión más profundos en Amazon Linux 2
  1. Abra el archivo /etc/default/grub con el editor que prefiera.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Edite la línea GRUB_CMDLINE_LINUX_DEFAULT y agregue las opciones intel_idle.max_cstate=1 y processor.max_cstate=1 para configurar C1 como el estado C más profundo para núcleos inactivos.

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1" GRUB_TIMEOUT=0

    La opción intel_idle.max_cstate=1 configura el límite del estado C para las instancias basadas en Intel, y la opción processor.max_cstate=1 configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

  3. Guarde el archivo y salga del editor.

  4. Ejecute el siguiente comando para volver a compilar la configuración de arranque.

    [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

    [ec2-user ~]$ sudo reboot
Para limitar estados de suspensión más profundos en la Amazon Linux AMI
  1. Abra el archivo /boot/grub/grub.conf con el editor que prefiera.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Edite la línea kernel de la primera entrada y agregue las opciones intel_idle.max_cstate=1 y processor.max_cstate=1 para establecer C1 como el estado C más profundo para núcleos inactivos.

    # created by imagebuilder default=0 timeout=1 hiddenmenu title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64) root (hd0,0) kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 processor.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img

    La opción intel_idle.max_cstate=1 configura el límite del estado C para las instancias basadas en Intel, y la opción processor.max_cstate=1 configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

  3. Guarde el archivo y salga del editor.

  4. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

    [ec2-user ~]$ sudo reboot

El siguiente ejemplo muestra una instancia c4.8xlarge con dos núcleos funcionando activamente en la frecuencia de núcleo "todos los núcleos Turbo Boost".

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5322] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5322] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.56 3.20 2.90 0 94.44 0.00 0.00 0.00 0.00 0.00 0.00 0.00 131.90 31.11 199.47 0.00 0 0 0 0.03 2.08 2.90 0 99.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 67.23 17.11 99.76 0.00 0 0 18 0.01 1.93 2.90 0 99.99 0 1 1 0.02 1.96 2.90 0 99.98 0.00 0.00 0.00 0 1 19 99.70 3.20 2.90 0 0.30 ... 1 1 10 0.02 1.97 2.90 0 99.98 0.00 0.00 0.00 1 1 28 99.67 3.20 2.90 0 0.33 1 2 11 0.04 2.63 2.90 0 99.96 0.00 0.00 0.00 1 2 29 0.02 2.11 2.90 0 99.98 ...

En este ejemplo, los núcleos de vCPUs 19 y 28 funcionan a 3,2 GHz y los demás núcleos están en el estado C C1, a la espera de instrucciones. Aunque los núcleos en funcionamiento no están llegando a su frecuencia máxima Turbo Boost, los núcleos inactivos serán mucho más rápidos a la hora de responder a nuevas solicitudes que si estuvieran en el estado C C6 más profundo.

Rendimiento básico con el mínimo de variabilidad

Puede reducir la variabilidad de la frecuencia del procesador con los estados P. Los estados P controlan el rendimiento deseado (en frecuencia de CPU) desde un núcleo. La mayoría de cargas de trabajo presentan un mejor rendimiento en P0, que solicita Turbo Boost. Pero puede ajustar el sistema para obtener un rendimiento uniforme en lugar de un rendimiento por ráfagas, lo que puede ocurrir cuando se habilitan frecuencias Turbo Boost.

Las cargas de trabajo Intel Advanced Vector Extensions (AVX o AVX2) pueden funcionar bien a frecuencias menores y las instrucciones AVX pueden utilizar más potencia. Al ejecutar el procesador a una frecuencia más baja deshabilitando Turbo Boost, se puede reducir la cantidad de potencia usada y mantener una velocidad más uniforme. Para obtener más información acerca de la optimización de la configuración de instancias y la carga de trabajo de AVX, consulte el sitio web de Intel.

Los controladores inactivos de CPU controlan el estado P. Las generaciones de CPU más recientes requieren controladores inactivos de CPU actualizados que se corresponden con el nivel de kernel de la siguiente manera:

  • Versiones del kernel de Linux 5.6 y superiores (por ejemplo, m6i): admite Intel Icelake.

  • Versiones del kernel de Linux 5.10 y superiores (por ejemplo, m6a): admite AMD Milan.

Para detectar si el kernel de un sistema en ejecución reconoce la CPU, ejecute el siguiente comando.

if [ -d /sys/devices/system/cpu/cpu0/cpuidle ]; then echo "C-state control enabled"; else echo "Kernel cpuidle driver does not recognize this CPU generation"; fi

Si el resultado de este comando indica falta de compatibilidad, se recomienda actualizar el kernel.

Esta sección describe cómo limitar estados de suspensión más profundos y deshabilitar Turbo Boost (solicitando el estado P P1) para obtener baja latencia y la mínima variabilidad en la velocidad del procesador para estos tipos de cargas de trabajo.

Para limitar los estados de suspensión más profundos y deshabilitar Turbo Boost en Amazon Linux 2
  1. Abra el archivo /etc/default/grub con el editor que prefiera.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Edite la línea GRUB_CMDLINE_LINUX_DEFAULT y agregue las opciones intel_idle.max_cstate=1 y processor.max_cstate=1 para configurar C1 como el estado C más profundo para núcleos inactivos.

    GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 intel_idle.max_cstate=1 processor.max_cstate=1" GRUB_TIMEOUT=0

    La opción intel_idle.max_cstate=1 configura el límite del estado C para las instancias basadas en Intel, y la opción processor.max_cstate=1 configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

  3. Guarde el archivo y salga del editor.

  4. Ejecute el siguiente comando para volver a compilar la configuración de arranque.

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

    [ec2-user ~]$ sudo reboot
  6. Cuando necesite la baja variabilidad de velocidad del procesador que ofrece el estado P P1, ejecute el siguiente comando para deshabilitar Turbo Boost.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  7. Cuando finalice la carga de trabajo, puede volver a habilitar Turbo Boost con el siguiente comando.

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
Para limitar los estados de suspensión más profundos y deshabilitar Turbo Boost en la Amazon Linux AMI
  1. Abra el archivo /boot/grub/grub.conf con el editor que prefiera.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Edite la línea kernel de la primera entrada y agregue las opciones intel_idle.max_cstate=1 y processor.max_cstate=1 para establecer C1 como el estado C más profundo para núcleos inactivos.

    # created by imagebuilder default=0 timeout=1 hiddenmenu title Amazon Linux 2014.09 (3.14.26-24.46.amzn1.x86_64) root (hd0,0) kernel /boot/vmlinuz-3.14.26-24.46.amzn1.x86_64 root=LABEL=/ console=ttyS0 intel_idle.max_cstate=1 processor.max_cstate=1 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img

    La opción intel_idle.max_cstate=1 configura el límite del estado C para las instancias basadas en Intel, y la opción processor.max_cstate=1 configura el límite del estado C para las instancias basadas en AMD. Es seguro agregar ambas opciones a la configuración. Eso permite establecer el comportamiento deseado en Intel y AMD con una sola configuración.

  3. Guarde el archivo y salga del editor.

  4. Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.

    [ec2-user ~]$ sudo reboot
  5. Cuando necesite la baja variabilidad de velocidad del procesador que ofrece el estado P P1, ejecute el siguiente comando para deshabilitar Turbo Boost.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. Cuando finalice la carga de trabajo, puede volver a habilitar Turbo Boost con el siguiente comando.

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"

El siguiente ejemplo muestra una instancia c4.8xlarge con dos vCPUs funcionando activamente en la frecuencia de núcleo básica, sin Turbo Boost.

[ec2-user ~]$ sudo turbostat stress -c 2 -t 10 stress: info: [5389] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd stress: info: [5389] successful run completed in 10s pk cor CPU %c0 GHz TSC SMI %c1 %c3 %c6 %c7 %pc2 %pc3 %pc6 %pc7 Pkg_W RAM_W PKG_% RAM_% 5.59 2.90 2.90 0 94.41 0.00 0.00 0.00 0.00 0.00 0.00 0.00 128.48 33.54 200.00 0.00 0 0 0 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 65.33 19.02 100.00 0.00 0 0 18 0.04 2.90 2.90 0 99.96 0 1 1 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 1 19 0.04 2.90 2.90 0 99.96 0 2 2 0.04 2.90 2.90 0 99.96 0.00 0.00 0.00 0 2 20 0.04 2.90 2.90 0 99.96 0 3 3 0.05 2.90 2.90 0 99.95 0.00 0.00 0.00 0 3 21 99.95 2.90 2.90 0 0.05 ... 1 1 28 99.92 2.90 2.90 0 0.08 1 2 11 0.06 2.90 2.90 0 99.94 0.00 0.00 0.00 1 2 29 0.05 2.90 2.90 0 99.95

Los núcleos de vCPUs 21 y 28 están funcionando activamente a la velocidad de procesador básica de 2,9 GHz y todos los núcleos inactivos también están funcionando a la velocidad básica en el estado C C1, listos para aceptar instrucciones.