Мне интересно, в каких сценариях имеет значение установка сродства ЦП.
Как правило, сходство ЦП используется для изоляции процесса или уменьшения конкуренции за ресурсы. Высокочастотная торговля - это приложение, в котором я использую Комплекты ЦП и защита ЦП, но я также видел приложения в научных / вычислительных вычислениях (HPC), приложениях реального времени и электронной коммерции. Профессиональные аудиоприложения - еще один распространенный пример, для которого требуются ядра реального времени и наборы соответствия ЦП.
На базовом уровне команда набора задач используется для определения сходства.
Это руководство по созданию групп процессоров для конкретных приложений / процессов с использованием cset, который немного более организован, чем набор задач. https://rt.wiki.kernel.org/index.php/Cpuset_management_utility/tutorial
Сходство ЦП имеет значение в двух сценариях: наиболее распространенный - это когда ваша рабочая нагрузка значительно выигрывает от кэширования ЦП и существует достаточная конкуренция за ресурсы, чтобы заставить задания перемещаться между ядрами или ЦП, что заставляет каждый ЦП аннулировать свой кэш и перестраивать его. Более экстремальная версия этого происходит в системах с неоднородной архитектурой памяти (NUMA), где банки ОЗУ физически подключены к определенному процессору, который всегда будет иметь более быстрый доступ к этой памяти.
В общем, для такого рода проблем вы действительно хотите сначала отслеживать их, чтобы увидеть, является ли это проблемой - нет смысла возиться с планированием ЦП, если ваше приложение привязано к вводу-выводу, что может быть таким же простым, как запуск сверху и просмотр Столбец ЦП, чтобы увидеть, отскакивают ли задания. Также существует некоторая базовая конфигурация системы, гарантирующая, что любой блок памяти, к которому вы обращаетесь, действительно может соответствовать объему, прикрепленному к любому ЦП.
Для тестирования самый простой способ установить привязку - использовать набор задач утилита. Вы также можете посмотреть на libnuma поскольку numactl предоставляет независимые элементы управления как для ЦП, так и для распределения памяти, и, что более важно, библиотека libnuma предоставляет программный способ для ваших приложений запрашивать благоприятные распределения: например, вы можете запросить, чтобы была выделена группа потоков, которые совместно используют определенные структуры данных к другим ядрам на том же ЦП, вместо того, чтобы снижать производительность при переходе через межсоединение.