Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Control del estado del procesador para tu EC2 AL2 instancia de Amazon
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).
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.
Para obtener información sobre los tipos de EC2 instancias de Amazon que permiten al sistema operativo controlar los estados C y P del procesador, consulte Control del estado del procesador para su EC2 instancia de Amazon en la Guía EC2 del usuario de Amazon.
Las siguientes secciones describen las distintas configuraciones de estado del procesador y cómo monitorizar los efectos de la configuración. Estos procedimientos se escribieron para Amazon Linux y se aplican a él; sin embargo, es posible que también funcionen para otras distribuciones de Linux con una versión 3.9 o posterior del kernel de Linux.
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>).
Contenido
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 10stress: 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.843.452.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.613.442.90 0 2.32 ... 10.002556 sec
En este ejemplo, las versiones CPUs 21 y 28 funcionan a su frecuencia máxima de Turbo Boost porque los demás núcleos han entrado en estado de C6 reposo para ahorrar energía y proporcionar potencia y espacio térmico a los núcleos de trabajo. Las versiones CPUs 3 y 10 (cada una de las cuales comparte un núcleo de procesador con las versiones CPUs 21 y 28) están en ese C1 estado esperando instrucciones.
En el siguiente ejemplo, los 18 núcleos están trabajando activamente, por lo que no hay margen para el Turbo Boost máximo, pero todos funcionan a la velocidad de 3.2 «Turbo Boost para todos los núcleos» GHz.
[ec2-user ~]$sudo turbostat stress -c 36 -t 10stress: 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 los estados de sueño más profundos, active AL2
-
Abra el archivo
/etc/default/grubcon el editor que prefiera.[ec2-user ~]$sudo vim /etc/default/grub -
Edite la línea
GRUB_CMDLINE_LINUX_DEFAULTy agregue las opcionesintel_idle.max_cstate=1yprocessor.max_cstate=1para configurarC1como 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=4294967295intel_idle.max_cstate=1 processor.max_cstate=1" GRUB_TIMEOUT=0La opción
intel_idle.max_cstate=1configura el límite del estado C para las instancias basadas en Intel, y la opciónprocessor.max_cstate=1configura 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. -
Guarde el archivo y salga del editor.
-
Ejecute el siguiente comando para volver a compilar la configuración de arranque.
[ec2-user ~]$sudo grub2-mkconfig -o /boot/grub2/grub.cfg -
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
-
Abra el archivo
/boot/grub/grub.confcon el editor que prefiera.[ec2-user ~]$sudo vim /boot/grub/grub.conf -
Edite la línea
kernelde la primera entrada y agregue las opcionesintel_idle.max_cstate=1yprocessor.max_cstate=1para establecerC1como 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=ttyS0intel_idle.max_cstate=1 processor.max_cstate=1initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.imgLa opción
intel_idle.max_cstate=1configura el límite del estado C para las instancias basadas en Intel, y la opciónprocessor.max_cstate=1configura 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. -
Guarde el archivo y salga del editor.
-
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 10stress: 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.703.202.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.673.202.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 las CPUs versiones 19 y 28 funcionan a 3.2 GHz y los demás núcleos se encuentran en el C1 estado C, esperando 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 AVX AVX2) pueden funcionar bien a frecuencias más bajas, y las instrucciones AVX pueden consumir más energía. 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 6.1 y superiores del kernel de Linux: es compatible con Intel Granite Rapids (por ejemplo, R8i)
-
Versiones 5.10 y superiores del kernel de Linux: compatible con AMD Milan (por ejemplo, M6a)
-
Versiones 5.6 y superiores del kernel de Linux: compatible con Intel Icelake (por ejemplo, M6i)
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 sueño más profundos y desactivar Turbo Boost AL2
-
Abra el archivo
/etc/default/grubcon el editor que prefiera.[ec2-user ~]$sudo vim /etc/default/grub -
Edite la línea
GRUB_CMDLINE_LINUX_DEFAULTy agregue las opcionesintel_idle.max_cstate=1yprocessor.max_cstate=1para configurarC1como 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=4294967295intel_idle.max_cstate=1 processor.max_cstate=1" GRUB_TIMEOUT=0La opción
intel_idle.max_cstate=1configura el límite del estado C para las instancias basadas en Intel, y la opciónprocessor.max_cstate=1configura 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. -
Guarde el archivo y salga del editor.
-
Ejecute el siguiente comando para volver a compilar la configuración de arranque.
[ec2-user ~]$grub2-mkconfig -o /boot/grub2/grub.cfg -
Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.
[ec2-user ~]$sudo reboot -
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" -
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
-
Abra el archivo
/boot/grub/grub.confcon el editor que prefiera.[ec2-user ~]$sudo vim /boot/grub/grub.conf -
Edite la línea
kernelde la primera entrada y agregue las opcionesintel_idle.max_cstate=1yprocessor.max_cstate=1para establecerC1como 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=ttyS0intel_idle.max_cstate=1 processor.max_cstate=1initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.imgLa opción
intel_idle.max_cstate=1configura el límite del estado C para las instancias basadas en Intel, y la opciónprocessor.max_cstate=1configura 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. -
Guarde el archivo y salga del editor.
-
Vuelva a arrancar la instancia para habilitar la nueva opción de kernel.
[ec2-user ~]$sudo reboot -
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" -
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 c4.8xlarge instancia con dos V realizando un trabajo CPUs activo a la frecuencia básica del núcleo, sin Turbo Boost.
[ec2-user ~]$sudo turbostat stress -c 2 -t 10stress: 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.952.902.90 0 0.05 ... 1 1 28 99.922.902.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 las CPUs versiones 21 y 28 funcionan activamente a la velocidad base del procesador de 2,9 GHz, y todos los núcleos inactivos también funcionan a la velocidad básica en el C1 estado C, listos para aceptar instrucciones.