Введение
Дизайн компьютерной памяти, используемый в многопроцессорных системах. Неравномерный доступ к памяти (NUMA) – это архитектура компьютерной памяти, применяемая в многопроцессорных системах, где время доступа к памяти зависит от её расположения относительно процессора. В архитектуре NUMA процессор может быстрее получить доступ к своей локальной памяти, чем к нелокальной памяти (памяти, локальной для другого процессора, или к совместно используемой памяти). Преимущества NUMA проявляются в определенных рабочих нагрузках, особенно на серверах, где данные часто тесно связаны с конкретными задачами или пользователями. Архитектуры NUMA логически развиваются из архитектур симметричной мультипроцессорности (SMP). Коммерческая разработка этих архитектур началась в 1990-х годах компаниями Unisys, Convex Computer (позже Hewlett Packard), Honeywell Information Systems Italy (HISI) (позже Groupe Bull), Silicon Graphics (позже Silicon Graphics International), Sequent Computer Systems (позже IBM), Data General (позже EMC, теперь Dell Technologies), Digital (позже Compaq, затем HP, теперь HPE) и ICL. Технологии, разработанные этими компаниями, впоследствии были использованы в различных Unix-подобных операционных системах, а также в некоторой степени в Windows NT. Первой коммерческой реализацией Unix-системы на основе NUMA стала серверная линейка Symmetrical Multi Processing XPS 100, разработанная Дэном Гиеланом из VAST Corporation для Honeywell Information Systems Italy.
Non uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local memory faster than non local memory (memory local to another processor or memory shared between processors). The benefits of NUMA are limited to particular workloads, notably on servers where the data is often associated strongly with certain tasks or users. NUMA architectures logically follow in scaling from symmetric multiprocessing (SMP) architectures. They were developed commercially during the 1990s by Unisys, Convex Computer (later Hewlett Packard), Honeywell Information Systems Italy (HISI) (later Groupe Bull), Silicon Graphics (later Silicon Graphics International), Sequent Computer Systems (later IBM), Data General (later EMC, now Dell Technologies), Digital (later Compaq, then HP, now HPE) and ICL. Techniques developed by these companies later featured in a variety of Unix like operating systems, and to an extent in Windows NT. The first commercial implementation of a NUMA based Unix system was the Symmetrical Multi Processing XPS 100 family of servers, designed by Dan Gielan of VAST Corporation for Honeywell Information Systems Italy.
Обзор
Современные процессоры работают значительно быстрее, чем используемая ими основная память. В первые дни вычислений и обработки данных процессор обычно работал медленнее собственной памяти. Кривые производительности процессоров и памяти пересеклись в 1960-х годах с появлением первых суперкомпьютеров. С тех пор процессоры все чаще сталкиваются с ситуацией, когда они "ограничены данными" и вынуждены простаивать в ожидании поступления данных из памяти (например, для компьютеров, основанных на архитектуре фон Неймана, см. "узкое место фон Неймана"). Многие разработки суперкомпьютеров 1980-х и 1990-х годов были сосредоточены на обеспечении высокоскоростного доступа к памяти, а не на более быстрых процессорах, что позволяло компьютерам работать с большими наборами данных со скоростью, недостижимой для других систем. Ограничение числа обращений к памяти стало ключевым фактором для достижения высокой производительности в современных компьютерах. Для массовых процессоров это означало установку все большего объема высокоскоростной кэш-памяти и использование все более сложных алгоритмов для предотвращения промахов кэша. Однако резкий рост размеров операционных систем и приложений, работающих на них, как правило, нивелировал эти улучшения в обработке кэша. Многопроцессорные системы без NUMA значительно усугубляют эту проблему. Теперь система может одновременно "заморозить" несколько процессоров, особенно потому, что только один процессор может одновременно получить доступ к памяти компьютера. NUMA пытается решить эту проблему, предоставляя каждому процессору отдельную память, что позволяет избежать снижения производительности, когда несколько процессоров пытаются обратиться к одной и той же области памяти. Для задач, связанных с распределенными данными (что типично для серверов и аналогичных приложений), NUMA может повысить производительность по сравнению с общей разделяемой памятью примерно во столько раз, сколько количество процессоров (или отдельных банков памяти). Другой подход к решению этой проблемы – многоканальная архитектура памяти, в которой линейное увеличение числа каналов памяти линейно увеличивает степень параллельности доступа к памяти. Конечно, не все данные принадлежат одной задаче, а значит, одним и тем же данным могут потребоваться несколько процессоров. Для обработки таких случаев системы NUMA включают дополнительное аппаратное или программное обеспечение для перемещения данных между банками памяти. Эта операция замедляет процессоры, подключенные к этим банкам, поэтому общее увеличение скорости благодаря NUMA в значительной степени зависит от характера выполняемых задач. Обе семейства процессоров Intel используют общий чипсет; их взаимосвязь называется Intel QuickPath Interconnect (QPI), обеспечивающая чрезвычайно высокую пропускную способность для обеспечения высокой масштабируемости и была заменена новой версией под названием Intel UltraPath Interconnect с выпуском Skylake (2017).
Кэш-когерентный NUMA (ccNUMA)
Почти все архитектуры процессоров используют небольшой объем очень быстрой, не разделяемой памяти, известной как кэш, для использования принципа локальности при обращении к памяти. В системах NUMA поддержание когерентности кэша в совместно используемой памяти связано со значительными накладными расходами. Хотя системы NUMA без когерентности кэша проще в проектировании и создании, программировать их в стандартной модели программирования архитектуры фон Неймана становится крайне сложно. Как правило, в ccNUMA для поддержания согласованного образа памяти, когда несколько кэшей хранят одно и то же местоположение памяти, используется межпроцессорная связь между контроллерами кэша. По этой причине ccNUMA может демонстрировать низкую производительность, когда несколько процессоров одновременно пытаются получить доступ к одной и той же области памяти. Поддержка NUMA в операционных системах направлена на снижение частоты таких обращений путем выделения процессоров и памяти с учетом особенностей NUMA, а также избегания алгоритмов планирования и блокировки, которые приводят к необходимости неэффективных обращений к памяти в NUMA-системах. Альтернативно, протоколы когерентности кэша, такие как протокол MESIF, стремятся уменьшить объем коммуникаций, необходимых для поддержания когерентности кэша. Scalable Coherent Interface (SCI) – это стандарт IEEE, определяющий протокол когерентности кэша на основе каталогов, для преодоления ограничений масштабируемости, присущих более ранним многопроцессорным системам. Например, SCI используется в качестве основы для технологии NumaConnect.
Поддержка оборудования
На 2011 год системы ccNUMA представляли собой многопроцессорные системы, основанные на процессоре AMD Opteron, который можно реализовать без внешней логики, и процессоре Intel Itanium, для которого требовалась поддержка NUMA со стороны чипсета. Примеры чипсетов с поддержкой ccNUMA включают SGI Shub (Super hub), Intel E8870, HP sx2000 (используемый в серверах Integrity и Superdome), а также чипсеты, применяемые в системах NEC на базе Itanium. Более ранние системы ccNUMA, такие как системы Silicon Graphics, были основаны на процессорах MIPS и процессоре DEC Alpha 21364 (EV7).