2010-08-05 29 views
11

Trong Make cờ này tồn tại:Làm thế nào để xác định một giá trị tốt cho - tải trung bình bằng cách sử dụng gnu Make?

-l [tải], --load trung bình [= tải] Chỉ định rằng không có việc làm mới (lệnh) nên được bắt đầu nếu có những người khác công việc chạy và tải trung bình ít nhất là tải (một số dấu phẩy động). Không có đối số, loại bỏ giới hạn tải trước đó.

Bạn có chiến lược tốt để sử dụng giá trị nào cho giới hạn tải không? Nó có vẻ khác nhau rất nhiều giữa các máy của tôi.

Trả lời

3

Tải có thể chấp nhận phụ thuộc vào số lượng lõi CPU. Nếu có một lõi, hơn tải trung bình hơn 1 là quá tải. Nếu có bốn lõi, hơn tải trung bình của hơn bốn là quá tải.

Mọi người thường chỉ định số lượng lõi bằng cách sử dụng chuyển đổi -j.

Xem một số con số thực nghiệm ở đây: https://stackoverflow.com/a/17749621/412080

+2

thực nghiệm mặc dù tôi nhận thấy trên một máy trong khi thời gian sử dụng khác nhau của -j tôi có các biên dịch nhanh nhất bằng cách sử dụng -j8 trên một máy 4 lõi. – Zitrax

+2

Tôi có kinh nghiệm tương tự. Có lẽ vì có một số giai đoạn biên dịch I/O-ràng buộc, do đó khi một quá trình biên dịch chặn cho I/O, một trình biên dịch khác có thể sử dụng thời gian đó để biên dịch. –

3

Tôi khuyên bạn nên chống lại bằng cách sử dụng tùy chọn -l.

Về nguyên tắc, -l có vẻ vượt trội so với -j. -j cho biết, hãy bắt đầu nhiều công việc này. -l nói, đảm bảo rằng nhiều công việc đang chạy. Thông thường, những thứ này gần như giống nhau, nhưng khi bạn có các công việc ràng buộc I/O là những điều kỳ quặc khác, thì -l sẽ tốt hơn.

Điều đó nói rằng, khái niệm trung bình tải là một chút không rõ ràng. Nó nhất thiết là một mẫu của những gì diễn ra trên hệ thống. Vì vậy, nếu bạn chạy make -j -l N (đối với một số N) và bạn có một makefile được viết tốt, sau đó thực hiện ngay lập tức sẽ bắt đầu một số lượng lớn công việc và hết bộ mô tả tệp hoặc bộ nhớ trước khi tải mẫu hệ thống đầu tiên. Ngoài ra, kế toán của trung bình tải khác nhau trên các hệ điều hành, và một số người mơ hồ không có nó ở tất cả.

Trong thực tế, bạn cũng sẽ bị tắt bằng cách sử dụng -j và sẽ ít bị đau đầu hơn. Để có được hiệu suất cao hơn trong quá trình xây dựng, hãy điều chỉnh các tệp makefiles của bạn, chơi với các tùy chọn trình biên dịch và sử dụng ccache hoặc tương tự.

(tôi nghi ngờ lý do ban đầu cho các tùy chọn -l bắt nguồn từ một thời điểm khi nhiều bộ xử lý rất hiếm và I/O là rất chậm.)

+1

Bạn đã thực sự thử điều này gần đây chưa? GNU tạo ra 3,81 (được phát hành năm 2006) GNU thực hiện một thuật toán để điều chỉnh ý tưởng của nó về trung bình tải hệ thống dựa trên số lượng công việc được gọi bằng cách thực hiện trong giây cuối cùng. Đây không phải là lý tưởng của khóa học vì nó chỉ là một đoán, nhưng nó nên giữ 100 của công việc từ được gọi ngay lập tức khi bắt đầu. – MadScientist

+1

Tôi không biết nó thông minh hơn bao nhiêu trong nội bộ, nhưng hành vi mà nó sẽ bắt đầu có rất nhiều công việc ngay lập tức vẫn dễ tái sản xuất. –

+1

Thật không may, trong kinh nghiệm của tôi bạn cũng cần -l. Vấn đề là bạn thường sẽ có nhiều hệ thống tạo phức tạp mà không nhất thiết phải biết về nhau, vì vậy cơ chế chia sẻ số lượng công việc không phải lúc nào cũng hữu ích.(Hãy thử những thứ như xây dựng bao gồm openssl, dbus, curl và một tá thư viện khác dành cho Android và iOS; bạn sẽ khởi chạy các bản dựng không thực sự là một phần của hệ thống xây dựng của riêng bạn.) –

Các vấn đề liên quan