Nhận số liệu thống kê sử dụng CPU từ chương trình C


8

Tôi muốn đọc các số liệu thống kê sử dụng CPU từ một chương trình C, tôi quan tâm đến tỷ lệ sử dụng CPU, thời gian đánh cắp , vv Các chỉ số này được hiển thị ở hàng thứ 3 từ toplệnh.

Tôi đã cố phân tích topkết quả đầu ra với awk( top -n 1 -b | awk '{print $0}'), nhưng dường như topluôn cung cấp các giá trị 'hư cấu' giống nhau trước khi nó bắt đầu hiển thị các số liệu thống kê chính xác.

Có cách nào từ mã hoặc bằng cách phân tích cú pháp đầu ra của một số lệnh để lấy số liệu thống kê sử dụng CPU không?

Biên tập:

Nền tảng là Linux

Cảm ơn bạn.


Chắc chắn, nhưng không có cách tiêu chuẩn. Chính xác hệ điều hành đích.
jlliagre

Câu trả lời:


5

Bạn muốn đọc một vài dòng đầu tiên của /proc/stat. Bạn sẽ cần đọc nó hai lần, cách nhau một khoảng thời gian và trừ đi bộ số đầu tiên từ số thứ hai. Các dòng trông như thế này:

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 ...

Dòng đầu tiên là tổng hợp cho tất cả các lõi. Các dòng tiếp theo hiển thị từng lõi. Khi bạn thấy dòng bắt đầu bằng intr, bạn biết dừng phân tích cú pháp.

Mỗi số là lượng thời gian CPU đã sử dụng ở một trạng thái cụ thể. Các đơn vị thường là một phần trăm của một giây. Những trường này là user, nice, system, idle, iowait, irq, softirq, steal, guest, và guest_nice.

Các tài liệu có thẩm quyền, tất nhiên, là mã nguồn. Nếu bạn có một bản sao nguồn nhân Linux tiện dụng, hãy xem fs/proc/stat.c, đặc biệt là show_statchức năng.


Bạn có biết tần số của Proc / stat đang được cập nhật không? giống như cứ sau 1ms hoặc một cái gì đó, cảm ơn bạn.
0xFF

Chúng không phải là tập tin thực sự. Nội dung của chúng được tính khi bạn mở chúng.
David Schwartz

3

một số ví dụ trên web cho thấy cách đọc /proc/pid/stattrong C.

Bạn có thể đọc utimehoặc stimegiá trị tại hai thời điểm riêng biệt và tính toán các số liệu thống kê sử dụng cpu mong muốn. (Tôi đoán cũng topsử dụng dữ liệu thô này.)

(Tôi quên: đây là linux cụ thể.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.