Amazon Elastic Compute Cloud
Guide de l'utilisateur pour les instances Linux

Contrôle des états du processeur pour votre instance EC2

Les états « C-states » contrôlent les niveaux de veille dans lesquels un cœur peut entrer lorsqu'il est inutilisé. Les états « C-states » 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).

Les types d'instance EC2 suivants permettent à un système d'exploitation de contrôler les états « C-states » et « P-states » des processeurs.

  • Usage général : m4.10xlarge | m4.16xlarge | m5.metal | m5d.metal

  • Calcul optimisé : c4.8xlarge | c5.metal

  • Mémoire optimisée : r4.8xlarge | r4.16xlarge | r5.metal | r5d.metal | u-6tb1.metal | u-9tb1.metal | u-12tb1.metal | x1.16xlarge | x1.32xlarge | x1e.8xlarge | x1e.16xlarge | x1e.32xlarge | z1d.metal

  • Stockage optimisé : d2.8xlarge | i3.8xlarge | i3.16xlarge | i3.metal | h1.8xlarge | h1.16xlarge

  • Calcul accéléré : f1.16xlarge | g3.16xlarge | p2.16xlarge | p3.16xlarge

Les types d'instance suivants permettent à un système d'exploitation de contrôler les états « C-states » des processeurs :

  • Usage général: m5.12xlarge | m5.24xlarge | m5d.12xlarge | m5d.24xlarge

  • Calcul optimisé : c5.9xlarge | c5.12xlarge | c5.18xlarge | c5.24xlarge | c5d.9xlarge | c5d.18xlarge

  • Mémoire optimisée: r5.12xlarge | r5.24xlarge | r5d.12xlarge | r5d.24xlarge | z1d.6xlarge | z1d.12xlarge

  • Stockage optimisé : i3en.12xlarge | i3en.24xlarge

  • Calcul accéléré : p3dn.24xlarge

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.

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 et s'appliquent à Amazon Linux. Néanmoins, elles peuvent aussi être adaptées aux autres distributions Linux avec une version noyau Linux de 3.9 ou plus récente. Pour obtenir plus d'informations sur les autres distributions Linux et le contrôle des états du processeur, consultez la documentation spécifique à votre système.

Note

Les exemples sur cette page utilisent l'utilitaire turbostat (qui est disponible sur Amazon Linux par défaut) pour afficher la fréquence du processus et les informations relatives à l'état « C-state » ainsi que la commande stress (qui peut être installée en exécutant sudo yum install -y stress) pour simuler une charge de travail.

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, vCPU 21 et 28 fonctionnent à leur fréquence Turbo Boost maximale, car les autres cœurs sont entrés dans l'état de veille C6 pour économiser de l'énergie et offrir une marge de puissance et un dégagement thermique pour les cœurs en fonctionnement. vCPU 3 et 10 (chacun partageant un cœur de processeur avec vCPU 21 et 28) possèdent l'état C1 et attendent des instructions.

Dans l'exemple suivant, les 18 cœurs fonctionnent activement. Il n'existe donc aucune marge pour la fréquence Turbo Boost maximale, mais ils sont tous exécutés à la vitesse « Turbo Boost » de 3.2 GHz lorsque tous les cœurs sont utilisés.

[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-states » plus profonds

Les états « C-states » 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-states » 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-states » 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 veille plus profonds sur Amazon Linux 2

  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 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" GRUB_TIMEOUT=0
  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

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 l'option intel_idle.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 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  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 pour vCPU 19 et 28 fonctionnent à 3,2 GHz tandis que les autres cœurs possèdent l'état « C-state » C1 et attendent des 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.

Des 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 convenablement à des fréquences plus basses et les instructions pour AVX peuvent utiliser plus de puissance. 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 http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/performance-xeon-e5-v3-advanced-vector-extensions-paper.pdf.

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 veille plus profonds et désactiver la fréquence Turbo Boost sur Amazon Linux 2

  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 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" GRUB_TIMEOUT=0
  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 variations faibles de la 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 l'option intel_idle.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 initrd /boot/initramfs-3.14.26-24.46.amzn1.x86_64.img
  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 variations faibles de la 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 instance c4.8xlarge avec deux vCPU qui fonctionnent activement à la fréquence de base avec aucune fréquence Turbo Boost cœur.

[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 pour vCPU 21 et 28 fonctionnent activement à la vitesse du processeur de base de 2,9 GHz, et tous les cœurs inactifs fonctionnent aussi à la vitesse de base dans l'état « C-state » C1 et sont prêts à accepter les instructions.