Làm thế nào có thể thiết lập ưu tiên IO đĩa tự động?


8

Nếu tôi sử dụng một số ứng dụng chuyên sâu IO (như Virtualbox, xác minh dữ liệu Steam hoặc thậm chí dd), hệ thống của tôi sẽ gần như không phản hồi. Mặc dù tất cả được bắt đầu với mức độ ưu tiên bình thường, chúng làm cho máy tính để bàn rất chậm chạp và trì hoãn rất nhiều việc khởi động các ứng dụng khác.

Tôi biết rằng tôi có thể sử dụng một cái gì đó như ioniceđể thay đổi mức độ ưu tiên thành không sử dụng, nhưng trong trường hợp Virtualbox, sinh ra nhiều quá trình, điều đó trở nên khó khăn.

Tôi có thể đưa ra một số loại gợi ý cho hệ thống, vì vậy khi khởi chạy một số ứng dụng cụ thể, chúng được bắt đầu với mức ưu tiên IO ít nhất?


bạn đã thử giải pháp của tôi? Nó có làm được việc không?
sm4rk0

Câu trả lời:


7

Lưu ý: Giải pháp này chỉ hoạt động với bộ lập lịch cfq, như được giải thích ở đây . Bạn nên kiểm tra cái nào được sử dụng bằng cách phát hành

cat /sys/block/sda/queue/scheduler

thay đổi nó nếu cần thiết.

Nếu tôi hiểu chính xác, bạn muốn một số ionicecài đặt được áp dụng mỗi khi bạn bắt đầu một lệnh. Bạn có thể làm theo cách này:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

Lệnh đầu tiên tạo một tệp VirtualBoxcó văn bản trích dẫn đơn như nội dung của nó. Điều này sẽ có đường dẫn đầy đủ đến chương trình, bởi vì nếu chỉ xác định VirtualBoxnó có thể hiểu nó là tệp chúng ta vừa tạo và tạo một "vòng lặp".

Lệnh thứ hai làm cho nó có thể thực thi được và thứ ba di chuyển tệp mới này trong một thư mục nằm trước thư mục bin "hệ thống" /usr/bin, vì vậy tệp mới của chúng tôi được thực thi thay vì ban đầu. Phần "$ @" chứa tất cả các đối số mà lệnh được gọi, vì vậy chúng được chuyển tiếp đến lệnh VirtualBox thực.

Theo câu trả lời ("có") cho câu hỏi Siêu người dùng này, trẻ em có xử lý các ưu tiên ionice từ cha mẹ không? Làm thế nào để bạn kiểm tra mức độ ưu tiên IO của một quy trình đang chạy? , nó là đủ cho ionicequá trình cha mẹ, như thế này:

ionice -c 3 VirtualBox

Từ ionice trang man , theo sau các giá trị lớp lập lịch I / O có sẵn:

  • 0 cho không
  • 1 cho thời gian thực
  • 2 cho nỗ lực tốt nhất
  • 3 cho không hoạt động (được sử dụng trong ví dụ ở trên)

Một số hoặc tên lớp có thể được sử dụng.

Ngoài ra, -n leveltùy chọn có thể áp dụng cho các lớp thời gian thực và nỗ lực tốt nhất, với 0-7 là dữ liệu hợp lệ (mức độ ưu tiên).


1
Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Lucio

@Lucio, cảm ơn vì một gợi ý, nhưng không phải là "nó là đủ cho ionicequy trình phụ huynh" sao?
sm4rk0

1
Vâng, bạn đúng. Nhưng, nếu bạn có thể , hãy dành một chút thời gian và sau đó thêm thông tin từ kinh nghiệm của bạn về quy trình này, tạo ra một câu trả lời tốt hơn :)
Lucio

@Lucio, tôi hy vọng nó đủ tốt bây giờ. Cảm ơn bạn đã nhấn mạnh (:
sm4rk0

1
FYI: chỉ ionicecó thể làm việc với cfqlịch trình! Để biết thêm chi tiết: unix.stackexchange.com/questions/136226/iêu
andras.tim

-1

Bạn có thể sử dụng lệnh 'renice' để ưu tiên các quy trình:

renice -<priority> <application's pid>

Nó cũng có thể là ổ đĩa của bạn bị quay quá nhiều, vì vậy khi bạn muốn khởi động ứng dụng như Virtualbox, nó phải quay lên trước khi bạn có thể bắt đầu làm việc (điều này có thể mất một lúc).


Cảm ơn vì tiền boa, nhưng tôi đang tìm cách để làm cho nó tự động và hệ thống rộng. Ví dụ: khi khởi chạy Virtualbox, hãy chạy nó với mức ưu tiên IO thấp nhất có thể ...
Salem

thường xuyên tốt đẹp và gia hạn không ưu tiên IO riêng biệt.
Jay _silly_evarlast_ Wren

Và điều này là tốt đẹp, không ionice. Một cái là cho CPU cái kia cho IO.
Dagelf
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.