Dapatkan statistik pemanfaatan CPU dari program C.

8

Saya ingin membaca statistik pemanfaatan CPU dari program C, saya tertarik pada persentase penggunaan CPU, mencuri waktu dll. Statistik ini ditampilkan di baris ke-3 dari topperintah.

Saya mencoba mengurai topoutput dengan awk( top -n 1 -b | awk '{print $0}'), tetapi tampaknya topmemberikan nilai 'fiksi' yang sama sebelum mulai menampilkan statistik yang benar.

Apakah ada cara dari kode, atau dengan mengurai output perintah untuk mendapatkan statistik penggunaan CPU?

Edit:

Platformnya adalah Linux

Terima kasih.

0xFF
sumber
Tentu, tetapi tidak ada cara standar. Precise OS target (es).
jlliagre

Jawaban:

5

Anda ingin membaca beberapa baris pertama /proc/stat. Anda harus membacanya dua kali, jarak waktu yang terukur, dan kurangi set angka pertama dari yang kedua. Garis-garisnya terlihat seperti ini:

cpu  1526724 408013 600675 541100340 2861417 528 14531 0 0 0
cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0
cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0
cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0
cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0
intr 2111239193 344878476 16943 ...

Baris pertama adalah agregat untuk semua core. Baris berikutnya menunjukkan setiap inti. Saat Anda melihat garis yang dimulai dengan intr, Anda tahu untuk berhenti parsing.

Setiap angka adalah jumlah waktu yang dihabiskan CPU dalam kondisi tertentu. Unit-unit biasanya seperseratus detik. Bidang yang user, nice, system, idle, iowait, irq, softirq, steal, guest, dan guest_nice.

Dokumentasi otoritatif, tentu saja, adalah kode sumber. Jika Anda memiliki salinan sumber kernel Linux, lihat fs/proc/stat.c, khususnya show_statfungsinya.

David Schwartz
sumber
Apakah Anda tahu pada frekuensi apa proc / stat sedang diperbarui? seperti sekali setiap 1 ms atau sesuatu, terima kasih.
0xFF
Itu bukan file asli. Konten mereka dihitung saat Anda membukanya.
David Schwartz
3

Ada beberapa contoh di web yang menunjukkan cara membaca /proc/pid/statdalam C.

Anda dapat membaca utimeatau stimemenilai pada dua momen berbeda dan menghitung statistik pemanfaatan cpu yang diinginkan. (Saya kira topmenggunakan data mentah ini juga.)

(Saya lupa: ini spesifik linux.)

Stéphane Gimenez
sumber