numa - обзор архитектуры с неравномерной памятью (Non-Uniform Memory Architecture)
Неравномерный доступ к памяти (NUMA) приписывают микропроцессорным системам, у которых память разделяется на узлы. Время доступа к узлу памяти зависит от относительного расположения обращающегося ЦП к узлу (в этом отличие от симметричных мультипроцессорных систем, в которых время доступа ко всей памяти одинаково для всех ЦП). Обычно, каждый ЦП в системе NUMA имеет свой локальный узел памяти, чьё содержимое можно получить быстрее, чем из памяти локального узла другого ЦП или из памяти шины, которая доступна для всех ЦП.
В этом файле содержится информация о политике и выделении памяти NUMA для процесса.
Each line contains information about a memory range used by the process, displaying—among other information—the effective memory policy for that memory range and on which nodes the pages have been allocated.
Файл numa_maps доступен только на чтение. При чтении /proc/<pid>/numa_maps ядро сканирует виртуальное адресное пространство процесса и выдаёт как используется память. Одна строка соответствует уникальной области памяти процесса.
В первом поле каждой строки содержится начальный адрес области памяти. Это поле позволяет провести параллель с файлом /proc/<pid>/maps, в котором содержится конечный адрес области и другая информация, такая как права доступа и данные о совместном использовании.
Во втором поле показана политика памяти, которая применена к области в настоящее время. Заметим, что применённая политика необязательно является политикой, установленной процессом для этой области памяти. В частности, если для этой области процесс установил политику «default» (по умолчанию), то применяемая политика для этой области будет политикой процесса, которая может совпадать, а может и не совпадать с «default».
В оставшейся части строки содержится информация о страницах, выделенных в области памяти:
- N<узел>=<кол-во_страниц>
- Количество страниц, выделенных на <узле>. В <кол-во_страниц> учитываются только страницы, отображённые процессом в настоящий момент. Перемещение (migration) страниц и возвращение памяти может приводить к временному неотображению страниц, связанных с этой областью памяти. Такие страницы могут появиться снова только после того, как процесс попытается обратиться к ним. Если область памяти считается общей или является отображением файла, то для других процессов в это же время могут быть показаны дополнительные страницы, отображённые в соответствующее адресное пространство.
- file=<имя_файла>
- Файл, отображаемый в область памяти. Если файл отображён как закрытый (private), попытка записи может сгенерировать страницы COW (копирование при записи) в этой области памяти. Эти страницы показываются как анонимные.
- heap
- Область памяти, используемая под кучу.
- stack
- Область памяти, используемая под стек.
- huge
- Область огромной памяти. Показывает количество огромных страниц, а не страниц обычного размера.
- anon=<страниц>
- Количество анонимных страниц в области.
- dirty=<страниц>
- Количество грязных (dirty) страниц.
- mapped=<страниц>
- Общее количество отображённых страниц, если оно отличается от количества страниц dirty и anon.
- mapmax=<количество>
- Максимальный mapcount (количество процессов, отображающих одну страницу) обнаруженный при сканировании. Может использоваться как индикатор степени совместного использования заданной области памяти.
- swapcache=<количество>
- Количество страниц, связанных с участками на устройстве подкачки.
- active=<страниц>
- Количество страниц в активном списке. Это поле показывается только, если его значение отличается от количества страниц в этой области. Это означает, что в области памяти существует несколько неактивных страниц, которые могут быть скоро удалены swapper.
- writeback=<страниц>
- Количество страниц, которые в настоящий момент записываются на диск.
Интерфейсы 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.
Русский перевод этой страницы руководства был сделан Alex Nik <rage.iz.me@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.