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

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

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

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

2 ответа

Решение

Примечание. Это решение работает только с планировщиком 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 в качестве допустимых данных (уровней приоритета).

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

renice -<priority> <application's pid>

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

Другие вопросы по тегам