Bagaimana saya bisa mendapatkan penggunaan CPU multi-core yang diaktifkan dengan benar?
Sebagai contoh mari kita pertimbangkan CPU 2 inti, yang mengekspresikan 4 inti virtual.
Sebuah beban kerja berulir tunggal sekarang akan muncul sebagai 100% top
, karena satu inti dari virtual core sepenuhnya digunakan. CPU dan top
bekerja seperti yang diharapkan, seperti akan ada 4 core nyata.
Namun dengan dua utas, semuanya menjadi arkward: Jika semua bekerja dengan baik, mereka seimbang dengan dua core nyata, jadi kami mendapat penggunaan 200%: Dua kali 100% dan dua core virtual idle, dan menggunakan semua daya CPU yang tersedia . Sepertinya saya baik-baik saja.
Namun, jika kedua utas tersebut akan berjalan pada satu inti nyata, mereka akan muncul dengan menggunakan dua kali 100%, yang menghasilkan 200% penggunaan inti virtual. Tetapi di sisi nyata, itu akan menjadi satu inti berbagi kekuatannya pada dua utas, yang kemudian hanya menggunakan setengah dari total daya CPU.
Jadi angka penggunaan yang ditunjukkan oleh top
tidak dapat digunakan untuk mengukur total beban kerja CPU.
Saya juga bertanya-tanya bagaimana hyperthreading menyeimbangkan dua virtual pada inti nyata. Jika dua utas mengambil jumlah siklus yang berbeda, apakah inti virtual akan 'beradaptasi' sehingga keduanya menunjukkan beban 100% bahkan jika beban sebenarnya berbeda?
sumber
Jawaban:
Martin Tegtmeier di Oracle telah menulis posting blog yang menarik tentang ini tahun lalu: https://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2
Jawaban singkatnya; Hyperthreading benar-benar mengacaukan kemampuan top untuk melaporkan persentase utilisasi CPU / idle secara keseluruhan.
Dalam kasus terburuk, CPU 2-core 4-virtual-core menjalankan 2 thread pada 100% -penggunaan-per-core, hampir bisa memenuhi jenuh cpu. (Tergantung pada penggunaan port eksekusi; hanya utas yang menggunakan sumber daya komputasi yang sepenuhnya berbeda pada cpu yang masih dapat berjalan tanpa mempengaruhi kinerja pada utas saat ini.) Namun, atas masih akan melaporkan 50% idle dalam kasus ini.
sumber
Pemanfaatan inti sangat berbeda dari beban pada sistem. Pemanfaatan inti hanya menunjukkan seberapa banyak inti menghitung sesuatu atau menunggu instruksi. Itu bisa 100% sesuai dengan waktu yang diberikan CPU menghitung sesuatu.
Tetapi beban adalah hal yang berbeda, beban umumnya diukur untuk menentukan apakah ada proses yang harus menunggu sumber daya atau tidak. Jika proses tidak menunggu sumber daya apa pun, Anda akan melihat sistem yang sangat performan. Tetapi kadang-kadang Anda akan melihat sistem lambat tetapi pemanfaatan CPU rendah. Itu umumnya berarti beberapa proses sedang menunggu sumber daya dan tidak melepaskan CPU. Untuk skenario seperti ini Anda tidak akan melihat pemanfaatan CPU yang tinggi tetapi sistem mungkin melebihi kapasitasnya.
Dalam sistem Linux, rata-rata beban adalah nilai yang dihitung untuk mengukur kinerja keseluruhan sistem. Nilai rata-rata beban harus dibandingkan dengan sumber daya komputasi paralel, core menjadi spesifik. Jadi jika sebuah sistem dengan 4 inti fisik memiliki rata-rata beban 4 atau lebih, kita dapat dengan aman mengatakan bahwa beberapa proses akan menunggu sumber daya.
Tidak penting jika utilisasi CPU 100 atau 10 persen. Rata-rata beban bisa setinggi 200 atau 300, dalam hal ini sistem akan hampir tidak responsif.
Dalam kondisi operasi normal, rata-rata beban server tidak boleh melebihi jumlah core untuk jangka waktu lama. Paku pendek tidak penting menurut saya. 3 angka yang akan Anda lihat dalam
w
output adalah memuat av. selama 1/5/15 menit.sumber
Menurut pendapat saya tidak ada jawaban di atas yang memuaskan.
Saya pikir artikel yang saya maksudkan pada tautan berikut ditargetkan dengan baik untuk menjawab pertanyaan ini: http://perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html
MENGUTIP:
Bahkan, saya cukup yakin sistem operasi dapat mencapai 100% pada setiap inti virtual, tidak diragukan lagi. Saya baru saja melakukan:
Dan saya dapat meyakinkan Anda 8 core virtual saya, dan 4 core fisik semuanya menggunakan CPU 100%. Dan saya pasti tidak memiliki 8 core pada mesin saya.
Singkatnya, Anda dapat mengasumsikan berikut ini jika total beban CPU melebihi 100%, paling banyak, dan kemungkinan besar cukup akurat, menggunakan tepat 100% inti fisik. Itu menas, jika Anda memiliki CORE 1 fisik dibagi menjadi sistem operasi CPU 1 dan CPU 2. Dan pada CPU 1 Anda memiliki total penggunaan 50% dan pada CPU 2 Anda memiliki total penggunaan 50%, kemungkinan besar dalam kehidupan nyata Anda Menekan total penggunaan 100% pada CPU itu. Anda telah memaksimalkannya.
Tapi tentu saja sistem operasi dalam alat pemantauan sistemnya tidak tahu bahwa itu menjual Anda sebuah ilusi. Dari sudut pandang sistem operasi dan bagaimana ia mengelola sumber daya, ia hanya akan percaya bahwa masing-masing dari dua core virtual tersebut masih menganggur hingga 50 persen, jadi jika ada lebih banyak tugas yang harus dijalankan, ia akan mencoba untuk mendistribusikannya secara seragam melalui kedua core tersebut. . Jadi ketika Anda menggunakan lebih dari 100% pemanfaatan CPU, selama periode penggunaan CPU, selalu ada pekerjaan yang harus dijalankan dalam periode waktu yang tidak pernah mengalami perubahan untuk mendapatkan waktu sclice pada CPU. Akhirnya akan mendapatkannya, tetapi selalu ada beberapa utas yang sebenarnya tidak berjalan meskipun mereka dijadwalkan untuk berjalan.
Terima kasih
sumber