Вопрос или проблема
Какой из этих процессов имел более высокий приоритет:
$ ps -o pri,nice -p 1525010
PRI NI
39 -20
$ ps -o pri,nice -p 1530075
PRI NI
0 19
Первый (1525010
) вызвал setpriority(PRIO_PROCESS, 0, -20)
, второй (1530075
) вызвал setpriority(PRIO_PROCESS, 0, 99)
.
Согласно https://linux.die.net/man/2/setpriority: низкие приоритеты обеспечивают более благоприятное планирование, но -20 имеет приоритет 39, в то время как 99 имеет приоритет 0, который выше.
Правильный ли этот анализ?
Согласно https://linux.die.net/man/2/setpriority: низкие приоритеты обеспечивают более благоприятное планирование
Да, как видно из вашего вывода, setpriority(PRIO_PROCESS, 0, -20)
(наименьшее возможное значение) действительно привело к наивысшему приоритету в планировщике Linux.
Проблема в том, что термин “приоритет”, используемый в setpriority()
, на самом деле относится к значению “nice”, а не к “родному” приоритету планировщика Linux.
Версия страницы справки getpriority(2), которую вы нашли, dated from 2012 года (я не думаю, что linux.die.net обновлял свою базу данных с тех пор); если вы посмотрите на более актуальную версию здесь или здесь, вы найдете пояснение, что “[t]атрибут процесса, с которым работают эти системные вызовы, является тем же атрибутом (также известным как значение “nice”), с которым работает nice(2).”
(Смотрите также getpriority(3p), который является POSIX справочник тех же функций.)
Ответ или решение
Вопрос о приоритетах процессов в операционной системе Linux является важным аспектом управления ресурсами. Рассмотрим два процесса и их соответствующие приоритеты, чтобы определить, какой из них имеет более высокий приоритет.
Из предоставленных данных:
-
Процесс с PID 1525010:
- Вывод команды
ps
показал: PRI 39, NI -20. - Для этого процесса была вызвана функция
setpriority(PRIO_PROCESS, 0, -20)
.
- Вывод команды
-
Процесс с PID 1530075:
- Вывод команды
ps
показал: PRI 0, NI 19. - Для этого процесса была вызвана функция
setpriority(PRIO_PROCESS, 0, 99)
.
- Вывод команды
На основе этих данных необходимо провести анализ. В Linux низкие значения "nice" (например, -20) означают более "высокий" приоритет для планировщика, поскольку меньшие значения приоритета предоставляют более благоприятные условия для планирования процесса (отсюда и утверждение, что "меньшие приоритеты способствуют более благоприятному планированию"). Для проверки этого утверждения можно обратиться к мануалу по функции setpriority()
.
Разъяснение:
При вызове setpriority()
параметр, переданный в качестве "приоритета", в действительности является "значением нищеты" (nice value). Различие между "приоритетом" в контексте Linux и "значением нищеты" может ввести в заблуждение. Ваша путаница заключается в том, что терминология "приоритет" в данном случае не соответствует общей интуитивной интерпретации.
Сравнение:
- Процесс с PID 1525010 имеет "nice" значение -20, что соответствует менее вредному воздействию на планировщик, но результат вывода
ps
показывает, что ему присвоен приоритет 39. - Процесс с PID 1530075, несмотря на то, что его "nice" значение составляет 19 (что указывает на менее приоритетное состояние) и соответствует приоритету 0, на самом деле представляет более высокий приоритет в контексте планирования.
Вывод:
Таким образом, с точки зрения значений "nice", процесс с PID 1525010 имеет более благоприятные условия для планирования, но его действительный приоритет (39) менее предпочтителен, чем у процесса с PID 1530075 (приоритет 0). В итоге, процесс с PID 1530075 имеет более высокий приоритет в контексте планирования в системе Linux, несмотря на то, что его значение "nice" выше.
Для завершения, важно помнить, что понимание термина "приоритет" в Linux требует внимания к различиям между значениями "nice" и "приоритетом" как таковым. Это знание может быть критически важным для администраторов систем и разработчиков, работающих с производительностью приложений и управлением ресурсами в среде Linux.