Как установить приоритет дискового ввода-вывода автоматически?
Если я использую какое-нибудь интенсивное приложение ввода-вывода (например, 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, оно должно раскрутиться, прежде чем вы сможете начать работать (это может занять некоторое время).