Original article: http://kbase.redhat.com/faq/docs/DOC-16649.pdf
Translated by Ivan Pesin, May 2009
Система: Red Hat Enterprise Linux 5 и новее
Введение:
Приоритет и класс ввода/вывода процесса могут быть изменены командой ionice
. Linux поддерживает три класса ввода/вывода:
- Idle: процесс, имеющий класс idle, получает возможность работать с диском только если никакая другая программа не выполняет операций ввода/вывода в течении некоторого периода времени.
- Best effort: этот класс используется всеми процессами по-умолчанию, если не был задан определённый класс ввода/вывода.
- Real time: процессы, работающие в классе реального времени, получают доступ к диску в перую очередь, вне зависимости от того, что еще происходит в системе.
По-умолчанию, процессы работают в классе Best Effort с приоритетом равным нулю, т.е. с наивысшим приоритетом в этом классе. Наилучший вариант применения ionice
— улучшение производительности в случаях, когда нужно одновременно выполнять два класса задач: такие, которые не требуют много ввода/вывода, но чувствительны к скорости выполнения операций, и такие, которые наоборот нетребовательны к скорости отклика, но выполняют много операций ввода/вывода.
Решение:
Для повышения приоритета ввода/вывода процесса используйте следующую команду:
# ionice -c1 -n0 -p<PID>
Где:
-c1
указывает класс реального времени-n0
задаёт наивысший приоритет-p <PID>
указывает идентификатор процесса
Понизить приоритет ввода/вывода процесса можно командой:
# ionice -c2 -n4 -p<PID>
Где:
-c2
указывает класс best-effort-n4
задаёт приоритет 4
Чтобы узнать текущий приоритет ввода/вывода процесса, выполните команду:
# ionice <PID>
Например:
# ionice 9709
realtime: prio 7
За подробной информацией о ключах команды ionice
, обращайтесь к руководству, которое доступно по команде man ionice
.
Применения
Если текущему командному интерпретатору задать класс idle, то все команды, которые из него вызываются, будут тоже выполняться в классе idle. Чтобы это сделать, нам понадобится переменная $$ интерпретаторов bash
и sh
.
Например:
# echo $$
29033
Этот вывод означает, что PID вашего текущего интерпретатора равен 29033
. Если вы хотите назначить назначить ему класс idle, выполните команду:
# ionice -c3 -p$$
Теперь всё, что вы делаете в этом интерпретаторе, выполняется в классе idle.
Другим специальным применением ionice
является приоритезация системных бекапов. Вы можете изменить приоритет ввода/вывода архивирующего программного обеспечения так, чтобы оно не мешало другим приложениям в системе.
Примечание: приоритеты и классы ввода/вывода поддерживаются начиная с версии ядра 2.6.13, при использовании планировщика ввода/вывода CFQ. В Red Hat Enterprise Linux 5 для того, чтобы узнать какой планировщик используется в данный момент, используйте команду cat /sys/block/[sh]d[a-z]*/queue/scheduler
. Текущий планировщик будет выделен квадратными скобками..
Например, следующий вывод показывает, что сейчас используется планировщик CFQ:
$ cat /sys/block/[sh]d[a-z]*/queue/scheduler
noop anticipatory deadline [cfq]