Команда numactl в Linux — подробное руководство по использованию

Команда numactl в Linux используется для управления привязкой процессов к определённым узлам и памяти в системах с поддержкой NUMA (Non-Uniform Memory Access). Это позволяет оптимизировать использование процессора и памяти, улучшая производительность приложений. В данной статье подробно рассмотрим возможности numactl и его основные опции, а также приведём примеры практического применения.

Что такое NUMA и зачем нужна команда numactl?

В системах с архитектурой NUMA память распределена между несколькими узлами, каждый из которых включает один или несколько процессоров и выделенную память. Доступ к локальной памяти узла быстрее, чем к памяти другого узла. Использование numactl позволяет контролировать привязку процессов и памяти к конкретным узлам, что полезно для задач с высокими требованиями к ресурсам.

Основные параметры команды numactl

Команда numactl предоставляет различные опции, которые позволяют задавать привязку процессов и распределение памяти. Рассмотрим ключевые параметры:

  • --membind=N — привязывает память к указанному узлу N. Например, --membind=0 заставит процесс использовать только память узла 0.
  • --cpubind=N — задаёт привязку процесса к определённому процессорному узлу.
  • --localalloc — позволяет выделять память из локального узла.
  • --preferred=N — предпочтительный узел для выделения памяти. Если память недоступна, выбирается другой узел.

Использование команды numactl

Для запуска программы с привязкой к конкретному узлу используется следующий синтаксис:

numactl --cpubind=0 --membind=0 ./my_program

В данном примере my_program будет запускаться с использованием процессора и памяти узла 0.

Пример привязки памяти к нескольким узлам

Для сложных приложений можно привязать память к нескольким узлам, указав диапазон узлов или список:

numactl --membind=0-1 ./my_program

Этот пример указывает программе использовать память как из узла 0, так и из узла 1.

Проверка привязки с помощью команды numastat

Команда numastat позволяет проверить, к каким узлам привязаны процессы и как распределена память. Запустите numastat, чтобы получить информацию о текущем распределении памяти по узлам:

numastat

Дополнительные параметры позволяют получить более детализированную информацию о привязке процессов и использовании памяти в системе.

Использование в реальных задачах

Привязка процессов и памяти с помощью numactl особенно полезна для приложений, которые требуют интенсивного использования вычислительных ресурсов. Например, базы данных или виртуализация. Для таких приложений привязка к локальной памяти снижает задержки и повышает производительность.

Заключение

Команда numactl предоставляет полезные инструменты для оптимизации производительности приложений в многопроцессорных системах с NUMA-архитектурой. Используя параметры numactl, можно управлять привязкой памяти и процессов к узлам, тем самым улучшая использование ресурсов. Дополнительную информацию о работе с системными процессами можно найти в статье о команде fuser.