Я знаю, что можно установить режим numa на "чередование" (см. NB ниже) для определенного процесса, используя numactrl --interleave
, но я хотел бы знать, можно ли сделать это общесистемным значением по умолчанию (или изменить «системную политику»). Например, есть ли для этого флаг загрузки ядра?
NB: здесь я говорю о поведении ядра, которое чередует выделенные страницы между узлами NUMA, а не о настройке поведения контроллера памяти на уровне BIOS, которая чередует строки кэша по
Если вы используете RHEL / CentOS / Fedora, я бы предложил использовать Numad демон. (Ссылка на платный доступ Red Hat).
Хотя я не особо использую numactl --interleave
директиве, похоже, вы определили, что она требуется вашей рабочей нагрузке. Вы можете объяснить, почему это так, чтобы лучше понять контекст?
Редактировать:
Кажется, что большинство приложений, рекомендующих явное numactl
определение либо сделать вызов библиотеки libnuma или включить numactl
в сценарий оболочки.
Для numad
сторона, есть опция конфигурации, которую можно указать в командной строке или в /etc/numad.conf
...
-K <0|1>
This option controls whether numad keeps interleaved memory spread across NUMA nodes, or
attempts to merge interleaved memory to local NUMA nodes. The default is to merge interleaved
memory. This is the appropriate setting to localize processes in a subset of the system’s
NUMA nodes. If you are running a large, single-instance application that allocates inter-
leaved memory because the workload will have continuous unpredictable memory access patterns
(e.g. a large in-memory database), you might get better results by specifying -K 1 to instruct
numad to keep interleaved memory distributed.
Некоторые говорят, что попробовали это с чем-то вроде numad -K 1 -u X
, где X - это 100-кратное количество ядер, может помочь в этом. Попытайся.