Da dove viene il numero
%st in top è la quota di tempo in cui la tua vCPU era eseguibile ma non programmata su un core fisico, come riportato dall'hypervisor. Il contatore esiste perché un guest non può altrimenti distinguere tra un core lento e un core che non ha mai ricevuto.
top -bn1 | head -3
vmstat 1 5
mpstat -P ALL 1 5Il valore grezzo, per chi lo grafica da solo, è l'ottavo campo della riga cpu in /proc/stat, conteggiato in USER_HZ:
grep -w cpu /proc/statPerché qui è zero
I core sono allocati una volta sola. Una vCPU sulla tua istanza è assegnata a un core fisico che non è nell'allocazione di nessun altro, su un host che non è oversubscribed, quindi non c'è una coda in cui aspettare. Non un valore basso, non un saldo di crediti che si esaurisce il quarto giorno del mese — niente da rubare.
Se il tuo non è zero, questo è un difetto e vogliamo il ticket. Includi un' esecuzione di mpstat -P ALL 5 12 e l'ID dell'istanza.
Perché i valori degli altri non sono zero
I piani burstable sono costruiti sul tempo di steal. Più guest condividono un core, ciascuno ha un saldo di crediti, e quando il saldo si esaurisce lo scheduler passa il core a qualcun altro. Venduto onestamente, è un prodotto legittimo per carichi di lavoro che restano in idle. Non è questo. Abbiamo eliminato il livello economico nel 2021 e l'overselling se n'è andato con lui.
Cosa controllare quando la macchina è lenta comunque
Il steal è la prima cosa che tutti guardano e raramente è la risposta. In ordine di probabilità:
Coda di run
vmstat 1 5Più thread eseguibili che core, nella colonna r, significa che hai semplicemente esaurito la CPU. Nessuna ottimizzazione inventa un altro core.
Disco
iostat -x 1 5%iowait in aumento mentre il tempo utente resta basso indica storage, non processore.
Il tuo stesso cgroup
Questo è quello che frega la gente. Un container con una quota CPU si sente esattamente come tempo di steal dall'interno del processo e riporta zero steal, perché il limite è tuo e non nostro:
cat /sys/fs/cgroup/cpu.statSe nr_throttled e throttled_usec salgono, significa che la quota impostata dal tuo orchestratore è il tetto. Alzala o rimuovila.
Frequenza
Le frequenze boost si muovono con il carico di lavoro, e un test single-threaded è il modo onesto per vedere dove ti trovi davvero:
apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runConfronta il valore di eventi al secondo con un'altra istanza, non con un numero tratto dal blog di qualcuno del 2019.
Colonne guest e annidate
%guest e %gnice sono diversi da zero solo quando esegui macchine virtuali all'interno della tua istanza. La virtualizzazione annidata è disponibile sui piani EPYC più grandi e su bare metal; controlla il dispositivo prima di progettare attorno ad esso:
ls -l /dev/kvmLa versione breve
r alto con tempo utente vicino al cento per cento è la CPU. %iowait alto è il disco. cpu.stat che conta i throttle è la tua quota. Steal non-zero siamo noi, e non dovrebbe accadere.