Набор задач предназначен для привязки процесса к одному или нескольким процессорам; по существу, указание, где он может работать при первоначальном выполнении или во время работы. При использовании RHEL / CentOS на современном серверном оборудовании, numactl
рекомендуется закончить taskset
.
Cpuset / cset предназначен для экранирования ЦП и является фреймворком, основанным на cgroups Linux. Cset никогда не был популярен в определенных дистрибутивах (например, RHEL), потому что есть другие инструменты, доступные для управления процессами.
Первая команда ниже создает экран, который будет ограничивать задачи операционной системы ядрами ЦП 0 и 8. Вторая будет перемещать текущий сеанс оболочки на указанный экран ЦП, что приведет к изоляции системных и пользовательских процессов.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Есть и другие вещи, которые можно проверить и настроить, прежде чем идти по пути привязки процессов к процессорам; прерывания ( irqbalance
частичное отключение), настройки энергосбережения, системный планировщик, лифты ввода-вывода, политика в реальном времени ( chrt
).
Смотрите: Настройки TCP с низкой задержкой в Ubuntu
Вот ( извитый ) пример приложения - оболочки , который выбирает ядро, останавливает irqbalance, запускает его и черные списки выбранного сердечника, затем выполняет ./your_program с SCHED_FIFO и приоритетом 99 на выбранном ядре.
Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program