Команда 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.