Команда ionice

Команда ionice предназначена для вызова одноименной утилиты, осуществляющей вывод информации и изменение класса планирования и приоритета ввода/вывода процесса. Если говорить максимально просто, данная команда позволяет управлять временем, в течение которого процесс будет работать с диском. Она чем-то похожа на команду nice, которая предназначена для управления временем центрального процессора, выделяемым процессу.

Базовый синтаксис команды выглядит следующим образом:

$ ionice [параметры] [команда]

Утилита позволяет изменить класс планирования и приоритет ввода/вывода как для запускаемого с помощью нее, так и для уже существующего процесса. Она поддерживает параметр -c, позволяющий указать класс планирования ввода/вывода, параметр -n, позволяющий указать приоритет ввода/вывода, а также параметр -p, позволяющий указать идентификатор уже существующего процесса. В случае использования параметра -p, разумеется, утилите не должна передаваться команда. Что касается классов планирования и приоритетов ввода/вывода, то они перечислены в таблице ниже.

Название Идентификатор Допустимые приоритеты Описание
Idle 3 Не поддерживается Процесс будет работать с диском только тогда, когда другие процессы не будут работать с ним в течение определенного времени. Он не будет оказывать почти никакого негативного влияния на производительность системы.
Best effort 2 0 - 7
(0 - максимальный)
Стандартный класс планирования операций ввода/вывода. Приоритет ввода/вывода процесса по умолчанию приравнивается к его приоритету использования ЦП. Процессы с одинаковыми приоритетами получают равные кванты времени для осуществления доступа к диску.
Real time 1 0 - 7
(0 - максимальный)
Процессы с классом планирования ввода/вывода реального времени получают доступ к диску в первую очередь вне зависимости от того, что происходит с системой. По этой причине данный класс планирования должен использоваться с осторожностью, так как использующие его процессы могут оказывать влияние на другие процессы. Для использования данного класса планирования ввода/вывода необходимы привилегии суперпользователя.

Изменение классов планирования ввода/вывода и приоритетов ввода/вывода процессов реализовано в рамках планировщика ввода/вывода CFQ, используемого в данное время во всех популярных дистрибутивах.

Примеры использования

Запуск процесса с заданным классом планирования и приоритетом ввода/вывода

Для того, чтобы запустить процесс с заданным классом планирования и приоритетом ввода/вывода следует использовать параметр -c для задания класса планирования ввода/вывода, параметр -n для задания приоритета ввода/вывода (в том случае, если выбранный класс поддерживает приоритеты), а также задать команду, в результате исполнения которой данный процесс будет создан. Например, для того, чтобы снизить влияние интенсивно использующего диск процесса на производительность системы, можно воспользоваться аналогичной командой:

$ ionice -c 3 cp ./videoplayback.mp4 ./new.mp4

Для того, чтобы использовать стандартный класс планирования ввода/вывода и изменить приоритет, следует использовать аналогичную команду:

$ ionice -c 2 -n 7 cp ./videoplayback.mp4 ./new.mp4

Если же нужен класс планирования реального времени, может использоваться аналогичная команда:

$ sudo ionice -c 1 -n 7 cp ./videoplayback.mp4 ./new.mp4

Получение информации о классе планирования и приоритете ввода/вывода процесса

Для того, чтобы получить информацию о классе планирования и приоритете ввода/вывода существующего процесса достаточно указать идентификатор этого процесса после параметра -p и не использовать параметры -c и -n:

$ ionice -p 21420
none: prio 4

В данном случае none соответствует классу Best effort.

Изменение класса планирования и приоритета ввода/вывода существующего процесса

Для изменения класса планирования и приоритета ввода/вывода существующего процесса следует указать идентификатор этого процесса после параметра -p, класс планирования ввода/вывода после параметра -c и приоритет ввода/вывода после параметра -n:

$ ionice -c 3 -p 21420
alex@layla:~$ ionice -p 21420
idle

Очевидно, что после манипуляций в качестве класса планирования ввода/вывода стал использоваться класс idle.