Genaue Berechnung der CPU-Auslastung in Prozent angegeben, die in Linux?

Es ist eine Frage, die schon viele Male gefragt, aber es gibt keine gut unterstützt Antwort, die ich finden konnte.

Viele Leute empfehlen die Verwendung von top-Befehl, aber wenn du oben einmal (weil Sie ein script zum Beispiel das sammeln von Cpu-Auslastung alle 1 Sekunde), es wird immer das gleiche Cpu-Auslastung resultieren (Beispiel 1Beispiel 2).

Eine genauere Möglichkeit zur Berechnung der CPU-Auslastung, durch das Lesen der Werte aus /proc/stataber die meisten Antworten verwenden, werden nur die ersten 4 Felder aus /proc/stat zu berechnen (ein Beispiel hier).

/proc/stat/ hat 10 Felder pro CPU-core als Linux-kernel 2.6.33!

Ich fand auch diese Präzise Berechnung der CPU-Auslastung in Linux mittels /proc/stat Frage, die zeigt sich das gleiche Problem, -dass die meisten anderen Fragen erst berücksichtigen, 4 aus den vielen Bereichen, aber immer noch die Antwort, die hier gegeben werden, beginnt mit "ich glaube" (nicht sicher), und außer, dass, es ist nur darum besorgt, dass die ersten 7 Felder (von 10 in /proc/stat/)

Diese perl-Skript verwendet, alle Felder zu berechnen, die CPU-Auslastung, die ich nicht wieder denke, dass ist richtig, nach einigen weiteren Untersuchung.

Nachdem er einen kurzen Blick in den kernel-code hierwie es aussieht, zum Beispiel guest_nice und guest fields sind immer zusammen mit nice und user (Sie sollten also nicht in der cpu-Auslastung Berechnung, da Sie in nice und user bereits Felder)

/*
 * Account guest cpu time to a process.
 * @p: the process that the cpu time gets accounted to
 * @cputime: the cpu time spent in virtual machine since the last update
 * @cputime_scaled: cputime scaled by cpu frequency
 */
static void account_guest_time(struct task_struct *p, cputime_t cputime,
                   cputime_t cputime_scaled)
{
    u64 *cpustat = kcpustat_this_cpu->cpustat;

    /* Add guest time to process. */
    p->utime += cputime;
    p->utimescaled += cputime_scaled;
    account_group_user_time(p, cputime);
    p->gtime += cputime;

    /* Add guest time to cpustat. */
    if (task_nice(p) > 0) {
        cpustat[CPUTIME_NICE] += (__force u64) cputime;
        cpustat[CPUTIME_GUEST_NICE] += (__force u64) cputime;
    } else {
        cpustat[CPUTIME_USER] += (__force u64) cputime;
        cpustat[CPUTIME_GUEST] += (__force u64) cputime;
    }
}

Also zu summieren, was eine präzise Methode zur Berechnung der CPU-Auslastung in Linux und die Felder werden in den Berechnungen berücksichtigt und wie (welche Felder sind zurückzuführen auf die idle-Zeit und der Felder, die nicht-Leerlauf)?

InformationsquelleAutor der Frage Vangelis Tasoulas | 2014-04-29

Schreibe einen Kommentar