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

おすすめ記事