Memahami rata-rata atas dan beban

11

Saya mengamati rata-rata beban tinggi pada mesin tertentu (sekitar 9) di ketiga bidang beban. Saya mengerti beban karena jumlah proses dalam keadaan "dijalankan" / saat ini menginginkan waktu CPU. Apakah saya benar dengan alasan bahwa jika proses N berjalan pada mesin saya ini tidak dapat menghasilkan beban lebih besar dari N?

Juga, apakah beban dihitung sehubungan dengan proses atau utas? Dengan kata lain, dapatkah proses multithreaded menghasilkan beban lebih besar dari 1?

Gabriel Schreiber
sumber
Perhatikan bahwa (karena biasanya diharapkan akan dijadwalkan segera), tugas dalam keadaan "tidak terputus" juga dihitung sebagai berjalan. Hanya detail, bukan sesuatu yang mengubah pertanyaan Anda.
mattdm

Jawaban:

6

Rata-rata beban biasanya digambarkan sebagai "rata-rata panjang antrian". Jadi beberapa proses atau utas yang mengkonsumsi CPU dapat menaikkan LA di atas 1. Tidak ada masalah jika LA kurang dari jumlah total inti CPU. Tetapi jika lebih tinggi dari jumlah CPU, ini berarti beberapa thread / proses akan tetap dalam antrian, siap untuk dijalankan, tetapi menunggu CPU gratis.

gelraen
sumber
3

Angka-angka yang digunakan untuk menghitung rata-rata beban adalah tugas dalam keadaan berjalan atau tidak terputus dan jumlah pekerjaan yang dilakukan dalam potongan waktu dari rata-rata bergerak. Tugas-tugas ini dapat menjadi bagian dari proses multithreaded. Field menjadi kabur lebih jauh ke masa karena hasil smoothing dari algoritma yang digunakan.

Beban 1 sama dengan 100% dari satu CPU yang layak bekerja. Jika Anda memiliki aplikasi multithreaded yang berhasil memiliki sejumlah utas aktif lebih dari jumlah CPU yang tersedia, maka Anda dapat memiliki satu proses mendorong beban di atas 1. Ini kemungkinan akan menjadi lonjakan jangka pendek dan tidak tercermin dalam tampilan slice time yang lebih lama dari rata-rata beban.

Juga, karena rata-rata beban dikembangkan sebelum ada sistem multi-inti, penting untuk membagi jumlah beban dengan jumlah total inti yang tersedia. Jika ini adalah beban berkelanjutan 9 pada sistem quad core 4 socket, maka ini adalah beban 9 dari 16 dan tidak terlalu menjadi masalah.

nzwulfin
sumber
1
- Saya belum melihat sistem di mana beberapa core pada soket diekspos ke ruang pengguna dengan cara yang membuat mereka terlihat seperti apa saja kecuali lebih banyak CPU. Jadi di atas, pada sistem quad-core 4-socket, 16 CPU terlihat. (Jadi orang dapat dengan mudah melihat bahwa beban 9 berada di bawah jumlah CPU.)
mattdm
Saya mengerti bahwa angka-angka itu logaritmik, sehingga angka-angka itu tepat di bawah atau di atas 1. Satu sistem yang saya miliki, saya melihat sistem melaporkan ini: load rata-rata: 10.41, 9.57, 9.26. Apa?? Mengapa satu sistem linux melaporkan rata-rata memuat: 0,81, 1,57, 0,98 sedangkan sistem ini melaporkan rata-rata memuat: 10,41, 9,57, 9,26? Apakah semua unix tidak sama dalam hal ini?
djangofan
3

Lihat kernel / sched / loadavg.c yang memiliki komentar panjang dan luar biasa di awal yang menjelaskan derivasi rata-rata beban dari rata-rata peluruhan secara eksponensial dari jumlah utas yang dapat dijalankan ("antrian berjalan") ditambah jumlah utas yang tidak dapat terputus (menunggu pada I / O atau menunggu kunci).

Inilah inti dari komentar tersebut, tetapi layak dibaca secara lengkap:

 * The global load average is an exponentially decaying average of
 * nr_running + nr_uninterruptible.
 *
 * Once every LOAD_FREQ:
 *     nr_active = 0;
 *     for_each_possible_cpu(cpu)
 *         nr_active += cpu_of(cpu)->nr_running +
 *                      cpu_of(cpu)->nr_uninterruptible;
 *     avenrun[n] = avenrun[0] *
 *                  exp_n + nr_active *
 *                  (1 - exp_n)

Kehidupan nyata membuat kode ini agak kompleks: penghitung per-CPU, kernel tanpa tick, CPU hotswap, kurangnya kode titik floaing yang membutuhkan implementasi fixed-point exp (n). Tetapi mudah untuk melihat bahwa semuanya bekerja dengan setia menerapkan metode yang dijelaskan dalam komentar.

Anda akan mencatat bahwa Linux menghitung utas , bukan hanya proses, yang menjawab pertanyaan Anda.

vk5tu
sumber
0

3 beban rata-rata adalah sesuatu seperti fungsi logaritmik yang berputar di sekitar angka 1. Sesuatu yang mirip dengan f (x) = eX (e ke eksponen X). Secara teknis representasi titik tetap dari fungsi peluruhan eksponensial yang mensimulasikan rata-rata. Mereka aditif, per CPU, sehingga beban penuh mungkin terlihat seperti 4,00 pada sistem quad-core. Angka pertama adalah rata-rata selama menit terakhir, yang kedua adalah rata-rata selama lima menit terakhir, dan yang ketiga adalah rata-rata selama 15 menit terakhir. Saya pikir jawaban harus dijatuhkan di sini yang menyebutkan itu.

Djangofan
sumber
0

Beban instan: jumlah tugas yang berjalan atau menunggu untuk dijalankan, atau dengan cara lain, jumlah tugas yang ingin dijalankan

Rata-rata beban: ukuran di atas tetapi secara eksponensial dirata-rata dengan sampel sebelumnya dengan ukuran yang sama

Kedua angka ini tidak terikat, dan seringkali jauh lebih besar dari N.

Untuk menjadi jelas: jumlah beban di Linux termasuk utas, tidak ada keraguan tentang itu. Anda dapat menghasilkan beban besar yang sewenang-wenang dengan satu proses yang menciptakan banyak utas.

Lebih lanjut tentang ini di sini

http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html

Gustavo Homem
sumber