Приоритеты

Вопросы программного кода и архитектуры Linux

Модератор: Olej

annika
Интересующийся
Сообщения: 2
Зарегистрирован: 03 окт 2013, 12:55
Контактная информация:

Приоритеты

Непрочитанное сообщение annika » 03 окт 2013, 13:27

Подскажите, пожалуйста, почему чем ниже nice, тем выше приоритет процесса?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Приоритеты

Непрочитанное сообщение Olej » 04 окт 2013, 00:30

annika писал(а):Подскажите, пожалуйста, почему чем ниже nice, тем выше приоритет процесса?
Потому, что это чисто условное число - приоритет, и можно считать по договорённости, что поток более приоритетный, если число это меньше, или число это больше (именно поток, потому что в многопоточной системе приоритеты относятся к потокам, а не к процессам).

В ОС QNX, например, договорились, что:
- минимальным приоритетом будут обладать потоки с приоритетом 1 (приоритет 0 "забронирован" для пустого потока idle) ...
- наивысший приоритет будет 63 в версии до QNX 6.3.2, и будет 255 для версий 6.4, 6.5.

В Linux договорились считать, что нормальный приоритет -19 соответствует самым приоритетным потокам, а приоритет +19 - самым низкоприоритетным.
Но в Linux есть ещё и приоритет реального времени, и если он не нулевой (что используется очень редко), то никакой поток нормального приоритета никогда не вытеснит такой поток реального времени, пока тот сам не заблокируется.

Поэтому и запуск процесса xxx делается на самом малом приоритете:

Код: Выделить всё

$ nice -n19 xxx
А запуск на повышенном приоритете, например, так:

Код: Выделить всё

# nice -n-10 xxx
Но сделать такой запуск на повышенном приоритете можно только с правами root.

P.S. Из-за мудрёного динамического вычисления приоритета в ходе выполнения + алгоритма диспетчирования не зависящего от числа потоков/процессов (в ядре начиная с 2.6), в Linux особенности поведения процесса от повышения или понижения приоритета довольно трудно прогнозировать.

annika
Интересующийся
Сообщения: 2
Зарегистрирован: 03 окт 2013, 12:55
Контактная информация:

Re: Приоритеты

Непрочитанное сообщение annika » 04 окт 2013, 14:03

Спасибо!
я вот нашла еще такое обоснование:
Команда nice запускает программу с изменённым приоритетом для планироващика задач. Слово «nice» в английском языке обозначает, в частности, «вежливый». По этимологии этой команды процесс с большим значением nice — более вежлив к другим процессам, позволяя им использовать больше процессорного времени, поскольку он сам имеет меньший приоритет (и, следовательно, большее «значение вежливости» — niceness value).
http://habrahabr.ru/post/106381/
Уместно ли оно?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Приоритеты

Непрочитанное сообщение Olej » 04 окт 2013, 20:06

annika писал(а): Команда nice запускает программу с изменённым приоритетом для планироващика задач. Слово «nice» в английском языке обозначает, в частности, «вежливый». По этимологии этой команды процесс с большим значением nice — более вежлив к другим процессам, позволяя им использовать больше процессорного времени, поскольку он сам имеет меньший приоритет (и, следовательно, большее «значение вежливости» — niceness value).
http://habrahabr.ru/post/106381/
Уместно ли оно?
Так оно и есть...
У nice ещё перевод - "уступчивость" ... что уж совсем объясняет выбор названия команды.

Только это к выбору численных значений приоритетов (что выше, а что ниже) не имеет никакого отношения ;-)

А если кого заинтересует управление приоритетами (утилита nice - это только консольный интерфейс к нему), то см. /usr/include/sched.h :

Код: Выделить всё

/* Set scheduling parameters for a process.  */
extern int sched_setparam (__pid_t __pid, __const struct sched_param *__param)
     __THROW;
Где struct sched_param и есть всего лишь ;-) приоритет (/usr/include/bits/sched.h) :

Код: Выделить всё

/* The official definition.  */
struct sched_param
  {
    int __sched_priority;
  };

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя