Controllo dello stato del processore per la tua EC2 AL2 istanza Amazon - Amazon Linux 2

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Controllo dello stato del processore per la tua EC2 AL2 istanza Amazon

Gli stati C-state controllano i livelli di sospensione in cui può entrare un core quando è inattivo. Gli stati C-state sono numerati a partire da C0 (lo stato più superficiale in cui il core è completamente attivo ed esegue le istruzioni) fino a C6 (lo stato inattivo più profondo in cui un core è spento).

Gli stati P-state controllano le prestazioni desiderate (in frequenza CPU) da un core. Gli stati P-state sono numerati a partire da P0 (l'impostazione sulle prestazioni più elevate in cui è permesso al core di utilizzare la tecnologia Intel Turbo Boost per aumentare la frequenza, se possibile) e vanno da P1 (lo stato P-state che richiede la frequenza di base massima) a P15 (la frequenza più bassa possibile).

Potresti modificare le impostazioni degli stati C-state o P-state per aumentare la consistenza delle prestazioni del processore, ridurre la latenza oppure ottimizzare l'istanza per un carico di lavoro specifico. Le impostazioni predefinite degli stati C-state e P-state forniscono le prestazioni massime, ottimali per la maggior parte dei carichi di lavoro. Tuttavia, se l'applicazione traesse vantaggio dalla latenza ridotta al costo di frequenze single-core o dual-core più elevate o da prestazioni coerenti a frequenze più basse anziché frequenze Turbo Boost intermittenti, consigliamo di prendere in considerazione le impostazioni degli stati C-state o P-state disponibili per queste istanze.

Per informazioni sui tipi di EC2 istanze Amazon che consentono al sistema operativo di controllare gli stati C e P del processore, consulta la sezione Controllo dello stato del processore per l' EC2 istanza Amazon nella Amazon EC2 User Guide.

Le sezioni seguenti descrivono le diverse configurazioni di stato del processore e come monitorare gli effetti della configurazione. Queste procedure sono state scritte e si applicano ad Amazon Linux; tuttavia, potrebbero funzionare anche per altre distribuzioni Linux con una versione del kernel Linux 3.9 o successiva.

Nota

Gli esempi presenti in questa pagina utilizzano quanto segue:

  • L'utilità turbostat per visualizzare la frequenza del processore e le informazioni sullo stato C. L'utilità turbostat è disponibile per impostazione predefinita su Amazon Linux.

  • Il comando stress per simulare un carico di lavoro. Per installare stress, per prima cosa abilitare il repository EPEL eseguendo sudo amazon-linux-extras install epel, poi eseguire sudo yum install -y stress.

Se l'output non visualizza le informazioni sullo stato C, includere l'opzione --debug nel comando (sudo turbostat --debug stress <options>).

Prestazioni massime con la massima frequenza Turbo Boost

Questa è la configurazione di controllo degli stati del processore predefinita per AMI Amazon Linux ed è consigliata per la maggior parte dei carichi di lavoro. Questa configurazione offre le prestazioni più elevate con minore variabilità. Permettendo ai core non attivi di entrare in stati di sospensione più profondi fornisce la capacità aggiuntiva termica richiesta per processi single-core o dual-core per raggiungere il massimo potenziale Turbo Boost.

Il seguente esempio mostra un'istanza c4.8xlarge con due core attivamente in funzione che raggiungono la frequenza massima Turbo Boost del processore.

[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

In questo esempio, v CPUs 21 e 28 funzionano alla frequenza Turbo Boost massima perché gli altri core sono entrati in stato di C6 sospensione per risparmiare energia e fornire spazio di alimentazione e calore ai core funzionanti. Le v CPUs 3 e 10 (ognuna delle quali condivide un core del processore con le v CPUs 21 e 28) sono nello C1 stato in attesa di istruzioni.

Nell'esempio seguente, tutti i 18 core stanno lavorando attivamente, quindi non c'è spazio per il Turbo Boost massimo, ma funzionano tutti alla velocità «Turbo Boost all-core» di 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 ...

Prestazioni elevate e bassa latenza tramite limitazione degli stati C-state più profondi

Gli stati C-state controllano i livelli di sospensione in cui potrebbe entrare un core quando è inattivo. Potresti voler controllare gli stati C-state per ottimizzare la latenza rispetto alle prestazioni del sistema. Inserire i core nello stato di sospensione richiedete del tempo. Sebbene un core sospeso consenta maggiore capacità aggiuntiva per un altro core per raggiungere una frequenza più elevata, è necessario del tempo affinché il core sospeso torni attivo e in funzione. Ad esempio, se un core assegnato per gestire le interruzioni di un pacchetto di rete è sospeso, potrebbe verificarsi un ritardo nel lavoro su tale interruzione. Puoi configurare il sistema in modo da non utilizzare gli stati C-states più profondi, riducendo non solo la latenza di reazione del processore, ma anche la capacità aggiuntiva disponibile per altri core per Turbo Boost.

Uno scenario comune per la disabilitazione degli stati di sospensione più profondi è un'applicazione di database Redis, la quale archivia il database nella memoria di sistema per il tempo di risposta alle query più rapido possibile.

Per limitare gli stati di sonno più profondi, attiva AL2
  1. Aprire il file /etc/default/grub con un editor a scelta.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Modificare la riga GRUB_CMDLINE_LINUX_DEFAULT e aggiungere le opzioni intel_idle.max_cstate=1 e processor.max_cstate=1 per impostare C1 come lo stato C più profondo per i core inattivi.

    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'opzione intel_idle.max_cstate=1 configura il limite dello stato C per le istanze basate su Intel e l'opzione processor.max_cstate=1 configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

  3. Salvare il file e uscire dall'editor.

  4. Eseguire il comando riportato di seguito per ricreare la configurazione di avvio.

    [ec2-user ~]$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Riavviare l'istanza per abilitare la nuova opzione del kernel.

    [ec2-user ~]$ sudo reboot
Limitazione degli stati di sospensione più profondi in Amazon Linux AMI
  1. Aprire il file /boot/grub/grub.conf con un editor a scelta.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Modificare la riga kernel della prima voce e aggiungere le opzioni intel_idle.max_cstate=1 e processor.max_cstate=1 per impostare C1 come lo stato C più profondo per i core inattivi.

    # 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'opzione intel_idle.max_cstate=1 configura il limite dello stato C per le istanze basate su Intel e l'opzione processor.max_cstate=1 configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

  3. Salvare il file e uscire dall'editor.

  4. Riavviare l'istanza per abilitare la nuova opzione del kernel.

    [ec2-user ~]$ sudo reboot

Il seguente esempio mostra un'istanza c4.8xlarge con due core attivamente in funzione alla frequenza del core "all core 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 ...

In questo esempio, i core per le versioni CPUs 19 e 28 funzionano a 3.2 GHz e gli altri core sono C1 nello stato C, in attesa di istruzioni. Sebbene i core in funzione non raggiungano la frequenza Turbo Boost massima, i core inattivi saranno molto più rapidi nella risposta a nuove richieste rispetto a quanto lo sarebbero nello stato C-state più profondo C6.

Prestazioni di base con la variabilità minore

Puoi ridurre la variabilità della frequenza del processore con gli stati P-state. Gli stati P-state controllano le prestazioni desiderate (in frequenza CPU) da un core. La maggior parte dei carichi di lavoro ottiene prestazioni migliori in P0, richiedendo Turbo Boost. Tuttavia, potresti voler ottimizzare il sistema per prestazioni coerenti anziché prestazioni intermittenti che possono verificarsi quando sono abilitate le frequenze Turbo Boost.

I carichi di lavoro Intel Advanced Vector Extensions (AVX o AVX2) possono funzionare bene a frequenze più basse e le istruzioni AVX possono consumare più energia. L'esecuzione del processore a una frequenza più bassa, disabilitando Turbo Boost, può ridurre la quantità di potenza e mantenere la velocità più coerente. Per ulteriori informazioni sull'ottimizzazione della configurazione dell'istanza e sul carico di lavoro per AVX, consulta il sito web Intel.

I driver inattivi della CPU controllano lo stato P. Le nuove generazioni di CPU richiedono driver inattivi della CPU aggiornati che corrispondono al livello del kernel come segue:

  • Versioni del kernel Linux 6.1 e successive: supporta Intel Granite Rapids (ad esempio, R8i)

  • Versioni del kernel Linux 5.10 e successive: supporta AMD Milan (ad esempio, M6a)

  • Versioni del kernel Linux 5.6 e successive: supporta Intel Icelake (ad esempio, M6i)

Per verificare se il kernel del sistema in esecuzione riconosce la CPU, esegui il comando seguente.

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

Se l'output di questo comando indica una mancanza di supporto, consigliamo di aggiornare il kernel.

Questa sezione descrive come limitare gli stati di sospensione più profondi e come disabilitare Turbo Boost (richiedendo lo stato P-state P1) per fornire bassa latenza e la minima variabilità di velocità del processore per questi tipi di carichi di lavoro.

Per limitare gli stati di sonno più profondi e disabilitare Turbo Boost su AL2
  1. Aprire il file /etc/default/grub con un editor a scelta.

    [ec2-user ~]$ sudo vim /etc/default/grub
  2. Modificare la riga GRUB_CMDLINE_LINUX_DEFAULT e aggiungere le opzioni intel_idle.max_cstate=1 e processor.max_cstate=1 per impostare C1 come lo stato C più profondo per i core inattivi.

    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'opzione intel_idle.max_cstate=1 configura il limite dello stato C per le istanze basate su Intel e l'opzione processor.max_cstate=1 configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

  3. Salvare il file e uscire dall'editor.

  4. Eseguire il comando riportato di seguito per ricreare la configurazione di avvio.

    [ec2-user ~]$ grub2-mkconfig -o /boot/grub2/grub.cfg
  5. Riavviare l'istanza per abilitare la nuova opzione del kernel.

    [ec2-user ~]$ sudo reboot
  6. Quando occorre la bassa variabilità di velocità del processore fornita dallo stato P-state P1, esegui il comando seguente per disabilitare Turbo Boost.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  7. Una volta terminato il carico di lavoro, puoi riabilitare Turbo Boost con il comando seguente.

    [ec2-user ~]$ sudo sh -c "echo 0 > /sys/devices/system/cpu/intel_pstate/no_turbo"
Limitazione degli stati di sospensione più profondi e disabilitazione di Turbo Boost in Amazon Linux AMI
  1. Aprire il file /boot/grub/grub.conf con un editor a scelta.

    [ec2-user ~]$ sudo vim /boot/grub/grub.conf
  2. Modificare la riga kernel della prima voce e aggiungere le opzioni intel_idle.max_cstate=1 e processor.max_cstate=1 per impostare C1 come lo stato C più profondo per i core inattivi.

    # 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'opzione intel_idle.max_cstate=1 configura il limite dello stato C per le istanze basate su Intel e l'opzione processor.max_cstate=1 configura il limite dello stato C per le istanze basate su AMD. È consigliabile aggiungere entrambe le opzioni alla configurazione. Ciò consente di impostare il comportamento desiderato sia su Intel che su AMD tramite una singola configurazione.

  3. Salvare il file e uscire dall'editor.

  4. Riavviare l'istanza per abilitare la nuova opzione del kernel.

    [ec2-user ~]$ sudo reboot
  5. Quando occorre la bassa variabilità di velocità del processore fornita dallo stato P-state P1, esegui il comando seguente per disabilitare Turbo Boost.

    [ec2-user ~]$ sudo sh -c "echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo"
  6. Una volta terminato il carico di lavoro, puoi riabilitare Turbo Boost con il comando seguente.

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

L'esempio seguente mostra un'c4.8xlargeistanza con due v che lavora CPUs attivamente alla frequenza di base di base, senza 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

I core per le versioni CPUs 21 e 28 funzionano attivamente alla velocità di base del processore di 2,9 e anche tutti i core inattivi funzionano alla velocità di base nello stato C GHz, pronti ad accettare le istruzioni. C1