Что точно предназначено “niced” и “un-niced” пользовательским процессом?

Я использовал "главную" команду, и я столкнулся с хорошим значением. Я знаю о приоритетах и как хорошее значение указывает на приоритет процесса. Но я, может казаться, не выясняю то, на что указывает термин "niced" или "un-niced".

2
задан 14 August 2016 в 15:13

1 ответ

Те термины просто относятся к тому, было ли изменено хорошее значение процесса по умолчанию. Процесс "niced" является тем, который был выполнен с nice команда (или чья правильность была изменена renice) и процесс "un-niced" является тем, который не был выполнен с nice. Хорошие значения по умолчанию для регулярных процессов (те, которые не были выполнены с nice command или чья правильность не была впоследствии изменена renice PID) 0. Так, "un-niced" процессы те, которые имеют хорошее значение 0, и процессы "niced" - те, которые имеют хорошее значение! = 0.

Хорошее значение не указывает на приоритет процесса, это указывает на правильность процесса. Вы видите оба значения в выводе top:

$ top -b -n1 | head
top - 15:23:10 up 20:59,  1 user,  load average: 1.41, 1.75, 1.88
Tasks: 222 total,   1 running, 221 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.2 us,  7.9 sy,  0.0 ni, 76.6 id,  0.6 wa,  0.0 hi,  0.6 si,  0.0 st
GiB Mem :    7.791 total,    3.082 free,    3.862 used,    0.846 buff/cache
GiB Swap:   16.000 total,   15.793 free,    0.207 used.    3.485 avail Mem 

  PID USER      PR  NI    VIRT    RES  %CPU %MEM     TIME+ S COMMAND
 1591 terdon    20   0 1605.1m 362.3m  18.8  4.5 285:46.34 S chromium
 1754 terdon    20   0  790.8m 184.5m  18.8  2.3 405:54.21 S chromium
 1186 terdon    20   0 1992.8m 459.6m  12.5  5.8 119:31.59 S cinnamon
                ^^  ^^
                 |   |---------> niceness
                 |-------------> priority

Если я теперь установил хорошее значение для одного из тех процессов хрома, Вы будете видеть различие:

$ renice 10 1591
1591 (process ID) old priority 0, new priority 10

$ top -b -n1 | head
top - 15:24:56 up 21:01,  1 user,  load average: 0.89, 1.48, 1.77
Tasks: 225 total,   1 running, 224 sleeping,   0 stopped,   0 zombie
%Cpu(s): 14.2 us,  7.9 sy,  0.0 ni, 76.6 id,  0.6 wa,  0.0 hi,  0.6 si,  0.0 st
GiB Mem :    7.791 total,    3.033 free,    3.908 used,    0.849 buff/cache
GiB Swap:   16.000 total,   15.793 free,    0.207 used.    3.439 avail Mem 

  PID USER      PR  NI    VIRT    RES  %CPU %MEM     TIME+ S COMMAND
 1591 terdon    30  10 1605.1m 362.6m  23.5  4.5 286:10.40 S chromium
 1754 terdon    20   0  790.8m 184.5m  18.8  2.3 405:54.21 S chromium
 1186 terdon    20   0 1992.8m 459.6m  12.5  5.8 119:31.59 S cinnamon

Хорошее значение процесса используется для определения его приоритета, но фактического приоритета процесса ( PR столбец), не то же как его правильность. Помещенный просто, значения правильности определяют, насколько "хороший" процесс к другим процессам Вашей системы. Если это будет очень хорошо (высокие хорошие значения), то это будет "вежливо" и позволит другим процессам иметь приоритет и использовать больше процессорного времени (другими словами, это будет иметь низкий приоритет). Если это не будет хорошо, то это попытается получить как можно больше процессорного времени для себя (таким образом, это будет иметь высокий приоритет).

Для создания вещей еще более странными приоритет оценивает диапазон от-20 (самое высокое) к +20 (самое низкое) и диапазон значений правильности от 19 (самая высокая правильность, таким образом, самый низкий приоритет) к-20 (самая низкая правильность, таким образом, самый высокий приоритет).

Я не знаю точный механизм, которым значение правильности преобразовывается в приоритет. Детали, кажется, зависят от версии ядра и определенной реализации (см. раздел "Notes" здесь). Однако как грубое приближение, можно думать о нем как:

Priority = DefaultPriority + Niceness

Для иллюстрирования я запущу 3 экземпляра названного сценария foo.sh (который просто выполняет a sleep команда) с различными значениями правильности:

foo.sh &                # default
nice -n 10 foo.sh
nice -n 15 foo.sh
sudo nice -n -10 foo.sh 

Последнее использование sudo потому что только корень может запустить процессы с отрицательного (высокого) приоритета. Теперь, давайте посмотрим, каковы их приоритеты:

$ top -b -n1 | grep foo.sh
21958 terdon    20   0   13.3m   2.7m   0.0  0.0   0:00.00 S foo.sh
22148 terdon    30  10   13.3m   2.7m   0.0  0.0   0:00.00 S foo.sh
22181 terdon    35  15   13.3m   2.7m   0.0  0.0   0:00.00 S foo.sh
23480 root      10 -10   13.3m   2.6m   0.0  0.0   0:00.00 S foo.sh

Как Вы видите выше, приоритет равен сумме значения правильности и 20, приоритет по умолчанию.

2
ответ дан 2 December 2019 в 03:45

Другие вопросы по тегам:

Похожие вопросы: