Hiểu trung bình hàng đầu và tải


11

Tôi đang quan sát mức trung bình tải cao trên một máy nhất định (khoảng 9) trong cả ba trường tải. Tôi hiểu tải là số lượng quá trình trong trạng thái "chạy" / hiện đang mong muốn thời gian CPU. Tôi có đúng không khi lý do rằng nếu N tiến trình đang chạy trên máy của tôi thì điều này không thể tạo ra tải lớn hơn N?

Ngoài ra, số lượng tải liên quan đến các quá trình hoặc chủ đề? Nói cách khác, một quá trình đa luồng có thể tạo ra tải lớn hơn 1 không?


Lưu ý rằng (vì chúng thường được dự kiến ​​sẽ được lên lịch rất sớm), các tác vụ ở trạng thái "không bị gián đoạn" cũng được tính là đang chạy. Chỉ là một chi tiết, không phải là một cái gì đó thay đổi câu hỏi của bạn.
mattdm 17/03/2016

Câu trả lời:


6

Tải trung bình thường được mô tả là "chiều dài trung bình của hàng đợi chạy". Vì vậy, rất ít quá trình hoặc luồng tiêu thụ CPU có thể nâng LA lên trên 1. Không có vấn đề gì nếu LA nhỏ hơn tổng số lõi CPU. Nhưng nếu nó cao hơn số lượng CPU, điều này có nghĩa là một số luồng / tiến trình sẽ ở trong hàng đợi, sẵn sàng để chạy, nhưng chờ CPU miễn phí.


3

Các số được sử dụng để tính trung bình tải là các nhiệm vụ ở trạng thái chạy hoặc không bị gián đoạn và khối lượng công việc được thực hiện trong lát thời gian của trung bình di chuyển. Những nhiệm vụ này có thể là một phần của quá trình đa luồng. Các trường mờ dần về thời gian do kết quả làm mịn từ thuật toán được sử dụng.

Tải trọng 1 bằng 100% giá trị của một CPU. Nếu bạn có một ứng dụng đa luồng được quản lý để có một số luồng hoạt động vượt quá số lượng CPU có sẵn, thì bạn có thể có một tiến trình duy nhất tải trên 1. Đây có thể là một đột biến ngắn hạn và không được phản ánh trong quan điểm lát thời gian dài hơn của trung bình tải.

Ngoài ra, do trung bình tải đã được phát triển trước khi có các hệ thống đa lõi, điều quan trọng là phải chia số lượng tải cho tổng số lõi có sẵn. Nếu đây là tải 9 được duy trì trên hệ thống lõi tứ 4 ổ cắm, thì đây là tải 9 trên 16 và không thực sự là vấn đề.


1
- Tôi chưa thấy một hệ thống mà nhiều lõi trên một ổ cắm được tiếp xúc với không gian người dùng theo cách làm cho chúng trông giống như bất cứ thứ gì ngoại trừ nhiều CPU hơn. Vì vậy, trên cùng, trên hệ thống lõi tứ 4 ổ cắm, có thể nhìn thấy 16 CPU. (Vì vậy, người ta có thể dễ dàng thấy rằng tải của 9 thấp hơn số lượng CPU.)
mattdm 17/03/2016

Tôi hiểu rằng các số là logarit, vì vậy chúng chỉ ở dưới hoặc trên 1. Một hệ thống tôi có, tôi thấy hệ thống báo cáo này: tải trung bình: 10,41, 9,57, 9,26. Gì?? Tại sao một hệ thống linux báo cáo tải trung bình: 0,81, 1,57, 0,98 trong khi hệ thống này báo cáo tải trung bình: 10,41, 9,57, 9,26? Có phải tất cả các unix không giống nhau về điều này?
djangofan

3

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.


0

Trung bình 3 tải là một cái gì đó giống như hàm logarit xoay quanh số 1. Một cái gì đó tương tự như f (x) = eX (e với số mũ X). Về mặt kỹ thuật, biểu diễn điểm cố định của hàm phân rã theo hàm mũ mô phỏng trung bình. Chúng là phụ gia, trên mỗi CPU, do đó, toàn bộ tải có thể trông giống như 4,00 trên hệ thống lõi tứ. Số đầu tiên là trung bình trong phút cuối, số thứ hai là trung bình trong năm phút cuối và thứ ba là trung bình trong 15 phút cuối. Tôi nghĩ rằng một câu trả lời nên được bỏ ở đây mà đề cập rằng.


0

Tải tức thì: số lượng tác vụ đang chạy hoặc đang chờ để chạy hoặc theo một cách khác, số lượng tác vụ sẵn sàng để chạy

Tải trung bình: số đo ở trên nhưng tính trung bình theo cấp số nhân với các mẫu trước đó của cùng số đo

Cả hai số này đều không giới hạn và thường lớn hơn nhiều so với N.

Để rõ ràng: số lượng tải trên Linux bao gồm các luồng, không có nghi ngờ gì về nó. Bạn có thể tạo ra một tải trọng lớn tùy ý với một quy trình duy nhất tạo ra nhiều luồng.

Thêm về điều này ở đây

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.