Изменение приоритета выполнения: команды nice и renice

Фактор "уступчивости" — это число, по которому ядро определяет свою политику в отношении процессов, конкурирующих за право доступа к центральному процессору. Чем выше фактор уступчивости, тем ниже приоритет процесса и наоборот, отсюда и название термина. Низкое или отрицательное значение означает использование высокого приоритета: процесс ведет себя не слишком уступчиво.

Диапазон допустимых значений фактора уступчивости зависит от используемой системы, и обычно он лежит в пределах от -20 до +19. В некоторых системах используется диапазон такого же размера, но со смещением в область неотрицательных чисел (как правило, от 0 до 39). Диапазоны допустимых значений фактора уступчивости, используемые в наших примерах систем, приведены ниже.

Несмотря на числовые различия, все системы обрабатывают значения фактора уступчивости практически одинаково. Если пользователь не предпринимает специальных мер, дочерний процесс наследует приоритет своего родительского процесса. Владелец процесса может увеличить фактор уступчивости, но не может уменьшить его, даже чтобы вернуться к стандартному значению. Это не позволяет процессам с низким приоритетом порождать высокоприоритетных потомков. Суперпользователь может устанавливать произвольные значения фактора уступчивости.

В настоящее время администраторам редко приходится определять приоритеты вручную. Когда операционные системы работали на маломощных компьютерах 70—80 гг., на производительность больше всего влияло то, какой процесс занимал основную часть времени центрального процессора. Сегодня, когда на рабочих столах стоят намного более быстродействующие компьютеры, системный планировщик, как правило, обслуживает все процессы весьма оперативно. Добавление классов планирования предоставляет разработчикам дополнительные средства управления в тех случаях, когда важна быстрая ответная реакция.

К сожалению, уровень производительности подсистемы ввода-вывода растет не так стремительно, как быстродействие центральных процессоров, поэтому жесткие диски стали основным узким местом в большинстве операционных систем. Фактор уступчивости никак не влияет на подсистемы управления памятью и вводом-выводом, поэтому даже низкоприоритетный процесс способен монополизировать эти ресурсы или захватить непропорционально большую их часть.

Фактор уступчивости можно установить при создании процесса. Это делается с помощью команды nice. Команда renice позволяет изменять приоритет выполняемого процесса. Первая из этих команд принимает в качестве аргумента строку запуска процесса, а вторая — идентификатор процесса либо имя пользователя.

Приведем примеры.

$ nice -п 5 ~/bin/longtask  // Понижаем приоритет   (увеличиваем

// фактор уступчивости)  на 5

$ sudo renice -5 8829          // Задаем фактор уступчивости равным -5

$ sudo renice 5 -u boggs   // Задаем фактор уступчивости процессов

// пользователя "boggs" равным 5

К сожалению, в системах по-разному реализован способ установки желаемого приоритета; более того, даже в рамках одной и той же системы не согласованы механизмы действия команд nice и renice. Одни команды требуют указания относительного значения фактора уступчивости, а другие — абсолютного. В одних командах нужно перед значением фактора уступчивости ставить дефис, в других требуется флаг -п, а третьи "довольствуются" просто числовым значением.

Существует также версия команды nice, встроенная в интерпретатор csh и ряд других популярных интерпретаторов (но не в bash). Если не указать полное имя команды, будет вызвана именно встроенная версия, а не системная. Это многих сбивает с толку, так как синтаксис команд различен: встроенная версия требует, чтобы изменение приоритета записывалось в формате +инкр или -декр, а системная версия ожидает флаг -п, за которым следует значение приращения8.

Элемент приор для среды, в которой вызывается команда nice или renice, означает абсолютное значение фактора уступчивости, а инкр — относительное. Везде, где указывается значение -инкр или -декр, для ввода отрицательных значений можно использовать два дефиса (например —10). Знаки "плюс" в команде nice обязательны только для интерпретатора команд; в остальных случаях они игнорируются.

Самый распространенный из высокоприоритетных процессов в современных системах — ntpd, демон тактовой синхронизации. Поскольку для него быстрый доступ к центральному процессору имеет очень большое значение, этому демону обычно назначается фактор уступчивости, на 2 позиций ниже стандартного уровня.

Если какой-либо процесс займет столько времени центрального процессора, что показатель средней загруженности системы достигнет отметки 65, то перед выполнением команд, необходимых для исследования этой проблемы, понадобится запустить с помощью команды nice высокоприоритетный интерпретатор. В противном случае выполнение даже простейших команд может быть затруднено.

 

Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.