NUMA(7) | Руководство программиста Linux | NUMA(7) |
numa - обзор архитектуры с неравномерной памятью (Non-Uniform Memory Architecture)
Неравномерный доступ к памяти (NUMA) приписывают микропроцессорным системам, у которых память разделяется на узлы. Время доступа к узлу памяти зависит от относительного расположения обращающегося ЦП к узлу (в этом отличие от симметричных мультипроцессорных систем, в которых время доступа ко всей памяти одинаково для всех ЦП). Обычно, каждый ЦП в системе NUMA имеет свой локальный узел памяти, чьё содержимое можно получить быстрее, чем из памяти локального узла другого ЦП или из памяти шины, которая доступна для всех ЦП.
В ядре Linux реализованы следующие системные вызовы, относящиеся к NUMA: get_mempolicy(2), mbind(2), migrate_pages(2), move_pages(2) и set_mempolicy(2). Однако, приложения, обычно, должны использовать интерфейс, предоставляемый библиотекой libnuma; смотрите «Поддержка в библиотеках» далее.
В этом файле содержится информация о политике и выделении памяти NUMA для процесса.
В каждой строке содержится информация области памяти, используемом процессом, отражающей, помимо прочего, применяемую политику памяти для этой области и какие страничные узлы были выделены.
Файл numa_maps доступен только на чтение. При чтении /proc/<pid>/numa_maps ядро сканирует виртуальное адресное пространство процесса и выдаёт как используется память. Одна строка соответствует уникальной области памяти процесса.
В первом поле каждой строки содержится начальный адрес области памяти. Это поле позволяет провести параллель с файлом /proc/<pid>/maps, в котором содержится конечный адрес области и другая информация, такая как права доступа и данные о совместном использовании.
Во втором поле показана политика памяти, которая применена к области в настоящее время. Заметим, что применённая политика необязательно является политикой, установленной процессом для этой области памяти. В частности, если для этой области процесс установил политику «default» (по умолчанию), то применяемая политика для этой области будет политикой процесса, которая может совпадать, а может и не совпадать с «default».
В оставшейся части строки содержится информация о страницах, выделенных в области памяти:
Интерфейсы NUMA не описаны в стандартах.
Системные вызовы Linux NUMA и интерфейс /proc доступны только, если ядро было собрано с включённым параметром CONFIG_NUMA.
Выполняйте компоновку с -lnuma. Библиотека libnuma и требуемый заголовочный файл <numaif.h> доступны в пакете numactl.
Однако, приложения не должны использовать эти системные вызовы напрямую. Вместо этого, рекомендуется использовать интерфейс высокого уровня, предоставляемый функциями numa(3) из пакета numactl. Пакет numactl доступен по адресу ftp://oss.sgi.com/www/projects/libnuma/download/. Пакет также включён в некоторые дистрибутивы Linux. Некоторые дистрибутивы помещают библиотеку для разработки и заголовочные файлы в пакет numactl-devel.
get_mempolicy(2), mbind(2), move_pages(2), set_mempolicy(2), numa(3), cpuset(7), numactl(8)
2012-08-05 | Linux |