Lệnh Unix đẹp nhất có thể là gì?


9

Đối với một bài kiểm tra điểm chuẩn nhanh, làm thế nào tốt đẹp và ionice có thể được kết hợp để đạt hiệu quả tối đa, tức là cho một lệnh sử dụng ít tài nguyên nhất có thể (mà không phải chạy hoàn toàn)?

(Tôi nghĩ đó là một cái gì đó giống như 'đẹp -n 19 ionice -c 2 [lệnh], nhưng không chắc chắn về "-n" của ionice (classdata param), trang người đàn ông khó hiểu về mức độ liên quan của nó.)


3
cộng 1 cho tiêu đề câu hỏi thông minh, nhưng nói chung nó cũng là một câu hỏi hay.
Lizardx

Câu trả lời:


10

Lệnh đầy đủ bạn muốn là:

chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]

Các chrtlệnh ngay từ đầu sẽ chuyển sang điều cần lớp lập kế hoạch lô, tương đương với thêm 0,5 đến giá trị tốt đẹp. Tùy chọn -n cho ionice là một ưu tiên đơn giản cho các tùy chọn thời gian thực ( -c 1) và nỗ lực tốt nhất ( -c 2), với các giá trị thấp hơn là mức ưu tiên cao hơn giống như các giá trị đẹp (nhưng trong phạm vi 0-7). Tuy nhiên, lệnh ionice không thực sự cần thiết, vì lớp lập lịch I / O và mức độ ưu tiên theo mặc định được lấy từ các tham số lập lịch CPU và nice -n 19ngụ ý ionice -c 2 -n 7.

Tuy nhiên, bạn có thể có được mức sử dụng tài nguyên tối thiểu tuyệt đối bằng cách đặt cả hai lớp lập lịch CPU và I / O ở chế độ chờ. Trong cả hai trường hợp, bộ lập lịch 'nhàn rỗi' không thực sự là bộ lập lịch nhàn rỗi và bạn vẫn có thể sử dụng tài nguyên, chỉ là mọi thứ sẽ có mức độ ưu tiên cao hơn.

Đối với lớp lập lịch CPU, điều này cũng sử dụng chrtlệnh, mặc dù không cần nice(ưu tiên phải được đặt thành 0trong lớp lập lịch nhàn rỗi) và trông như thế này:

chrt -i 0 {command or PID}

Các nicelệnh trên gương Linux phiên bản SVR4, có nghĩa là nó không thể thay đổi lớp lập kế hoạch, chỉ có giá trị tốt đẹp (mà cũng cư xử khác nhau trên Linux hơn cổ điển UNIX, nhưng đó là một chút OT). Vì các lớp lập lịch thay thế ban đầu là thời gian thực POSIX.1E SCHED_RRSCHED_FIFO, lệnh để thiết lập các lớp lập lịch cuối cùng đã được gọi chrt. Các -iquy định cụ thể tùy chọn để sử dụng các SCHED_IDLElớp lịch

Đối với lớp lập lịch I / O, bạn sử dụng ionice. Lệnh chính xác trông như thế này:

ionice -c 3 {command or PID}

Các -ctùy chọn quy định cụ thể những gì lịch lớp để sử dụng, và 3 là số cho lớp nhàn rỗi. Lưu ý rằng tùy thuộc vào bộ lập lịch I / O khối nào đang được sử dụng, điều này có thể không thực sự ảnh hưởng đến bất cứ điều gì. Cụ thể, bộ lập lịch noopI / O hoàn toàn không hỗ trợ các lớp ưu tiên hoặc lên lịch, và tôi khá chắc chắn rằng bộ lập deadlinelịch (cả kế thừa và cả blk-mq) đều không.

Nếu bạn muốn thực hiện việc này theo chương trình, cho chương trình của riêng bạn hoặc điều chỉnh mọi thứ cho các quy trình khác, hãy kiểm tra các trang hướng dẫn cho các cuộc gọi sched_setschedulerioprio_sethệ thống (mặc dù cả hai đều đáng đọc nếu bạn chỉ muốn có thêm nền tảng).


0

Giả sử bạn không muốn lệnh đó hoàn toàn chờ đợi người khác hoàn thành, do đó, không có khả năng bị chết đói tài nguyên , dòng sẽ là:

nice -n19 [command]

ionice sẽ được đặt theo tỷ lệ trên các nhân Linux hiện đại.

Nhân tiện, chrt -b0không có gì để làm với sự độc đáo, nhưng tần suất CPU sẽ nhảy từ quá trình này sang quá trình khác. Dòng này làm cho thời gian đó lâu hơn để các chương trình hàng loạt sử dụng bộ nhớ cache tốt hơn, nhưng đối với các lệnh khác thì nó vô dụng. Như đã thấy ở đây .

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.