Bagaimana waktu CPU dan penggunaan CPU sama?

23

Di halaman Wikipedia untuk waktu CPU , katanya

Waktu CPU diukur dalam tick atau detik. Seringkali, berguna untuk mengukur waktu CPU sebagai persentase dari kapasitas CPU, yang disebut penggunaan CPU.

Saya tidak mengerti bagaimana durasi waktu dapat diganti dengan persentase. Ketika saya melihat top, tidak %CPUmemberi tahu saya bahwa MATLABmenggunakan 2,17 core saya?

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
18118 jasl      20   0 9248400 261528  78676 S 217.2  0.1   8:14.75 MATLAB      

Pertanyaan

Untuk lebih memahami apa itu penggunaan CPU, bagaimana cara menghitung penggunaan CPU sendiri?

Jasmine Lognnes
sumber
Tekan '1' sementara Anda memiliki 'atas' terbuka untuk mengumpulkan lebih banyak rincian berdasarkan per-inti.
Peter
Itu yang nomor satu ( 1).
Michael Hampton
Biarkan Linux menunjukkan seberapa sibuk setiap Prosesor dengan permintaan Baris Perintah ini. mpstat -P ALL 5 3 masukkan untuk status multiprosesor 5 detik 3 interval. Bagi% CPU yang dilaporkan dengan jumlah inti Anda untuk mendapatkan rata-rata CPU Sibuk%. iostat -xm 5 3 enter akan memberi tahu Anda berapa banyak core / CPU yang Anda miliki.
Wilson Hauck

Jawaban:

32

Waktu CPU dialokasikan dalam irisan waktu diskrit (ticks). Untuk sejumlah waktu tertentu, CPU sibuk, di lain waktu tidak (yang diwakili oleh proses idle). Pada gambar di bawah, CPU sibuk untuk 6 dari 10 irisan CPU. 6/10 = .60 = 60% dari waktu sibuk (dan karena itu akan ada 40% waktu idle).

masukkan deskripsi gambar di sini

Sebuah persentase didefinisikan sebagai "nomor atau tingkat yang dinyatakan sebagai sejumlah bagian dari sesuatu yang dibagi menjadi 100 bagian". Jadi dalam kasus ini, bagian-bagian itu adalah irisan waktu yang terpisah dan sesuatu adalah irisan waktu yang sibuk vs irisan waktu idle - tingkat irisan waktu yang sibuk untuk menganggur.

Karena CPU beroperasi dalam GHz (miliaran siklus per detik). Sistem operasi memotong waktu itu dalam unit yang lebih kecil yang disebut kutu. Mereka tidak benar-benar 1/10 detik. Tingkat kutu di windows adalah 10 juta kutu dalam satu detik dan di Linux itu sysconf(_SC_CLK_TCK)(biasanya 100 kutu per detik).

Dalam sesuatu seperti top, siklus CPU yang sibuk kemudian dipecah menjadi persentase hal-hal seperti waktu pengguna dan waktu sistem. Di topLinux dan perfmon di Windows, Anda akan sering mendapatkan tampilan yang melampaui 100%, itu karena totalnya adalah 100% * the_number_of_cpu_cores.

Dalam sistem operasi, tugas penjadwal untuk mengalokasikan irisan berharga ini ke proses, jadi penjadwal adalah yang melaporkan ini.

Kyle Brandt
sumber
1
Irisan waktu tidak diukur dalam sepersejuta detik. Mereka tidak sesingkat itu. Mereka lebih mungkin antara 0,1 ms dan 10 ms. Resolusi nilai waktu dalam API tidak sama dengan laju penghitung waktu. Beberapa panggilan API di Linux memiliki waktu yang ditentukan dalam nanodetik, tetapi Anda tidak ingin pengatur waktu sesering itu. Jika Anda memiliki sejuta interupsi per detik, Anda akan menghabiskan semua waktu CPU pada sakelar konteks.
kasperd
2
Apakah maksud Anda 1000 ticks? Semua sistem Linux saya adalah 1000 ticks (EL5 dan EL6), atau 1000 ticks + tickless (EL7). Atau maksud Anda sesuatu yang lain?
Michael Hampton
1
Halaman manual mengatakan: "Variabel yang sesuai sudah usang." Saya pikir itu tidak bisa diandalkan. Saya memeriksa konfigurasi kernel di /boot/config-2.6.32- apa pun bulan ini ...
Michael Hampton
1
Aha, tidak, mereka tidak dilaporkan sama. CLK_TCK adalah nilai yang diskalakan secara eksplisit untuk userspace, dan tampaknya selalu 100 terlepas dari berapa banyak kutu yang sebenarnya digunakan kernel. Menemukan beberapa penjelasan yang bagus tentang SO ( 1 , 2 )
Michael Hampton
2
Saya juga berpikir Windows "ticks" yang mengacu pada panggilan API tidak sama dengan frekuensi interupsi penghitung waktu Windows , dan karenanya tidak benar-benar sebanding.
Michael Hampton
15

Waktu CPU adalah waktu proses menggunakan CPU - mengonversinya menjadi persentase dilakukan dengan membagi dengan jumlah waktu nyata yang dilewati.

Jadi, jika saya memiliki proses yang menggunakan 1 detik waktu CPU selama 2 detik, itu menggunakan 50% CPU.

Dalam kasus proses MATLAB Anda, 217% menunjukkan bahwa itu digunakan 2,17 detik waktu CPU per detik selama interval sampel terakhir - secara efektif, memonopoli 2 core CPU dan mengambil sepertiga.

Shane Madden
sumber
5
Atau bisa juga menggunakan 25% dari 8 CPU dan bagian dari yang kesembilan.
Bob Jarvis - Reinstate Monica