Cでの合計CPUシステム使用量の計算

Cでの合計CPUシステム使用量の計算

合計CPU計算のためにStackOverflowでこの答えを見つけました。使用法:https://stackoverflow.com/questions/1420426/calculate-cpu-usage-of-a-process-in-linux/4497769#4497769

しかし、利用可能な合計CPUサイクルの割合でこれをどのように計算しますか?私は他のプロセスを作成する必要なしにシステムコールとファイルのみを使用してこれを実行したいと思います。

totalこの数字は提供された情報の属性にすぎないと思いますglibtop_cpu(そうですが、user + nice + sys + idle実際には時間の経過とともに変わります)。

時間が経つにつれて周期が自然に変わるからかもしれないと思いましたが、この場合なぜ他の数字を報告するのでしょうかtop。 Firefox で新しいタブを作成してページを読み込むと、topFirefox はコアの約 35% を使用して数秒間表示されますが、次のコードでは一貫した 7.24% しか表示されません。

#include <stdio.h>
#include <time.h>
#include <glibtop/cpu.h>
#include <unistd.h>

float // Get CPU usge as a decimal percentage.
get_cpu(glibtop_cpu *cpustruct) {
    glibtop_get_cpu(cpustruct);
    return 100 - (float)cpustruct->idle / (float)cpustruct->total * 100;
}

int
main(void) {
    glibtop_cpu cpustruct;
    unsigned int sleepfor = 5000;
    float usage; 
    for(;;usleep(sleepfor)) {
        usage = get_cpu(&cpustruct);
        printf("%.2f\n", usage); 
    }
    exit(0);
}

答え1

アップデート1

timeこのコマンドをプログラムに統合することを検討できます。ソースはここ。デフォルトのcファイル(time.c)はわずか20kbです。

オリジナル

おそらく望むものではありませんが、「怠惰な」方法は、次timeのコマンドを使用することです。

time firefox

Firefox を閉じると、次のメッセージが表示されます。

~$ time firefox 
NOTE: child process received `Goodbye', closing down

real    3m16.070s
user    0m17.329s
sys     0m17.045s

「NOTE:」行を印刷してくださいfirefox

時間は、realプログラムの実行にかかる時間です。

そして使用されたCPU時間userです。sys

答え2

なぜなら、glibtop_get_cpu()各カテゴリで使用された jiffies の総数を返すからです。システム起動後。また何ができますか?最後に電話したかどれくらいかわかりません。

しかし、あなたはできなければなりません。この数字がある通貨から次の通貨にどのように変化するかを測定する必要があります。計算できません現在の(例:1秒または0.5秒など)過去には、呼び出しを一度だけ使用できます。

睡眠時間に基づいて計算することもできますが、別のタイマーがある場合は、特に負荷がかかる場合はより正確です。

関連情報