Woher die Zahl stammt
%st in top ist der Anteil der Zeit, in der Ihre virtuelle CPU rechenbereit, aber nicht auf einem physischen Kern eingeplant war, wie vom Hypervisor gemeldet. Den Zähler gibt es, weil ein Gast sonst nicht zwischen einem langsamen Kern und einem Kern, den er nie erhalten hat, unterscheiden kann.
top -bn1 | head -3
vmstat 1 5
mpstat -P ALL 1 5Der Rohwert für alle, die ihn selbst grafisch auswerten möchten, ist das achte Feld der cpu-Zeile in /proc/stat, angegeben in USER_HZ:
grep -w cpu /proc/statWarum er hier Null ist
Kerne werden einmal zugewiesen. Eine vCPU Ihrer Instanz ist an einen physischen Kern gebunden, der in keiner anderen Zuweisung liegt, auf einem Host, der nicht überbucht ist. Es gibt also keine Warteschlange, in der man warten müsste – kein niedriger Wert, kein Guthaben, das am vierten Tag des Monats aufgebraucht ist – nichts zu stehlen.
Wenn Ihrer nicht Null ist, ist das ein Defekt, und wir wollen das Ticket. Fügen Sie eine mpstat -P ALL 5 12-Ausgabe und die Instanz-ID hinzu.
Warum die Werte anderer nicht Null sind
Burstable-Pläne basieren auf Steal-Zeit. Mehrere Gäste teilen sich einen Kern, jeder hat ein Guthaben, und wenn das Guthaben aufgebraucht ist, gibt der Scheduler den Kern an jemand anderen ab. Ehrlich verkauft, ist das ein legitimes Produkt für Workloads, die im Leerlauf sind. Das hier ist es nicht. Wir haben die günstige Stufe 2021 entfernt, und mit ihr verschwand das Overselling.
Was zu prüfen ist, wenn die Maschine sich trotzdem langsam anfühlt
Steal ist das Erste, worauf alle schauen, und selten die Antwort. In der Reihenfolge der Wahrscheinlichkeit:
Run-Queue
vmstat 1 5Mehr lauffähige Threads als Kerne in der r-Spalte bedeutet, dass Ihnen schlicht die CPU ausgeht. Kein Feintuning erfindet einen weiteren Kern.
Festplatte
iostat -x 1 5%iowait steigt, während die Benutzerzeit niedrig bleibt, deutet auf Speicher hin, nicht auf den Prozessor.
Ihre eigene cgroup
Das ist die Falle. Ein Container mit CPU-Kontingent fühlt sich von innen genau wie Steal-Zeit an und meldet Steal Null, weil die Begrenzung Ihre ist und nicht unsere:
cat /sys/fs/cgroup/cpu.statWenn nr_throttled und throttled_usec steigen, ist das von Ihrem eigenen Orchestrator gesetzte Kontingent die Obergrenze. Erhöhen Sie es oder entfernen Sie es.
Frequenz
Boost-Takt bewegt sich mit der Workload, und ein Single-Thread-Test ist der ehrliche Weg, um zu sehen, wo Sie tatsächlich stehen:
apt install -y sysbench
sysbench cpu --cpu-max-prime=20000 --threads=1 runVergleichen Sie die Ereignisse-pro-Sekunde-Zahl mit einer anderen Instanz, nicht mit einer Zahl aus irgendeinem Blogbeitrag von 2019.
Gast- und verschachtelte Spalten
%guest und %gnice sind nur dann ungleich Null, wenn Sie virtuelle Maschinen in Ihrer Instanz ausführen. Verschachtelte Virtualisierung ist auf den größeren EPYC-Plänen und auf Bare Metal verfügbar; prüfen Sie auf das Gerät, bevor Sie Ihr Design darauf aufbauen:
ls -l /dev/kvmDie Kurzfassung
Hohes r bei fast hundert Prozent Benutzerzeit ist die CPU. Hohes %iowait ist die Festplatte. cpu.stat zählt Throttles und ist Ihr eigenes Kontingent. Steal ungleich Null sind wir – und das sollte nicht passieren.