Tidak pasti, tetapi kebanyakan terus 1.00*n_cpu
.
Muatannya berarti sebagai berikut: jika ada beberapa proses pada sistem cpu tunggal, mereka tampaknya berjalan paralel. Tetapi itu tidak benar. Apa yang secara praktis terjadi: kernel memberikan 1/100 detik untuk suatu proses, dan kemudian memecahnya berjalan dengan interupsi. Dan memberikan 1/100 detik berikutnya untuk proses lain.
Praktis pertanyaan, "proses mana yang harus mendapatkan interval 1/100 detik berikutnya?", Akan diputuskan oleh heuristik yang kompleks. Ini dinamai penjadwalan tugas .
Tentu saja, proses yang diblokir, misalnya mereka menunggu data apa yang mereka baca dari disk, dibebaskan dari penjadwalan tugas ini.
Apa yang dimuat mengatakan: berapa banyak proses yang saat ini menunggu kerangka waktu 1/100 detik berikutnya. Tentu saja, itu adalah nilai rata-rata. Ini karena Anda dapat melihat beberapa angka dalam a cat /proc/loadavg
.
Situasi dalam sistem multi-cpu sedikit lebih rumit. Ada beberapa CPU, yang kerangka waktunya dapat diberikan untuk beberapa proses. Itu membuat penjadwalan tugas sedikit - tapi tidak terlalu - kompleks. Tetapi situasinya sama.
Kernel cerdas, ia mencoba berbagi sumber daya sistem untuk efisiensi optimal, dan itu sudah dekat dengan itu (ada hal-hal optimasi kecil, misalnya lebih baik jika suatu proses akan dijalankan waktu yang paling lama mungkin pada saat yang sama cpu karena pertimbangan caching, tetapi mereka tidak masalah di sana). Ini karena jika kita memuat 8, itu berarti: sebenarnya ada 8 proses menunggu slice waktu berikutnya. Jika kita memiliki 8 cpus, kita dapat memberikan irisan waktu ini kepada cpus satu-ke-satu, dan dengan demikian sistem kita akan digunakan secara optimal.
Jika Anda melihat a top
, Anda dapat melihat bahwa jumlah proses yang berjalan sebenarnya sangat rendah: mereka adalah proses yang ditandai di R
sana. Bahkan pada sistem yang tidak terlalu hardcore sering di bawah 5. Ini sebagian karena proses menunggu data mereka dari disk atau dari jaringan juga ditangguhkan (ditandai dengan S
di atas). Muatan hanya menunjukkan penggunaan cpu.
Ada alat untuk mengukur beban disk juga, karena mereka seharusnya setidaknya penting sebagai pemantauan penggunaan CPU, tetapi entah bagaimana itu tidak begitu dikenal di sini di dunia sysadmin profesional kami.
Alat Windows sering membagi beban dengan jumlah CPU yang sebenarnya. Hal ini menyebabkan beberapa administrator sistem windows profesional menggunakan beban sistem dalam pengertian dibagi-per-CPU. Mereka tidak benar dan mungkin akan lebih bahagia setelah Anda menjelaskan hal ini kepada mereka.
CPU Multicore praktis adalah beberapa CPU pada chip silikon yang sama. Tidak ada perbedaan.
Dalam kasus CPU hyperthreaded ada efek samping yang menarik: memuat cpu membuat pasangan hyperthreaded lebih lambat. Tetapi ini terjadi pada lapisan yang lebih dalam yang ditangani oleh penjadwalan tugas normal, meskipun itu dapat (dan harus) memengaruhi keputusan pemindahan proses penjadwal.
Tetapi dari sudut pandang kami saat ini - apa yang menentukan beban sistem - tidak masalah juga.
Saya melakukan beberapa percobaan pada sistem Xeon 24-core kami (2 socket x 12 core). Beban maksimum adalah 48.0 dalam hal ini karena cara Linux mengatur hyperthreading.
Namun, Anda tidak mendapatkan yang setara dengan 48 core throughput. Apa yang saya amati adalah bahwa Anda mendapatkan sekitar 90% dari throughput dalam 24 prosesor logis pertama, yaitu jika beban berjalan ke 24.0. Kemudian Anda mendapatkan throughput tambahan sekitar 10% untuk 24 prosesor logis yang tersisa (beban berjalan hingga 48,0). Cara lain untuk berpikir tentang hal itu adalah bahwa jika Anda menjalankan 48 thread pada 24 core, Anda akan mendapatkan dorongan sekitar 10-20% jika Anda mengaktifkan hyperthreading versus tidak. Ini bukan peningkatan 100% seperti yang disiratkan oleh para marketing.
Misalnya, salah satu cara menguji pengamatan ini adalah memiliki proses yang menjalankan 48 utas (katakanlah menggunakan TBB atau model threading handrolled), kemudian jalankan
dan kemudian jalankan
Yang terakhir harus berjalan dalam waktu sekitar 10-20% lebih sedikit. Jika proses Anda sangat I / O diblokir, maka hasilnya mungkin berbeda.
Yang pertama akan menonaktifkan hyperthreading dengan hanya membiarkan utas berjalan pada prosesor logis tunggal (dari masing-masing inti), sedangkan yang kedua akan memungkinkan hiperlebar dengan membiarkan utas berjalan pada 2 prosesor logis (dari masing-masing inti).
Beban dalam kedua kasus harus dilaporkan sebagai 48.0 ... yang seperti yang Anda lihat sangat menyesatkan.
sumber