Contrôle de l'état du processeur pour votre EC2 AL2 instance Amazon - Amazon Linux 2

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Contrôle de l'état du processeur pour votre EC2 AL2 instance Amazon

Les états « C-states » contrôlent les niveaux de veille qu'un élément central peut atteindre lorsqu'il est inactif. Les états « C-state » sont numérotés de C0 (l’état le plus superficiel lorsque le cœur est totalement éveillé et exécute les instructions) à C6 (l’état de veille le plus profond lorsqu’un cœur est arrêté).

Les états « P-states » contrôlent les performances souhaitées (dans la fréquence de l’UC) à partir d’un cœur. La numérotation des états « P-states » commence à P0 (paramètre de performance le plus élevé dans lequel le cœur peut utiliser la technologie Intel Turbo Boost pour améliorer la fréquence si possible) et va de P1 (état « P-state » qui demande la fréquence de base maximale) à P15 (fréquence la plus basse possible).

Il se peut que vous vouliez changer les paramètres « C-state » ou « P-state » pour améliorer la cohérence des performances du processeur, réduire la latence ou ajuster votre instance pour une charge de travail spécifique. Les paramètres « C-state » ou « P-state » par défaut offre des performances maximales qui sont optimales pour la plupart des charges de travail. Cependant, si votre application tirerait avantage de la latence réduite pour un coût de fréquences simple ou double cœur plus hautes ou des performances cohérentes à des fréquences plus basses au lieu des fréquences Turbo Boost transmises en paquets, pensez à essayer les paramètres « C-state » ou « P-state » qui sont disponibles pour ces instances.

Pour plus d'informations sur les types d' EC2 instances Amazon qui permettent au système d'exploitation de contrôler les états C et P du processeur, consultez la section Contrôle de l'état du processeur pour votre EC2 instance Amazon dans le guide de EC2 l'utilisateur Amazon.

Les sections suivantes décrivent les différentes configurations d’états du processeur et les façons de surveiller les effets de votre configuration. Ces procédures ont été écrites pour Amazon Linux et s'appliquent à celui-ci ; toutefois, elles peuvent également fonctionner pour d'autres distributions Linux dotées d'une version de noyau Linux 3.9 ou ultérieure.

Note

Les exemples présentés sur cette page utilisent les éléments suivants :

  • L’utilitaire turbostat pour afficher les informations relatives à la fréquence du processeur et à l’état « C-state ». L’utilitaire turbostat est disponible sur Amazon Linux par défaut.

  • La commande stress pour simuler une charge de travail. Pour installer stress, commencez par activer le référentiel EPEL en exécutant sudo amazon-linux-extras install epel, puis exécutez sudo yum install -y stress.

Si la sortie n’affiche pas les informations relatives à l’état « C-state », incluez l’option --debug dans la commande (sudo turbostat --debug stress <options>).

La meilleure performance avec la fréquence Turbo Boost maximale

Il s’agit de la configuration de contrôle d’état du processeur par défaut pour Amazon Linux AMI et il est recommandé pour la plupart des charges de travail. Cette configuration fournit les meilleures performances avec des variations plus faibles. Le fait de permettre aux cœurs inactifs d’entrer dans des états de veille plus profonds offre le dégagement thermique nécessaire aux processeurs simple ou double cœur d’atteindre leur potentiel Turbo Boost maximal.

L’exemple suivant montre une instance c4.8xlarge avec deux cœurs qui fonctionnent activement et atteignent la fréquence Turbo Boost maximale de leur processeur.

[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

Dans cet exemple, les versions CPUs 21 et 28 fonctionnent à leur fréquence Turbo Boost maximale parce que les autres cœurs sont entrés en état de C6 veille pour économiser de l'énergie et fournir à la fois de l'énergie et de la marge thermique aux cœurs de travail. Les versions CPUs 3 et 10 (chacune partageant un cœur de processeur avec les C1 v CPUs 21 et 28) sont en attente d'instructions.

Dans l'exemple suivant, les 18 cœurs travaillent activement. Il n'y a donc pas de marge de manœuvre pour un Turbo Boost maximal, mais ils fonctionnent tous à la vitesse « Turbo Boost tous les cœurs » 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 ...

Haute performance et faible latence en limitant les états « C-state » plus profonds

Les états « C-state » contrôlent les niveaux de veille dans lesquels un cœur peut entrer lorsqu’il est inutilisé. Il se peut que vous vouliez contrôler les états « C-state » pour ajuster la latence de votre système par rapport aux performances. La mise en veille de cœurs prend du temps. Même si un cœur en veille donne plus de marge pour qu’un autre cœur fonctionne à une fréquence plus élevée, ce cœur en veille prend du temps pour se remettre en route et fonctionner. Par exemple, si un cœur qui est assigné à la gestion d’interruptions de paquets est en veille, il se peut que la prise en charge de cette interruption soit retardée. Vous pouvez configurer le système pour qu’il n’utilise pas les états « C-state » plus profonds ce qui réduit la latence de réaction du processeur, mais également la marge disponible pour la fréquence Turbo Boost des autres cœurs.

Un scénario commun pour la désactivation d’états de veille plus profonds est une application de la base de données Redis qui stocke la base de données dans la mémoire système pour un temps de réponse aux requêtes le plus rapide possible.

Pour limiter les états de sommeil plus profonds sur AL2
  1. Ouvrez le fichier /etc/default/grub avec l’éditeur de votre choix.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Modifiez la ligne GRUB_CMDLINE_LINUX_DEFAULT et ajoutez l’option intel_idle.max_cstate=1 pour processor.max_cstate=1 définir C1 comme l’état « C-state » le plus profond pour les cœurs inutilisés.

    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

    L’option intel_idle.max_cstate=1 configure la limite de l’état C pour les instances Intel, et l’option processor.max_cstate=1 configure la limite de l’état C pour les instances basées sur AMD. Il est possible d’ajouter les deux options à votre configuration en toute sécurité. Cela permet à une configuration unique de définir le comportement souhaité sur Intel et AMD.

  3. Enregistrez le fichier et quittez votre éditeur.

  4. Exécutez la commande suivante pour recréer la configuration du démarrage.

    [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Redémarrez votre instance pour activer la nouvelle option noyau.

    [ec2-user ~]$ sudo reboot
Pour limiter les états de veille plus profonds sur Amazon Linux AMI
  1. Ouvrez le fichier /boot/grub/grub.conf avec l’éditeur de votre choix.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Modifiez la ligne kernel de la première entrée et ajoutez les options intel_idle.max_cstate=1 et processor.max_cstate=1 pour définir C1 comme l’état « C-state » le plus profond pour les cœurs inutilisés.

    # 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

    L’option intel_idle.max_cstate=1configure la limite de l’état C pour les instances Intel, et l’option processor.max_cstate=1 configure la limite de l’état C pour les instances basées sur AMD. Il est possible d’ajouter les deux options à votre configuration en toute sécurité. Cela permet à une configuration unique de définir le comportement souhaité sur Intel et AMD.

  3. Enregistrez le fichier et quittez votre éditeur.

  4. Redémarrez votre instance pour activer la nouvelle option noyau.

    [ec2-user ~]$ sudo reboot

L’exemple suivant montre une instance c4.8xlarge avec deux cœurs qui fonctionnent activement à la fréquence « Turbo Boost » lorsque tous les cœurs sont utilisés.

[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 ...

Dans cet exemple, les cœurs des versions CPUs 19 et 28 fonctionnent à 3.2 GHz, et les autres cœurs sont à l'C1état C, en attente d'instructions. Même si les cœurs en fonctionnement n’atteignent pas leur fréquence Turbo Boost maximale, les cœurs inactifs seront beaucoup plus rapides à répondre aux nouvelles requêtes que s’ils possédaient l’état « C-state » C6 plus profond.

Performances de base avec les variations les plus faibles

Vous pouvez réduire les variations de la fréquence du processeur avec des états « P-states ». Les états « P-states » contrôlent les performances souhaitées (dans la fréquence de l’UC) à partir d’un cœur. La plupart des charges de travail fonctionnent mieux avec l’état P0 ce qui demande une fréquence Turbo Boost. Cependant, il se peut que vous souhaitiez adapter votre système pour obtenir une performance cohérente plus que transmise en paquets ce qui peut se produire lorsque les fréquences Turbo Boost sont activées.

Les charges de travail Intel Advanced Vector Extensions (AVX ou AVX2) peuvent fonctionner correctement à des fréquences plus basses, et les instructions AVX peuvent consommer plus d'énergie. L’exécution du processeur à une fréquence plus basse en désactivant la fréquence Turbo Boost peut réduire la quantité d’énergie utilisée et conserver la cohérence de la vitesse. Pour obtenir plus d’informations sur l’optimisation de la configuration et la charge de travail de votre instance pour AVX, consultez le site Web d’Intel.

Les pilotes inactifs du processeur contrôlent l’état P. Les nouvelles générations de CPU nécessitent des pilotes inactifs du processeur mis à jour qui correspondent au niveau du noyau, comme suit :

  • Versions 6.1 et supérieures du noyau Linux : compatible avec Intel Granite Rapids (par exemple, R8i)

  • Versions du noyau Linux 5.10 et supérieures : compatible avec AMD Milan (par exemple, m6A)

  • Versions 5.6 et supérieures du noyau Linux : compatible avec Intel Icelake (par exemple, M6i)

Pour détecter si le noyau d’un système en cours d’exécution reconnaît le CPU, exécutez la commande suivante.

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 la sortie de cette commande indique un manque de prise en charge, nous vous recommandons de mettre à niveau le noyau.

Cette section décrit comment limiter les états de veille plus longs et désactiver la fréquence Turbo Boost (en demandant l’état « P-state » P1) pour offrir une latence faible et la variation de vitesse du processeur la plus faible pour ces types de charges de travail.

Pour limiter les états de sommeil plus profonds et désactiver Turbo Boost AL2
  1. Ouvrez le fichier /etc/default/grub avec l’éditeur de votre choix.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Modifiez la ligne GRUB_CMDLINE_LINUX_DEFAULT et ajoutez l’option intel_idle.max_cstate=1 pour processor.max_cstate=1 définir C1 comme l’état « C-state » le plus profond pour les cœurs inutilisés.

    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

    L’option intel_idle.max_cstate=1 configure la limite de l’état C pour les instances Intel, et l’option processor.max_cstate=1 configure la limite de l’état C pour les instances basées sur AMD. Il est possible d’ajouter les deux options à votre configuration en toute sécurité. Cela permet à une configuration unique de définir le comportement souhaité sur Intel et AMD.

  3. Enregistrez le fichier et quittez votre éditeur.

  4. Exécutez la commande suivante pour recréer la configuration du démarrage.

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Redémarrez votre instance pour activer la nouvelle option noyau.

    [ec2-user ~]$ sudo reboot
  6. Lorsque vous avez besoin des faibles variations de vitesse du processeur que l’état P-state P1 offre, exécutez la commande suivante pour désactiver la fréquence Turbo Boost.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  7. Lorsque votre charge de travail est terminée, vous pouvez réactiver la fréquence Turbo Boost avec la commande suivante.

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
Pour limiter les états de veille plus profonds et désactiver la fréquence Turbo Boost sur Amazon Linux AMI
  1. Ouvrez le fichier /boot/grub/grub.conf avec l’éditeur de votre choix.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Modifiez la ligne kernel de la première entrée et ajoutez les options intel_idle.max_cstate=1 et processor.max_cstate=1 pour définir C1 comme l’état « C-state » le plus profond pour les cœurs inutilisés.

    # 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

    L’option intel_idle.max_cstate=1configure la limite de l’état C pour les instances Intel, et l’option processor.max_cstate=1 configure la limite de l’état C pour les instances basées sur AMD. Il est possible d’ajouter les deux options à votre configuration en toute sécurité. Cela permet à une configuration unique de définir le comportement souhaité sur Intel et AMD.

  3. Enregistrez le fichier et quittez votre éditeur.

  4. Redémarrez votre instance pour activer la nouvelle option noyau.

    [ec2-user ~]$ sudo reboot
  5. Lorsque vous avez besoin des faibles variations de vitesse du processeur que l’état P-state P1 offre, exécutez la commande suivante pour désactiver la fréquence Turbo Boost.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. Lorsque votre charge de travail est terminée, vous pouvez réactiver la fréquence Turbo Boost avec la commande suivante.

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

L'exemple suivant montre une c4.8xlarge instance avec deux v exécutant CPUs activement un travail à la fréquence de base, sans 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

Les cœurs des versions CPUs 21 et 28 exécutent activement leur travail à la vitesse de base du processeur de 2,9 GHz, et tous les cœurs inactifs fonctionnent également à la vitesse de base dans l'C1état C, prêts à accepter des instructions.