Как установить приоритет дискового ввода-вывода автоматически?

8

Если я использую какое-либо приложение с интенсивным вводом-выводом (например, Virtualbox, проверку данных Steam или даже dd), моя система перестает отвечать на запросы . Несмотря на то, что все они запускаются с обычным приоритетом, они делают рабочий стол очень вялым и сильно задерживают запуск других приложений.

Я знаю, что могу использовать что-то вроде ioniceизменения приоритета на простое, например, но в случае Virtualbox, который порождает много процессов, это становится трудным.

Могу ли я дать какой-то тип подсказок системе, чтобы при запуске некоторых конкретных приложений они запускались с наименьшим приоритетом ввода-вывода?

Salem
источник
ты пробовал мое решение? Это делает работу?
sm4rk0

Ответы:

7

Примечание. Это решение работает только с планировщиком cfq, как описано здесь . Вы должны проверить, какой из них используется путем выдачи

cat /sys/block/sda/queue/scheduler

и измените его при необходимости.

Если я правильно понял, вы хотите, чтобы некоторые ioniceнастройки применялись при каждом запуске команды. Вы можете сделать это следующим образом:

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

Первая команда создает файл VirtualBoxс текстом в одинарных кавычках. У этого должен быть полный путь к программе, потому что, если указать только один, VirtualBoxон может интерпретировать его как файл, который мы только что создали, и создать «цикл».

Вторая команда делает его исполняемым, а третья перемещает этот новый файл в папку, которая находится перед папкой «system» bin /usr/bin, так что наш новый файл исполняется вместо оригинала. Часть «$ @» содержит все аргументы, с которыми была вызвана команда, поэтому они перенаправляются в настоящую команду VirtualBox.

Согласно ответу («да») на этот вопрос суперпользователя. Наследственные процессы детей наследуют приоритеты своих родителей? Как вы проверяете приоритет ввода-вывода запущенного процесса? , должно быть достаточно для ioniceродительского процесса, например:

ionice -c 3 VirtualBox

На ionice странице man доступны следующие значения класса планирования ввода / вывода:

  • 0 ни для кого
  • 1 для реального времени
  • 2 за лучшее
  • 3 для простоя (используется в примере выше)

Можно использовать номер или имя класса.

Кроме того, -n levelопция применима для классов реального времени и классов с максимальным усилием, с 0-7 в качестве допустимых данных (уровней приоритета).

sm4rk0
источник
1
Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
Лусио
@Lucio, спасибо за подсказку, но не является ли это "достаточным для ioniceродительского процесса"?
sm4rk0
1
Да, ты прав. Но, если вы можете , найдите время, а затем добавьте больше информации из собственного опыта об этой процедуре, создавая лучший ответ :)
Lucio
@ Люцио, я надеюсь, что теперь это достаточно хорошо. Спасибо за настойчивость (:
sm4rk0
1
К вашему сведению: ioniceможет работать cfqтолько с планировщиком! Для более подробной информации: unix.stackexchange.com/questions/136226/…
andras.tim
-1

Вы можете использовать команду renice для определения приоритетов процессов:

renice -<priority> <application's pid>

Возможно, ваш диск слишком сильно крутится, поэтому, когда вы хотите запустить приложение, такое как Virtualbox, оно должно раскрутиться, прежде чем вы сможете начать работать (это может занять некоторое время).

Ashish
источник
Спасибо за совет, но я искал способ сделать это автоматически и в масштабе всей системы. Например: при запуске Virtualbox запускайте его с наименьшим возможным приоритетом ввода-вывода ...
Салем,
обычные nice и renice не расставляют приоритеты IO отдельно.
Джей _silly_evarlast_ Рен
И это хорошо, а не Ионис. Один для процессора, другой для ввода-вывода.
Dagelf