Я пытаюсь уменьшить задержку моего сетевого приложения Linux. Я узнал, что есть два инструмента для «привязки» программы к конкретному ядру процессора: taskset и cpuset.
- Какой из них я предпочитаю? Они эквивалентны на более низком уровне?
- (расположение) Мое приложение имеет один поток и должно обрабатывать одно TCP-соединение (без повторного подключения) по быстрой локальной сети с минимальной задержкой. Я на правильном пути?
central-processing-unit
performance-tuning
latency
multi-core
Джон Линберг
источник
источник
Ответы:
Набор задач предназначен для привязки процесса к одному или нескольким процессорам; по существу, указание, где он может работать при первоначальном выполнении или во время работы. При использовании RHEL / CentOS на современном серверном оборудовании,
numactl
рекомендуется закончитьtaskset
.Cpuset / cset предназначен для экранирования ЦП и является фреймворком, основанным на cgroups Linux. Cset никогда не был популярен в определенных дистрибутивах (например, RHEL), потому что есть другие инструменты, доступные для управления процессами.
Первая команда ниже создает экран, который будет ограничивать задачи операционной системы ядрами ЦП 0 и 8. Вторая будет перемещать текущий сеанс оболочки на указанный экран ЦП, что приведет к изоляции системных и пользовательских процессов.
Есть и другие вещи, которые можно проверить и настроить, прежде чем идти по пути привязки процессов к процессорам; прерывания (
irqbalance
частичное отключение), настройки энергосбережения, системный планировщик, лифты ввода-вывода, политика в реальном времени (chrt
).Смотрите: Настройки TCP с низкой задержкой в Ubuntu
Вот ( извитый ) пример приложения - оболочки , который выбирает ядро, останавливает irqbalance, запускает его и черные списки выбранного сердечника, затем выполняет ./your_program с SCHED_FIFO и приоритетом 99 на выбранном ядре.
источник
taskset
. Если вы используете cpuset, невозможно изменить ваши сродства с тем, что дает вам cpuset.numactl
??sched_setaffinity
.