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?
Jawaban:
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.
sumber
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.
sumber
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:
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.
sumber
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.
sumber
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
sumber