Untuk mengukur total waktu CPU pengguna, saya menggunakan bidang "utime" dari /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.
(dari man proc (5) )
Jadi, "utime pengguna" saya adalah jumlah utime
dari semua PID yang dijalankan oleh pengguna ini.
Saya berharap ini akan memberi saya nilai akurat untuk jumlah detik CPU yang telah dihabiskan pengguna ini. Apakah saya di jalur yang benar?
Beberapa hal yang belum saya mengerti atau perhitungkan:
- Setiap PID juga memiliki PID induk (atau nol). Tapi saya menghitung setiap PID, bukan hanya yang dengan ppid 0. Apakah ini benar?
- Ada, selain utime, stime, cutime dan cstime. Apakah saya perlu khawatir tentang itu? Saya berasumsi bahwa utime adalah jumlah total cpu detik untuk PID, tidak termasuk induknya.
Jika saya menghitung total waktu cpu sistem menggunakan /proc/uptime
, nilai ini cukup dekat dengan jumlah saya untuk semua pengguna, tetapi perbedaannya signifikan. Misalnya (dalam menit):
system cpu_time: 96.13
sum of users_cputime: 111.45
Koreksi:
Saya mendapatkan nilai-nilai yang "masuk akal" untuk semua hal. Saat ini saya menggunakan jumlah utime, stime, cutime dan cstime. Dan itu melaporkan nilai yang, meskipun saya tidak mengerti, berkorelasi sangat baik dengan pengukuran dari time
.
Jika saya benar-benar di jalur yang salah, ada pertanyaan lain:
- Apa cara paling adil untuk memonitor total waktu CPU - per pengguna? (+500 Bounty) di Ask Ubuntu
/proc/uptime
? Lalu saya kira I / O yang dikaitkan dengan tugas idle akan menjelaskan perbedaannya. Saya tidak tahu apa-apa tentang topik ini, jadi saya curiga saya kehilangan sesuatu yang utama: Saya tidak akan berharap begitu banyak terjadi dalam tugas idle, terutama mengingat bahwa jumlah pengguna cputime Anda kemungkinan besar kehilangan banyak kekurangan- proses hidup.
/proc/cputime
tidak memiliki informasi tentang waktu yang dihabiskan oleh proses pelaksanaan CPU, jadi saya bingung apa perhitungan "cpu_time sistem" Anda. Jika Anda melakukan sesuatu dengan nomor kedua, itu adalah waktu yang dihabiskan oleh tugas idle ; Saya tidak tahu persis apa artinya itu dalam praktik.