Die Ausgabe von sar unter AIX verstehen

11

Ich versuche einige Daten zu verstehen, die aus SAR abgerufen wurden. Ich habe drei Hauptfragen dazu. Letztendlich möchte ich feststellen, wie viele CPUs in jedem Abtastintervall auf einem Servercluster inaktiv waren.

  1. Viele der CPUs werden nicht in jedem Eintrag angezeigt. Wird das erwartet und was genau bedeutet das? Hat es mit # 2 zu tun?
  2. Es gibt nicht verwendete Leitungen (CPU = U). In der Dokumentation heißt es "U gibt die systemweit nicht genutzte Kapazität an". Ich kann wirklich keine genaue Definition von "systemweit ungenutzter Kapazität" oder überhaupt keine Definition finden. Ich bin mir nicht sicher, wie ich eine Zeile interpretieren soll, die so etwas wie "Die nicht genutzte Kapazität war zu 70% im Leerlauf" sagt.
  3. Schließlich bin ich mir nicht sicher, wie die Linie -oder allberechnet wird. Ich würde denken, es ist der Durchschnitt aller CPUs, aber wenn ich über alle CPUs rechne, bekomme ich eine ganz andere Antwort als in dieser Zeile. Kann mir jemand genau sagen, was in diese Berechnung einfließt? Bei genauerer Betrachtung dieser verwandten Frage zu SAR scheint der system-wideLeerlaufprozentsatz die Summe aus dem Produkt aus dem Leerlaufprozentsatz jeder CPU und dem 'physc'-Wert zu sein. Leider habe ich kein physcoder entc% (vorausgesetzt, es gibt eines), daher kann ich dies nicht mit meinen eigenen Daten überprüfen. Wenn das richtig ist, bedeutet das, dass ich die physcWerte brauche , um den Leerlaufprozentsatz wirklich zu verstehen?

Hier sind einige Beispiele von dem, was ich sehe. Diese sind alle vom selben Tag.

CPU | Idle    CPU | Idle    CPU | Idle
----------    ----------    ----------
0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      12  | 0       12  | 38
10  | 33      16  | 12      16  | 37
11  | 64      20  | 3       20  | 42
12  | 6        U  | 95       U  | 97
13  | 6        -  | 15       -  | 85
14  | 6       
15  | 6       
16  | 12      
17  | 15      
18  | 62      
19  | 69      
20  | 7       
21  | 7       
22  | 6       
23  | 7       
 U  | 80       
 -  | 15       

case 1: avg(24): 22
case 2: avg(12): 42
case 3: avg(12): 48

Diese Daten werden von einem Skript erzeugt, das ausgeführt wird: sar -P ALL 1 1Anschließend wird ein awk-Befehl ausgeführt. Ich bin nicht gut mit awk, aber das sind eindeutig die wichtigen Teile:

Filter: /System|AIX|^$|%/ {next}

Analysieren: {k=0;if(NR==7) k=1} {sub("^-", "all", $1); cpu=$(1+k); user=$(2+k); sys=$(3+k); io=$(4+k); idle=$(5+k)}

Dies scheint richtig zu sein, basierend auf dem Wenigen, das ich von awk verstehe und dem, was ich aus Beispielen der Ausgabe sehe.

Wenn ich davon ausgehe, dass die fehlenden Werte für Fall 2 alle Null sind, beträgt der Durchschnitt 21, was in gewisser Weise mit Fall 1 übereinstimmt. Wenn ich diese Annahme für Fall 3 mache, erhalte ich 24%, was völlig im Widerspruch zu den 85% steht. Prozentwert von sar für den gesamten CPU-Leerlauf.

Hier ist eine Grafik der Aufnahmen eines ganzen Tages (alle 30 Sekunden):

Geben Sie hier die Bildbeschreibung ein

Wenn nur sehr wenig "systemweite" Leerlaufzeit zur Verfügung steht, ist die Korrelation zwischen dem durchschnittlichen CPU-Leerlauf und dem "systemweiten" Leerlauf nahezu perfekt. Mit zunehmender "systemweiter" Leerlaufzeit wird die Korrelation jedoch viel schwächer. Unter der Annahme, dass dies deterministische Maschinen sind, sagt mir das, dass die Daten, die ich habe, nicht das vollständige Bild liefern. Aber wie sehr kümmert es mich?

Ich verstehe nicht ganz, warum einige CPUs nicht an jedem Punkt gemeldet werden, aber die fehlenden sind nicht gleichmäßig verteilt, wie in den obigen Beispielen gezeigt. Auch beim Lesen dieses Redbooks gehe ich davon aus, dass dies logische CPUs sein müssen und dass physcich ohne die Zahlen nicht viel mit diesen Werten anfangen kann. Ich habe versucht, den UWert in verschiedenen Gleichungen zu verwenden, aber ich habe nichts Sinnvolles gefunden. Mir ist nicht einmal klar, dass der gesamte Leerlaufprozentsatz zum Nennwert angenommen werden kann.

HINWEIS : Bei der Erfassung dieser Daten aus sar stimmt etwas nicht. Dies ist eine vollständig gültige Antwort für Nummer 1. Wenn dies der Fall ist, sollte sie immer zurückgegeben werden.

JimmyJames
quelle
Welchen Befehl führen Sie aus, um diese Ausgabe zu erhalten? Es sieht nicht wie die Standardausgabe sar -P ALLaus.
Schweizer
@Swiss Dies kommt von einem Skript, das ich nicht geschrieben habe. Es ruft auf sar -P ALL 1 1und verwendet dann awk, um die CPU-Nummer und dann die Prozentsätze für Benutzer, System, E / A-Wartezeit und Leerlauf aufzuteilen. Ich werde Ihrer Antwort weitere Informationen hinzufügen.
JimmyJames
@Schweiz Ich habe das Beispiel so bearbeitet, dass es besser widerspiegelt, wie die Ausgabe des Skripts aussieht.
JimmyJames
Könnten Sie die Ausgabe sar -P ALLdirekt und nicht die Ausgabe dieses Skripts bereitstellen ? Es ist ein nicht standardmäßiges Skript und niemand kann Ihnen sagen, was es tut, ohne es zu sehen.
Schweizer
@Schweiz kann ich leider nicht. Ich kann das Skript und seine Ausgabe sehen. Fehlt etwas in der Beschreibung dessen, was es tut, was ich klären kann?
JimmyJames

Antworten:

4

Die von Ihnen bereitgestellte Ausgabe unterscheidet sich von der Standard- sar -P ALLoder sar -uAusgabe. Ich bin mir nicht sicher, ob Sie es von Hand formatiert haben oder ob Sie es über ein anderes Tool ausführen, aber ich denke, es gibt genügend Informationen, um dies herauszufinden.

Hier ist die wichtige Information, die Sie auf der Manpage für erhalten haben sar

Hinweis: Auf SMP-Computern ist ein Prozessor, der überhaupt keine Aktivität aufweist (0,00 für jedes Feld), ein deaktivierter (Offline-) Prozessor.

Da Sie in einem Cluster ausgeführt werden, kann davon ausgegangen werden, dass Sie SMP-Computer verwenden.

Beachten Sie, dass in Beispiel 2 und 3 nur 12 der 24 Kerne Statistiken melden. Wenn Sie davon ausgehen, dass diese Kerne deaktiviert sind, wie in der Manpage erwähnt, sind die Statistiken sinnvoll.

Lassen Sie uns Ihre Daten wie folgt aktualisieren, um einen deaktivierten Kern mit anzuzeigen -

0   | 8       0   | 15      0   | 17
1   | 25      1   | 94      1   | 32
2   | 79      2   | 100     2   | 97
3   | 62      3   | 99      3   | 71
4   | 5       4   | 13      4   | 5
5   | 7       5   | 13      5   | 23
6   | 6       6   | 99      6   | 71
7   | 7       7   | 44      7   | 98
8   | 11      8   | 12      8   | 48
9   | 17      9   | -       9   | -
10  | 33      10  | -       10  | -
11  | 64      11  | -       11  | -
12  | 6       12  | 0       12  | 38
13  | 6       13  | -       13  | -
14  | 6       14  | -       14  | -
15  | 6       15  | -       15  | -
16  | 12      16  | 12      16  | 37
17  | 15      17  | -       17  | -
18  | 62      18  | -       18  | -
19  | 69      19  | -       19  | -
20  | 7       20  | 3       20  | 42
21  | 7       21  | -       21  | -
22  | 6       22  | -       22  | -
23  | 7       23  | -       23  | -

Dann können wir das Folgende verwenden, um die Durchschnittswerte zu berechnen (dies ist ein kurzer Oneliner, den ich geschrieben habe, ich bin sicher, dass etwas Besseres geschrieben werden könnte.)

$ awk '{idle = $3; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 22.208333  Cores: 24
$ awk '{idle = $6; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 42.000000  Cores: 12
$ awk '{idle = $9; output += idle; if (idle >= 0) {cores += 1} } END {printf "Ave idle%%: %f  Cores: %d\n", output / cores, cores }' input_file
Ave idle%: 48.250000  Cores: 12

Beachten Sie, dass die Anzahl der Kerne in Beispiel 2 und 3 12 beträgt und die Durchschnittswerte mit denen übereinstimmen, die Sie in Ihrer Beispielausgabe sehen.

Es sieht so aus, als ob irgendwann zwischen Ihrem ersten und zweiten Fall die Hälfte Ihrer CPU-Kerne deaktiviert wurde.

Eine kurze Zusammenfassung Ihrer Fragen:

  1. Fehlende Daten bedeuten wahrscheinlich, dass der Prozessorkern deaktiviert ist.
  2. Die Udurchschnittliche Zeile unterscheidet sich von der Uin dieser Manpage. Die Uin der Manpage genannten Informationen sollten in der Spalte Prozessor-ID angezeigt werden.
  3. Die von Ihnen bereitgestellte Ausgabe unterscheidet sich von der Standardausgabe, sarund es werden nicht genügend Informationen bereitgestellt, um zu bestimmen, worauf sich die Uoder alldie durchschnittliche Zeile beziehen. Die erste Zahl scheint jedoch der Leerlauf% auf aktiven Kernen zu sein.
schweizerisch
quelle
"Beachten Sie, dass die Anzahl der Kerne in Beispiel 2 und 3 12 beträgt und die Durchschnittswerte mit denen übereinstimmen, die Sie in Ihrer Beispielausgabe sehen." Entschuldigung, ich war vielleicht nicht klar, ich habe den Durchschnitt aus den Zahlen berechnet. Das kommt nicht von Sar. Die Uund all-Werte kommen von sar als Linien. Ich habe sie in meiner Antwort herausgebrochen, da sie sich grundlegend von den CPU-Werten unterscheiden, soweit ich weiß.
JimmyJames
Wenn die Kerne deaktiviert sind, warum ist die "systemweite" Leerlaufzeit in Fall 2 so viel kürzer als in Fall 3? Ich habe Schwierigkeiten zu verstehen, wie sie fast dieselbe durchschnittliche Leerlaufzeit über denselben 12 CPU haben können, und dennoch ist die systemweite Leerlaufzeit völlig unterschiedlich.
JimmyJames
Ich sehe, dass wenn Maschinen unter konstanter Last stehen, ich die Ausgabe von jedem Prozessor sehe. Dies würde mir nahe legen, dass Sie richtig sind, dass diese deaktiviert sind. Ich habe nur Probleme damit, wie sich der systemweite Leerlauf auf den Leerlauf des nicht deaktivierten CPU bezieht.
JimmyJames
Ich habe meine Frage mit einigen Änderungen aktualisiert, um das Problem zu klären. Wenn also in Fall 2 12 CPUs deaktiviert sind und der Prozentsatz für den Systemleerlauf auf allen 24 basiert, kann der Leerlaufanteil nicht unter 50% fallen. Angesichts der Tatsache, dass ich 15% habe, bedeutet dies, dass das sys idle% deaktivierte CPUs ignorieren muss, oder?
JimmyJames