Mengapa top melaporkan penggunaan CPU yang salah?

10

Saya memiliki mesin dengan Intel(R) Xeon(R) CPU E5520terlihat sebagai 16 core logis (8 dengan HT). Jika saya menjalankan sesuatu untuk memakan waktu CPU (single threaded) dengan benar melaporkan penggunaan CPU 100% untuk proses tetapi hanya sekitar 3-4% total penggunaan.

Cpu(s):  3.6%us,  0.0%sy,  0.0%ni, 96.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1567 www       20   0 65632   84    4 R  100  0.0   0:05.96 burnMMX

Tentunya penggunaan yang dilaporkan harus ~ 6,25% (1 dari 16 core).

  • Apakah itu salah karena ini adalah mesin virtual?
  • Bagaimana saya bisa menghitung nilai yang benar?

sumber
1
Anda dapat mencoba atopdan mengubah bagian atas untuk melaporkan penggunaan setiap CPU secara terpisah (dengan menekan 1)
Hubert Kario
@ HubertKario, penggunaan yang dilaporkan untuk masing-masing inti benar, lalu mengapa totalnya salah?
Jika tingkat penggunaan masing-masing core benar maka ini akan menyarankan bug di atas tidak seperti kedengarannya ...
Hubert Kario
Ini bukan pos pertama tentang hasil teratas yang salah dalam VM. Bisakah Anda menggambarkan teknologi VM Anda dan sistem operasi host dan tamu Anda?
Nils
@Nils Xen dengan tamu Ubuntu / 2.6.32-21-server. Tidak ada informasi tentang OS host.

Jawaban:

12

topdalam ringkasan melaporkan penggunaan relatif terhadap CPU dengan semua core ditambahkan. Di sisi lain, ketika Anda melihat dalam daftar proses, laporan teratas persen dirujuk ke satu inti (nyata atau HT). Coba jalankan proses dengan 4 utas yang dapat memakan hingga 4 inti CPU, Anda akan menemukannya menggunakan CPU 400%.

Saya tidak tahu mengapa, tapi itulah cara topkerjanya pada semua sistem Linux yang pernah saya lihat.

Patkos Csaba
sumber
5

Paling sering topbekerja dalam mode 'Irix' secara default, sama seperti yang Anda gambarkan. Jika Anda ingin mendapatkan persentase dari total kemampuan CPU (yaitu ketika jumlah penggunaan CPU yang mungkin bertambah hingga 100% dan tidak cpu_cores_number * 100%), cukup ganti mode 'Irix' dengan menekan I.

moon.musick
sumber