Xem kernel / calendar / loadavg.c có một nhận xét dài và xuất sắc khi bắt đầu giải thích việc lấy trung bình tải từ mức trung bình phân rã theo cấp số nhân của số luồng có thể chạy được ("hàng đợi chạy") cộng với số lượng luồng không liên tục (đang chờ trên I / O hoặc chờ trên khóa).
Đây là bản chất của bình luận, nhưng nó đáng để đọc đầy đủ:
* 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)
Cuộc sống thực làm cho mã có phần phức tạp: bộ đếm trên mỗi CPU, nhân không tích hợp, CPU hotswap, thiếu mã điểm nổi yêu cầu triển khai điểm cố định của exp (n). Nhưng thật dễ dàng để thấy rằng tất cả đều đang làm việc để thực hiện một cách trung thực phương pháp được mô tả trong nhận xét.
Bạn sẽ lưu ý rằng Linux đếm các luồng , không chỉ các tiến trình, trả lời câu hỏi của bạn.