С появлением AMD Rome процедура слияния и поглощения контроллеров оперативной памяти вступила в новую фазу. Архитектура Zen 2, на базе которой созданы чипы EPYC 7002, предполагает наличие отдельного узла — концентратора ввода-вывода I/O Die (IOD). Это единый центр, призванный обслужить коллективные потребности всех восьми (как вариант, четырех или двух) чиплетов Core Complex Die (CCD), каждый из которых суть два четырехъядерных комплекса CCX. На пути комплексов к общей оперативной памяти стоит «подушка безопасности» в виде блока кэш-памяти L3, объемом 16 МБ на каждый CCX. Ее огромный, по нынешним меркам, размер призван демпфировать регулярные запросы к DRAM, повышая производительность новых процессоров AMD как единого целого. В действенности L3-кэш мы могли убедиться в натурном эксперименте на платформе ASUS KRPA-U16 с EPYC 7452. Каково же ядрам EPYC 7002 оперировать объемами данных, превышающими возможности кэширования? Что лучше, приватный сектор DRAM-контроллеров или кооперативный подход к их использованию? Разбираемся.
Оценка латентности
В режиме Auto (он установлен по умолчанию) все логические процессоры и каналы оперативной памяти декларированы как один единственный NUMA-домен. Он предназначен для программного обеспечения, не оптимизированного для использования особенностей NUMA-топологии. Здесь латентность доступа к DRAM составляет:
- 119.4 ns (по результатам AIDA64)
- 112.8 ns (данным NCRB в режиме больших страниц)
Чтобы программное обеспечение, оптимизированное для NUMA, проявило свои лучшие качества, установим значение параметра Nodes per socket в NPS4. Тогда операционная система «увидит» четыре домена, каждый из которых ассоциирован с двухканальным DRAM-контроллером.

При данных установках CMOS Setup декларируемая в топология максимально соответствует физической, ведь топологическая ассоциация чиплетов и DRAM-контроллеров сохранилась, несмотря на то, что все DRAM-контроллеры расположены в отдельном IOD-кристалле. Наличие NUMA-топологии подтверждается следующими оценками латентности доступа к DRAM:
- 107.0 ns, AIDA64
- 109.5 ns (при использовании оптимального управления потоками в NCRB, режим NUMA optimal)
- 144.6 ns (без использования оптимального управления потоками в NCRB, режим NUMA unaware)
Производительность
Выделение DRAM-контроллера в отдельный кристалл привело к появлению очевидных ограничений производительности DRAM. Они зависят от количества кристаллов CCD и частоты работы шины Infinity Fabric OnPackage (IFOP). Частота внутреннего тактового сигнала FCLK, о котором стало известно из обсуждений Ryzen — десктопной реализации Zen 2, зависит от установок Power Management и выбранной политики оверклокинга.
Исходя из этого, исследуемый процессор EPYC 7452, составленный из четырех кристаллов CCD, не может конкурировать с более «навороченными» собратьями, утилизируя потенциал восьмиканального DRAM-контроллера. Максимальной производительности доступа к памяти стоит ожидать у моделей с восемью чиплетами. Особенно это будет ощущаться на операциях записи в оперативную память.
Теоретический предел
Для расчета максимальной производительности восьмиканального контроллера оперативной памяти нам потребуется ширина шины данных и ее тактовая частота. Для односокетной платформы, поддерживающей обмен с DRAM на частоте 2933 MHz, получим:
Theoretical DRAM bandwidth = 8Ch x 8Byte x 1Socket x 2933MHz = 187712 MBPS
Аппаратные возможности
MEMCLK, штатная частота тактирования DRAM, у семейства AMD EPYC 7002 составляет 2666 MHz. Ряд обозревателей утверждает, что FCLK в неразогнанном состоянии составляет половину от этой величины. Известно также, что пропускная способность IFOP на чтении равна 32 байтам за такт и вдвое меньше на записи. Перемножим количество CCD-кристаллов процессора EPYC 7452 на количество байт, передаваемых за один такт FCLK, и тактовую частоту FCLK:
Read DRAM Bandwidth = 4 * 32 * 1333 = 170624 MBPS
Write DRAM Bandwidth = 4 * 16 * 1333 = 85312 MBPS
Эти ограничения касаются передачи информации между кристаллами CCD и IOD внутри корпуса CPU.
Тестирование
Оценка аппаратных возможностей находит свое подтверждение в результатах, полученных с помощью утилиты AIDA64. Процессор поддерживает NUMA-топологию, установки которой, как и раньше, заданы параметром Nodes per socket.

Метрики чтения процессора AMD EPYC 7452 из оперативной памяти NUMA-платформы,
полученные с помощью утилиты AIDA64

Метрики записи процессора AMD EPYC 7452 в оперативную память NUMA-платформы,
полученные с помощью утилиты AIDA64
Сравним полученные результаты с оценкой производительности оперативной памяти, полученной в утилите NUMA CPU and RAM Benchmarks.

Метрики чтения процессора AMD EPYC 7452 из оперативной памяти, выделенной с учетом NUMA-топологии: работает 32 потока (по числу ядер), чтение выполняется в режиме non-temporal 256-битными AVX-инструкциями VMOVAPD с префиксом предвыборки PREFETCHNTA

Метрики записи процессора AMD EPYC 7452 в оперативную память, выделенную с учетом NUMA-топологии: работает 32 потока (по числу ядер), запись в режиме non-temporal 256-битными AVX-инструкциями VMOVNTPD
При non-temporal оптимизации записи в DRAM (для AVX-256 это инструкция {VMOVNTPD [memory], ymmreg}, а в режиме SSE-128 — {MOVNTPS [memory], xmmreg}) суммарно для 32 ядер всех доменов процессора AMD EPYC 7452 в бенчмарке NCRB достигается скорость записи около 85 GBPS, что совпадает с вышеприведенным расчетом и результатом, полученным в AIDA64. Величина скорости чтения в меньшей степени нивелируется топологическими ограничениями, хотя и демонстрирует некоторое отставание от теоретических лимитов, находясь по данным и NCRB, и AIDA64 в диапазоне 130…140 GBPS.
Использует ли EPYC сжатие?
Ряд обозревателей считает, что процессоры AMD EPYC могут использовать алгоритмы сжатия, выполняя доступ к оперативной памяти. Маловероятно, но проверим эту гипотезу, задействовав инструкцию CLZERO. Если она стимулирует упаковку трафика CCD-IOD, передавая вместо 64 байт нулей специальный компактный код, означающий запись 64 байт нулей — она обойдет ограничения производительности для записи.
Мы выполнили отладочный патч измерительного цикла, заменив 16 инструкций VMOVNTPD, каждая из которых сохраняет 32 байта, на 8 инструкций CLZERO, каждая из которых сохраняет 64 байта (и в первом, и во втором случае — в режиме non-temporal). Неожиданностей не произошло: различие полученных результатов в пределах погрешности измерения (85.0 GBPS vs 84.9 GBPS). Надежда на интеллектуализацию трафика IFOP не оправдалась. В данном контексте и при доступных установках CMOS Setup. Судя по результату, ограничение пропускной способности между CCD и I/O Die осталось и является определяющим в данном сценарии.
Логично ожидать, что эффект от применения инструкции CLZERO будет более выражен при небольших блоках, которые помещаются в кэш-памяти и которые не потребуется вытеснять за пределы кристалла CCD в DRAM сразу после записи. В серии опытов, где целевым объектом является оперативная память, а не кэш, ограничения трафика между CCD и I/O Die нивелировали эффект CLZERO и других форм оптимизации. Одинаковый результат c VMOVNTPD является дополнительным аргументом в пользу того, что лимитировано не количество запросов записи, порождаемых за единицу времени внутри CCD, а количество запросов записи, транспортируемых от CCD в концентратор I/O.
В итоге
Как было показано ранее в расчетах, при данном количестве кристаллов ограничения трафика между CCD и I/O Die приводят к ограничению суммарной скорости записи в DRAM на уровне 85 GBPS. В то время как теоретический лимит 8-канальной DRAM подсистемы в режиме DRAM CLK = 2933 MHz более чем вдвое выше и остается не утилизованным.
Вместе с тем, ничто не мешает передать оставшуюся часть пропускной способности DRAM-подсистемы в распоряжение bus-master устройств, подключенных к шинам-ввода вывода, и(или) межсокетному трафику по шине Infinity Fabric InterSocket. Утилизовать около 100 GBPS в виде I/O трафика может только высокопроизводительная периферия, например, экстремальный NVMe RAID или несколько видеоадаптеров (акселераторов), требующие интенсивного bus master обмена с DRAM хост-платформы.
С другой стороны, стереотип о том, что главным потребителем трафика DRAM должен быть CPU, может постепенно устаревать по мере внедрения новых шинных технологий, таких как Gen-Z, обеспечивающих когерентные линки с различными внешними акселераторами, которые успешно «съедят» ту часть пропускной способности 8-канальной подсистемы оперативной памяти, которую в силу топологических ограничений не удалось передать в распоряжение CPU.
Резюме
По латентности DRAM ситуация в рамках приличий. Главный пострадавший параметр — пропускная способность при записи в DRAM. Возможно, устранение NUMA-архитектуры, вернее, попытка минимизировать ее влияние, стало результатом давления маркетологов на разработчиков, и какой из двух следующих вариантов получится в итоге было не так уж важно:
- NUMA нет, потому что все виды доступа одинаково быстрые
- NUMA нет, потому что все виды доступа одинаково медленные
И правда не совсем посередине, а ближе ко второму случаю…