Saat berjalan mencoder
dengan utas = 4 (pada cpu quad-core). Saya perhatikan bahwa htop
tidak menunjukkan penggunaan CPU yang sebenarnya , tetapi top
tidak.
Tampaknya htop hanya melaporkan satu inti . Apakah ini bug / batasan htop ? Apa yang terjadi disini?
Tidak ada entri untuk mencoder ditampilkan di ps
atau htop
atau top
. Saya berasumsi bahwa 100% berarti bahwa 1 core sudah maksimal, tetapi bahkan ini terasa aneh bagi saya; bagaimana dengan core lainnya?
Pembaruan: menambahkan output "System Monitor"
PID %CPU COMMAND
"top" 1869 220 mencoder
"htop" 1869 95 mencoder -noodml /media/...
"System Monitor" 1869 220 mencoder
Jawaban:
Seperti yang telah Anda katakan sendiri, Anda dapat menekan Huntuk menampilkan utas pengguna.
Hanya untuk referensi di masa mendatang (dan untuk bersenang-senang), mari kita hitung pemanfaatan CPU!
Sedikit latar belakang:
Dalam sistem operasi modern, ada Penjadwal. Ini bertujuan untuk memastikan bahwa semua Proses dan utasnya mendapatkan waktu komputasi yang adil. Saya tidak akan terlalu banyak menjadwalkan (itu benar-benar rumit). Tetapi pada akhirnya ada sesuatu yang disebut run queue . Di sinilah semua instruksi dari semua proses berbaris untuk menunggu giliran mereka dieksekusi.
Proses apa pun menempatkan "tugas" di antrian proses, dan begitu prosesor siap, ia mengeluarkannya dan menjalankannya. Ketika sebuah program pergi tidur, misalnya, ia menghapus dirinya sendiri dari antrian run dan kembali ke "akhir baris" setelah siap dijalankan lagi.
Mengurutkan pada antrian ini berkaitan dengan Prioritas proses (juga disebut "nilai bagus" - yaitu proses yang baik tentang sumber daya sistem).
Panjang antrian menentukan Beban sistem. Beban 2,5 misalnya berarti bahwa ada 2,5 instruksi untuk setiap instruksi CPU dapat menangani secara real time .
Di Linux, omong-omong, beban ini dihitung dalam interval 10 ms (secara default).
Sekarang ke nilai Persentase pemanfaatan CPU:
Bayangkan Anda memiliki dua jam, satu disebut
t
dan itu mewakili waktu nyata . Mengukur satu detik untuk setiap detik. Jam lain yang kita panggilc
. Ini hanya berjalan jika ada proses yang harus dilakukan. Itu berarti, hanya ketika suatu proses menghitung sesuatu, jam berjalan. Ini juga disebut waktu CPU. Setiap proses pada sistem 'memiliki' salah satunya.Pemanfaatan prosesor sekarang dapat dihitung untuk satu proses:
atau untuk semua proses:
Pada mesin multi-core, ini dapat menghasilkan nilai 3,9 tentu saja, karena CPU dapat menghitung komputasi bernilai empat detik setiap detik, jika digunakan dengan sempurna.
Wikipedia memberikan contoh ini:
Berikut potongan python kecil yang melakukan ini
Di dunia yang sempurna, Anda dapat menyimpulkan bahwa beban sistem adalah 100 - 66,93 = 33,1%. (Tetapi pada kenyataannya itu salah karena hal-hal kompleks seperti I / O tunggu, penjadwalan ketidakefisienan dan sebagainya)
Berbeda dengan memuat , perhitungan ini akan selalu menghasilkan nilai antara 0 dan jumlah prosesor, yaitu antara 0 dan 1 atau 0 hingga 100%. Sekarang tidak ada cara untuk membedakan antara mesin yang menjalankan tiga tugas, memanfaatkan cpu 100%, dan mesin yang menjalankan sejuta tugas, hampir tidak ada pekerjaan yang dilakukan pada salah satu dari mereka, juga pada 100%. Jika Anda, misalnya, mencoba menyeimbangkan banyak proses di banyak komputer, pemanfaatan cpu hampir tidak berguna. Muat apa yang Anda inginkan di sana.
Pada kenyataannya, ada lebih dari satu jam waktu pemrosesan. Ada satu untuk menunggu di I / O misalnya. Jadi Anda juga bisa menghitung pemanfaatan sumber daya I / O.
Ini mungkin tidak membantu mengenai pertanyaan awal, tapi saya harap ini menarik. :)
sumber