3.4. cpuset

Подсистема cpuset выделяет процессоры и узлы памяти контрольным группам. Ниже перечислены параметры cpuset. Каждый параметр хранится в отдельном псевдофайле в виртуальной файловой системе контрольной группы:

Важно

Для некоторых подсистем существуют обязательные параметры, которые необходимо определить, прежде чем приступать к переносу заданий в контрольную группу. Так, например, чтобы перенести задание в группу, использующую cpuset, необходимо определить значения cpuset.cpus и cpuset.mems.
cpuset.cpus (обязательный)
Определяет процессоры, к которым могут обращаться задания в группе. Представляет собой список значений ASCII, разделенных запятой. Для обозначения диапазона используется дефис. Пример:
0-2,16
Здесь перечислены процессоры 0, 1, 2 и 16.
cpuset.mems (обязательный)
Определяет узлы памяти, к которым могут обращаться задания в группе. Представляет собой список значений ASCII, разделенных запятой. Для обозначения диапазона используется дефис. Пример:
0-2,16
Здесь перечислены узлы памяти 0, 1, 2 и 16.
cpuset.memory_migrate
Флаг (0 или 1), который вызывает перенос страницы памяти на другой узел при изменении значений в cpuset.mems. По умолчанию эта функциональность отключена (0) и страницы остаются на исходном узле, даже если узел не включен в список в cpuset.mems. Если же флаг установлен (1), страницы будут перенесены на узлы памяти, заданные в cpuset.mems. При этом по возможности будет поддерживаться их относительное размещение; так, например, страницы со второго узла в исходном списке будут перенесены на второй узел в обновленном списке cpuset.mems.
cpuset.cpu_exclusive
Флаг (0 или 1), позволяющий совместно использовать назначенный заданному набору cpuset процессор другими cpuset. По умолчанию процессоры не ограничены одним набором cpuset (0).
cpuset.mem_exclusive
Флаг (0 или 1), позволяющий совместно использовать назначенные заданному набору cpuset узлы памяти другими cpuset. По умолчанию узлы памяти не ограничены одним набором cpuset (0). Их резервирование для одного набора cpuset (1) эквивалентно установке флага cpuset.mem_hardwall.
cpuset.mem_hardwall
Флаг (0 или 1), позволяющий ограничить выделение страниц памяти и данных буфера узлами памяти, заданными в текущем наборе cpuset. По умолчанию (0) страницы и данные буфера могут совместно использоваться процессами, принадлежащими разным пользователям. Установка флага (1) отделяет выделение заданий для конкретного пользователя от других.
cpuset.memory_pressure
Этот файл доступен только для чтения и содержит среднее значение нагрузки памяти в результате выполнения процессов, соответствующих текущему набору cpuset. Если флаг cpuset.memory_pressure_enabled отключен (0), то значение в этом файле равно нулю, а при активации cpuset.memory_pressure_enabled оно будет рассчитано автоматически.
cpuset.memory_pressure_enabled
Флаг (0 или 1), отвечающий за расчет нагрузки памяти, вызванной работой процессов в составе заданной контрольной группы. Значения рассчитываются умножением числа попыток возвращения занятой памяти в секунду на 1000 и характеризуют скорость освобождения процессами используемой памяти. Результаты сохраняются в файл cpuset.memory_pressure
cpuset.memory_spread_page
Флаг (0 или 1), позволяющий равномерно распределить буферы файловой системы между узлами памяти для заданного cpuset. По умолчанию распределение выполняться не будет (0), поэтому буферы будут помещаться на тот же узел, где выполняется создавший их процесс.
cpuset.memory_spread_slab
Флаг (0 или 1), отвечающий за равномерное распределение slab-блоков кэша для операций ввода-вывода в пределах текущего набора cpuset. По умолчанию распределение выполняться не будет (0), поэтому блоки кэша будут помещаться на тот же узел, где выполняется создавший их процесс.
cpuset.sched_load_balance
Флаг (0 или 1), отвечающий за распределение нагрузки между процессорами в составе заданного cpuset. По умолчанию (1) ядро распределяет нагрузку посредством переноса процессов на менее загруженные процессоры.
Установка этого флага в контрольной группе не возымеет эффекта, если в родительской группе включено распределение нагрузки. Следует его отключить во всех родительских группах в иерархии, а также оценить, нужно ли распределение в контрольных группах на том же уровне иерархии.
cpuset.sched_relax_domain_level
Содержит целое значение, начиная с -1 и заканчивая небольшим позитивным числом, определяющее диапазон процессоров, между которыми будет распределяться нагрузка. Не имеет эффекта, если отключен флаг cpuset.sched_load_balance.
В таблице перечислены типичные значения, хотя действия могут отличаться в зависимости от архитектуры.
Значения cpuset.sched_relax_domain_level
ЗначениеДействие
-1Использовать исходное системное значение для распределения нагрузки
0Не выполнять распределение нагрузки сразу, а делать это периодически
1Сразу перераспределить нагрузку между потоками одного ядра
2Сразу перераспределить нагрузку между ядрами одного пакета
3Сразу перераспределить нагрузку между процессорами на одном узле или blade-модуле
4Сразу перераспределить нагрузку между несколькими процессорами в системах с неоднородным доступом к памяти (NUMA)
5Сразу перераспределить нагрузку между всеми процессорами в системах с NUMA