Sử dụng và hiểu các tùy chọn liên quan đến lập lịch hệ thống trong ngữ cảnh máy tính để bàn


14

Trong các tệp dịch vụ systemd, người ta có thể đặt các tùy chọn liên quan lên lịch sau (từ systemd.exectrang man , sửa tôi nếu tôi sai):

Nice Đặt mức độ đẹp mặc định (ưu tiên lập lịch) cho các quy trình được thực hiện. Lấy một số nguyên trong khoảng từ -20 (mức ưu tiên cao nhất) và 19 (mức ưu tiên thấp nhất). Xem setp Warriority (2) để biết chi tiết.

Đó là mức độ tốt đẹp quen thuộc. Có vẻ như hiệu ứng của nó bị 'lật đổ' phần nào do tính năng 'nhóm tự động' của các nhân linux gần đây. Vì vậy, các tùy chọn bên dưới có thể là những gì tôi thực sự muốn đặt để giữ cho các quy trình hoạt động tốt cho trải nghiệm máy tính để bàn của tôi.

CPUSchedulingPolicy Đặt chính sách lập lịch CPU cho các quy trình được thực hiện. Mất một trong những cái khác, lô, nhàn rỗi, fifo hoặc rr. Xem calendar_setscheduler (2) để biết chi tiết.

CPUSchedulingP Warriority Đặt mức độ ưu tiên lập lịch của CPU cho các quy trình được thực hiện. Phạm vi ưu tiên khả dụng tùy thuộc vào chính sách lập lịch CPU đã chọn (xem bên trên). Đối với các chính sách lập lịch thời gian thực, có thể sử dụng số nguyên từ 1 (mức ưu tiên thấp nhất) và 99 (mức ưu tiên cao nhất). Xem calendar_setscheduler (2) để biết chi tiết.

CPUSchedulingResetOnFork Đưa ra một đối số boolean. Nếu đúng, các ưu tiên và chính sách lập lịch trình CPU nâng cao sẽ được đặt lại khi quá trình thực thi rẽ nhánh và do đó không thể rò rỉ vào các tiến trình con. Xem calendar_setscheduler (2) để biết chi tiết. Mặc định là sai.

Tôi hiểu lựa chọn cuối cùng. Tôi tập hợp từ lời giải thích của hai người đầu tiên rằng tôi có thể chọn một chính sách lập lịch và sau đó, được ưu tiên chính sách đó. Nó không hoàn toàn rõ ràng với tôi những gì tôi nên chọn cho loại nhiệm vụ. Ví dụ: có an toàn không khi chọn 'không hoạt động' cho các tác vụ sao lưu (tương đối nhiều CPU, vì trùng lặp), hoặc một cách khác phù hợp hơn?

Nói chung, có được một cái nhìn tổng quan dễ hiểu về từng chính sách, với mỗi ưu tiên và sự phù hợp của nó cho các mục đích cụ thể là điều tôi đang tìm kiếm. Ngoài ra sự tương tác với mức độ tốt đẹp là quan tâm.

Bên cạnh lập lịch CPU, có lập lịch IO. Tôi đoán điều này tương ứng với ionice(sửa tôi nếu tôi sai).

IOSchedulingClass Đặt lớp lập lịch I / O cho các quy trình được thực hiện. Lấy một số nguyên từ 0 đến 3 hoặc một trong các chuỗi không, thời gian thực, nỗ lực tốt nhất hoặc không hoạt động. Xem ioprio_set (2) để biết chi tiết.

IOSchedulingP Warriority Đặt mức độ ưu tiên lập lịch I / O cho các quy trình được thực hiện. Lấy một số nguyên từ 0 (ưu tiên cao nhất) và 7 (ưu tiên thấp nhất). Các ưu tiên khả dụng tùy thuộc vào lớp lập lịch I / O đã chọn (xem bên trên). Xem ioprio_set (2) để biết chi tiết.

Ở đây chúng ta thấy cấu trúc tương tự như với lập lịch CPU. Tôi cũng đang tìm kiếm loại thông tin tương tự.

Đối với tất cả các tùy chọn 'Lập lịch', các trang được đề cập đến không đủ rõ ràng đối với tôi, chủ yếu là dịch mọi thứ sang quan điểm của người dùng máy tính để bàn hơi nghiêng về mặt kỹ thuật.


2
Vấn đề hiệu suất cụ thể nào bạn đang cố gắng giải quyết? Là một cái gì đó chạy quá chậm hoặc có quá nhiều độ trễ cho bạn? Tôi sử dụng Ubuntu 16.04 với systemd như một máy tính để bàn, với các bản sao lưu đang chạy trong nền và không có vấn đề về hiệu suất liên quan đến mức độ ưu tiên tương đối.
Mark Stosberg

@MarkStosberg Câu hỏi được đặt ra bởi các công việc sao lưu nền đang chạy trong khi các tác vụ tính toán tiền cảnh trên hệ thống lõi kép khiến giao diện không phản hồi. Sau đó tôi đã thêm một tùy chọn Nice vào tập lệnh sao lưu và đồng thời thấy các tùy chọn khác. Chúng có thể liên quan đến vấn đề gây ra sao lưu đó hoặc các vấn đề khác mà tôi gặp phải trong tương lai. Vì vậy, tôi muốn tìm hiểu thêm về các lựa chọn khác, mà không liên quan đến một vấn đề cụ thể.
bình đẳng

Mỗi bit tài liệu tham khảo một trang người đàn ông nơi bạn có thể tìm thêm tài liệu nếu bạn quan tâm. Việc đọc các trang man được tham chiếu cho ioprio_set (2) và calendar_setscheduler (2) có giúp trả lời câu hỏi của bạn không?
Mark Stosberg

@MarkStosberg Không, như đã nêu trong câu hỏi của tôi. Các trang nam không tệ, nhưng không nhất thiết phải giúp tôi quyết định phải làm gì (điều chỉnh các giá trị tốt đẹp vẫn là điều an toàn / đúng đắn phải làm hiện nay?). trả lời từ những người dùng có kinh nghiệm về các tùy chọn này có thể đưa ra các ví dụ cụ thể và biết tác động của nhóm tự động trong các trường hợp cụ thể như vậy là điều tôi đang hy vọng.
bình đẳng

Tôi chỉ vấp phải những chỉ thị này trong cùng một bối cảnh (sao lưu nền gây ra độ trễ). Tôi thấy rằng lịch trình của người đàn ông (7) có một mô tả toàn diện hơn nhiều về hai trang người đàn ông khác. (Nó cũng đề cập khi nicegiá trị áp dụng).
Wisperwind

Câu trả lời:


5

CPUSchedending {Chính sách | Ưu tiên}

Liên kết cho bạn biết rằng CPUSchedulingPrioritychỉ nên được đặt cho fifohoặc rr("thời gian thực"). Bạn không muốn buộc lập lịch thời gian thực cho các dịch vụ.

CPUSchedulingPolicy=other là mặc định

Đó là lá batchidle. Sự khác biệt giữa chúng chỉ có liên quan nếu bạn có nhiều tác vụ ưu tiên nhàn rỗi tiêu thụ CPU cùng một lúc. Về lý thuyết batchcho thông lượng cao hơn (đổi lại độ trễ dài hơn). Nhưng nó không phải là một chiến thắng lớn, vì vậy nó không thực sự phù hợp trong trường hợp này.

idlenghĩa đen là chết đói nếu bất cứ điều gì khác muốn CPU. Mức độ ưu tiên của CPU khá ít đáng kể so với trước đây, đối với các hệ thống UNIX cũ có lõi đơn. Tôi sẽ hạnh phúc hơn khi bắt đầu nice, ví dụ như cấp 10 hoặc 14 đẹp, trước khi dùng đến idle. Xem phần tiếp theo.

Tuy nhiên hầu hết các máy tính để bàn tương đối nhàn rỗi hầu hết thời gian. Và khi bạn có một con lợn CPU sẽ làm trống nhiệm vụ nền, thì con lợn chỉ sử dụng một trong các CPU của bạn. Với ý nghĩ đó, tôi sẽ không cảm thấy quá mạo hiểm khi sử dụng idletrong bối cảnh của một máy tính để bàn hoặc máy tính xách tay trung bình. Trừ khi nó có CPU Atom / Celeron / ARM được xếp hạng ở mức hoặc dưới khoảng 15 watt ; sau đó tôi muốn xem xét mọi thứ cẩn thận hơn một chút.

Mức độ đẹp có bị 'lật đổ' bởi tính năng 'nhóm tự động' không?

Vâng.

Autogrouping là một chút lạ. Tác giả của systemdkhông thích heuristic, ngay cả đối với máy tính để bàn. Nếu bạn muốn kiểm tra việc vô hiệu hóa tự động phân nhóm, bạn có thể đặt sysctl kernel.sched_autogroup_enabled thành 0. Tôi đoán tốt nhất nên kiểm tra bằng cách đặt sysctl trong cấu hình vĩnh viễn và khởi động lại, để đảm bảo bạn thoát khỏi tất cả các nhóm tự động.

Sau đó, bạn sẽ có thể mức độ tốt đẹp cho các dịch vụ của bạn mà không có bất kỳ vấn đề. Ít nhất là trong các phiên bản hiện tại của systemd - xem phần tiếp theo.

Ví dụ, mức 10 đẹp sẽ giảm trọng lượng mỗi luồng trong bộ lập lịch CPU Linux, xuống còn khoảng 10%. Đẹp cấp 14 là dưới 5%. (Liên kết: công thức đầy đủ )

Phụ lục: mức độ đẹp 'bị lật đổ' bởi các nhóm systemd?

DefaultCPUAccounting= Cài đặt hiện tại mặc định tắt, trừ khi có thể bật mà không bật điều khiển CPU trên cơ sở mỗi dịch vụ. Vì vậy, nó sẽ ổn thôi. Bạn có thể kiểm tra điều này trong tài liệu hiện tại của bạn:man systemd-system.conf

Xin lưu ý rằng điều khiển CPU trên mỗi dịch vụ cũng sẽ được bật khi bất kỳ dịch vụ nào đặt CPUAccounting / CPU Weight / StartupCPU Weight / CPUShares / StartupCPUShares.

Các trích xuất blog sau đây đã hết hạn (nhưng vẫn trực tuyến). Hành vi mặc định đã thay đổi và tài liệu tham khảo đã được cập nhật tương ứng.

Là một mặc định đẹp, nếu bộ điều khiển cpu được kích hoạt trong kernel, systemd sẽ tạo một nhóm cho mỗi dịch vụ khi khởi động nó. Nếu không có bất kỳ cấu hình nào nữa, điều này đã có một hiệu ứng đẹp mắt: trên một hệ thống systemd, mọi dịch vụ hệ thống sẽ nhận được một lượng CPU chẵn, bất kể có bao nhiêu tiến trình. Hay nói cách khác: trên máy chủ web của bạn, MySQL sẽ nhận được số lượng CPU tương đương với Apache, ngay cả khi cái sau chứa 1000 tập lệnh CGI, nhưng trước đây chỉ có một vài tác vụ worker. (Hành vi này có thể được tắt, xem DefaultControllers = in /etc/systemd/system.conf.)

Trên đầu mặc định này, có thể định cấu hình rõ ràng CPU chia sẻ dịch vụ với cài đặt CPUShares =. Giá trị mặc định là 1024, nếu bạn tăng số lượng này, bạn sẽ chỉ định nhiều CPU hơn cho một dịch vụ so với giá trị chưa được thay đổi ở 1024, nếu bạn giảm nó, sẽ ít hơn.

http://0pulum.de/blog/projects/resource.html


-3

Lời khuyên điều chỉnh hiệu suất cổ điển là "Không tối ưu hóa, điểm chuẩn".

Thay vì quan tâm đến lời khuyên chung, hãy bắt đầu với một trường hợp cụ thể mà bạn quan tâm về việc cải thiện và đã được điểm chuẩn để có mối quan tâm về hiệu suất cụ thể . Hãy để dữ liệu cho phép bạn vào đúng lệnh để điều chỉnh. Với dữ liệu, có thể rõ ràng nếu quy trình của bạn bị ưu tiên xấu, đang ăn cắp CPU hoặc có vấn đề khác.

Máy tính để bàn hiện đại thường rất nhanh để làm việc mà không cần điều chỉnh gì cả.


3
Xin lỗi, nhưng đây không phải là một câu trả lời cho câu hỏi. Toàn bộ vấn đề là việc thử mọi thứ trở nên khó khăn nếu một người không thực sự hiểu được các hiệu ứng. Và câu hỏi này đã được nhắc nhở bởi (nhưng không phải là về vấn đề hiệu suất!) Trên một máy tính để bàn hiện đại.
Equaeghe

1
Chỉ mất vài phút để thử bất kỳ tùy chọn nào. Nếu bạn có điểm chuẩn cơ bản và mục tiêu hiệu suất, bạn có thể dễ dàng kiểm tra xem tùy chọn bạn đã thử có đưa bạn đi theo hướng bạn muốn hay không.
Mark Stosberg

@equaeghe, bấm nút ngẫu nhiên mà không biết những gì họ sẽ không giải quyết vấn đề.
vonbrand

Lời khuyên phong phú, nhưng không phải là một câu trả lời. Điều này nên là một bình luận. Đôi khi cảm giác ruột của "đây là waaay quá chậm" là đủ điểm chuẩn để nhắc nhở hành động. Ví dụ: sử dụng systemd-analyzevới blameplottôi đã có thể giảm thời gian khởi động trên một RPi cũ hơn một phút. Chắc chắn, khi phân tích vấn đề thì cần phải đo thay vì bắt đầu "tối ưu hóa" sớm.
0xC0000022L
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.