Почему мои "хорошие" уровни не отражаются на загрузке процессора?
Дана виртуальная машина с 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;}'
Я ожидаю, что когда я проверяю с top, 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
Это почему? Я хочу, чтобы мой процесс смиренно использовал только свободные циклы процессора:)
Протестировано на Linux 3.5.0-17-generiC#28-Ubuntu SMP Вторник, 9 октября 19:31:23 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
1 ответ
В планировании задач используется "искусство". Стандартный алгоритм планирования Linux/Unix позволяет всем процессам в определенный момент получать процессор. Это делается изначально, назначая процессу два элемента: (1) наименьший приоритет в его категории (как определено из его славы) и (2) приращение времени снова на основе категории приоритетов. С течением времени приоритет процесса увеличивается, процесс с наивысшим приоритетом получает процессорное время. Кроме того, процесс получения ЦП постоянно переопределяется от тика к тику на основе наивысшего приоритета в то время после пересчета. Как только процесс получает процессорное время, его приоритет снова возвращается к самому низкому приоритету в его категории.
Вы можете получить то, что хотели, используя приоритеты "в реальном времени", когда процессы класса с наивысшим приоритетом получают ЦП и используют его до тех пор, пока все процессы в классе приоритета не будут удовлетворены, тогда процессы в следующем более низком классе получат доступное время, пока либо процесс с более высоким приоритетом требует ЦП и т. д., пока не будет израсходовано общее приращение планирования ЦП. Процесс может отказаться от части приращения ЦП, вызывая перепланирование.
Таким образом, при использовании стандартного планировщика вы видите, что процесс с более низким приоритетом все еще получает процессорное время, но с гораздо меньшей скоростью.