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.