Để đo tổng thời gian CPU của người dùng, tôi đang sử dụng trường "utime" ngoài /proc/[pid]/stat
:
utime %lu Amount of time that this process has been scheduled in user
mode, measured in clock ticks (divide by
sysconf(_SC_CLK_TCK). This includes guest time, guest_time
(time spent running a virtual CPU, see below), so that
applications that are not aware of the guest time field do
not lose that time from their calculations.
(từ người đàn ông Proc (5) )
Vì vậy, "utime người dùng" của tôi là tổng utime
của tất cả các PID mà người dùng này đang chạy.
Tôi hy vọng điều này sẽ mang lại cho tôi một giá trị chính xác cho số giây CPU mà người dùng này đã bỏ ra. Có phải tôi đang trên đường ray bên phải không?
Một số điều tôi chưa hiểu hoặc chưa tính đến:
- Mỗi PID cũng có một cha mẹ (hoặc không). Nhưng tôi đang đếm từng PID, không chỉ những người có ppid bằng 0. Điều này có đúng không?
- Ngoài ra, ngoài utime, stime, cutime và cstime. Tôi có cần phải lo lắng về những điều đó? Tôi giả định rằng utime là tổng số giây cpu cho một bộ vi xử lý, không tính phụ huynh.
Nếu tôi tính tổng thời gian cpu của hệ thống bằng cách sử dụng /proc/uptime
, giá trị này khá gần với tổng của tôi cho tất cả người dùng, nhưng sự khác biệt là đáng kể. Chẳng hạn (tính bằng phút):
system cpu_time: 96.13
sum of users_cputime: 111.45
Điều chỉnh:
Tôi nhận được các giá trị "tìm kiếm hợp lý" cho tất cả các loại. Hiện tại tôi đang sử dụng tổng hợp của utime, stime, cutime và cstime. Và nó báo cáo các giá trị mà trong khi tôi không hiểu chúng, thì tương quan rất tốt với các phép đo từ đó time
.
Nếu tôi hoàn toàn đi sai đường, có một câu hỏi khác:
- Cách công bằng nhất để theo dõi tổng thời gian CPU - mỗi người dùng là gì? (+500 Bounty) trên Hỏi Ubuntu
/proc/uptime
đâu? Sau đó, tôi đoán rằng I / O được gán cho nhiệm vụ nhàn rỗi sẽ giải thích sự khác biệt. Tôi không biết gì về chủ đề này, vì vậy tôi nghi ngờ mình đang thiếu một điều quan trọng: Tôi sẽ không mong đợi quá nhiều sẽ xảy ra trong nhiệm vụ nhàn rỗi, đặc biệt khi xem xét rằng tổng số người dùng của bạn có thể bị thiếu rất nhiều quá trình sống.
/proc/cputime
không có bất kỳ thông tin nào về thời gian dành cho các quá trình thực thi CPU, vì vậy tôi rất băn khoăn không biết tính toán cpu_time của hệ thống của bạn là gì. Nếu bạn đang làm gì đó với số thứ hai, đó là thời gian dành cho nhiệm vụ nhàn rỗi ; Tôi không biết chính xác điều đó có nghĩa gì trong thực tế.