Как получить параметр ядра isolcpus, работающий с Precise 12.04 amd64?

Я тестировал этот материал, пытаясь зарезервировать несколько процессоров в хосте с двумя процессорами Intel E5645, но по какой-то причине не могу заставить его работать. Шаги, за которыми я следовал:

  1. Отредактируйте / etc / default / grub и добавьте isolcpus = 0,1 в GRUB_CMDLINE_LINUX_DEFAULT

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=0,1"

  2. Запустите update-grub

  3. Перезагрузка

После этого cat / proc / cmdline выдает:

BOOT_IMAGE=/boot/vmlinuz-3.2.0-26-generic root=UUID=52cfedad-40be-41b9-9f88-c282a7ae3f24 ro quiet splash isolcpus=0,1 vt.handoff=7

Протестировано с использованием стресса: [ 1114]

apt-get install stress && stress -c 24

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

Cpu0  : 99.7%us,  0.3%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu1  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu2  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu3  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu4  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu5  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu6  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu7  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu8  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu9  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu10 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu11 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu12 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu13 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu14 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu15 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu16 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu17 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu18 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu19 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu20 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu21 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu22 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa
Cpu23 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa

Проверено то же самое в CentOS 6 x86_64, и все работает как положено.

Поиск в базе данных ошибок Ubuntu и Linux в панели запуска, но пока ничего не нашел.

1118 Это я глупый или я что-то упускаю? Подсказки?

Спасибо!

Ссылки:

http://www.kernel.org/doc/Documentation/kernel-parameters.txt [ 1121]

5
задан 18 July 2012 в 16:55

3 ответа

isolcpus только isloate от определенного действия пространства пользователя и не изолирует ЦП от действия ядра (сторожевые таймеры, kworkers, стопка Linux...). Кроме того, Вы не должны изолировать CPU 0 (который имеет многочисленные специализированные операции как исследование usb, acpi установка таймера, wrmsr/rdmsr диспетчеризирующий...., которые имеют тенденцию составлять 2% со стандартным дистрибутивом, где все драйверы включены по умолчанию),

Можно проверить, какие процессы работают который ядра путем отображения всех потоков, отсортированных по базовому числу.

ps -aFeL | cut -c 48- | sort -n

Также необходимо проверить и изменить сродство в/proc/irq /*, чтобы попытаться изменить сродство прерывания.

Вы могли бы динамично сэкономить CPU и удалить "большую часть" задачи ядра Linux с помощью cpuset инструмент.

вместо

taskset -c 3-7,11-15 program args

попробуйте это

sudo apt install cpuset
cset set --list
cset shield -c 3-7,11-15
cset set --list
cset shield -e program -- args  

И затем, можно ценить различие

ps -aFeL | cut -c 48- | sort -n

При выполнении этих 2 команд

cset shield -e stress -- -c 16
stress -c 16
1
ответ дан 18 July 2012 в 16:55

На самом деле isolcpus (по моим тестам) ведет себя по-разному на процессорах AMD и Intel.

Kernel: 4.10.0-38-generic x86_64 (64 bit) на

/etc/default/grub добавили isolcpus=2 в GRUB_CMDLINE_LINUX_DEFAULT= line, аналогично ОП. Затем sudo update-grub и перезагрузите.

  • На двухъядерном процессоре Intel Core i7 с гиперпоточностью ps -eF | grep " 2 " показано, что на Hyperthread 2 запущено только очень небольшое количество процессов, принадлежащих корню (и все они, похоже, имеют / 2 после CMD). [ 1112]

  • В четырехъядерном процессоре AMD без гиперпоточности многие корневые процессы запускаются на ядре 2 (и большинство не имеют / 2 после CMD).

Это ошибка, которая, вероятно, будет исправлена, или функция?

0
ответ дан 18 July 2012 в 16:55

Отключенный SMT (Hyper-Threading) в BIOS, выключение и включение питания, повторная проверка с отключенным HT, и режим isolcpus работает, как и ожидалось.

Повторно включенный SMT в BIOS, выключение питания, все еще работает, как и ожидалось.

Определенно, не самый лучший ответ, который вы могли ожидать, но, тем не менее, он мне помог.

0
ответ дан 18 July 2012 в 16:55

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

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