Почему мои "приятные" уровни не отражаются в использовании CPU? [duplicate]

На этот вопрос уже есть ответ здесь:

Дана виртуальная машина с 1 процессором. Я запускаю две одинаковые задачи с интенсивным процессором в двух терминалах:

/usr/bin/nice -n -20 perl -e 'while(1){$a=1+1;}'
/usr/bin/nice -n 19 perl -e 'while(1){$a=1+1;}'

Я бы ожидал, что при проверке сверху, 1 процесс займет весь процессор, а другой нет (потому что не осталось времени простоя). Но...

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
18175 root       1 -20 20376 1460 1132 R  49.9  0.1   0:18.36 perl
18176 root      39  19 20376 1460 1132 R  49.9  0.1   0:15.16 perl   

Почему так? Я хочу, чтобы мой процесс скромно использовал только незанятые циклы CPU :)

Проверено на Linux 3.5.0-17-generic #28-Ubuntu SMP Tue Oct 9 19:31:23 UTC 2012 x86_64 x86_64 x86_64 x86_64 GNU/Linux

1
задан 19 April 2013 в 22:43
1 ответ

В планировании задач используется «искусство». Стандартный алгоритм планирования Linux / Unix позволяет всем процессам в какой-то момент получить CPU. Это делается путем первоначального присвоения процессу двух элементов: (1) самый низкий приоритет в его категории (как определено из его nice) и (2) приращение времени снова на основе категории приоритета. Со временем приоритет процесса увеличивается, процесс с наивысшим приоритетом получает процессорное время. Кроме того, процесс получения ЦП постоянно переопределяется от тика к тику на основе наивысшего приоритета на тот момент после перерасчета. Как только процесс получает время ЦП, его приоритет снова возвращается к самому низкому приоритету в своей категории.

Вы могли получить то, что хотели, используя приоритеты "в реальном времени", где процессы класса с наивысшим приоритетом получают ЦП и могут использовать его до тех пор, пока не будут удовлетворены все процессы в классе приоритета, затем процессы в следующем более низком классе получают доступное время, пока процесс с более высоким приоритетом не потребует ЦП, и так далее, пока общее приращение планирования ЦП израсходовано. Процесс может отказаться от части приращения ЦП, тем самым вызывая перепланирование.

Таким образом, вы видите, что при использовании стандартного планировщика процесс с более низким приоритетом все еще получает процессорное время, но с гораздо меньшей скоростью.

3
ответ дан 3 December 2019 в 18:56

Теги

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