Цена за DRAM

С появлением AMD Rome про­це­ду­ра сли­я­ния и по­гло­ще­ния кон­т­рол­ле­ров опе­ра­тив­ной па­мя­ти всту­пи­ла в но­вую фа­зу. Ар­хи­тек­ту­ра Zen 2, на ба­зе ко­то­рой со­з­да­ны чи­пы EPYC 7002, пред­по­ла­га­ет на­ли­чие от­дель­но­го уз­ла — кон­цен­т­ра­тора вво­да-вы­во­да I/O Die (IOD). Это единый центр, при­з­ван­ный об­слу­жить кол­лек­тив­ные по­треб­нос­ти всех вось­ми (как ва­ри­ант, че­ты­рех или двух) чип­ле­тов Core Com­plex 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-контроллером.

Выбор NUMA-топологии доступен в установках UEFI в меню Memory Addressing

 

При данных установках 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 On­Pack­age (IF­OP). Частота внутреннего тактового сигнала 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

Метрики записи процессора 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-инструкциями VMOVAPD с префиксом предвыборки PREFETCHNTA

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

Метрики записи процессора 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 In­ter­Sock­et. Ути­ли­зо­вать около 100 GBPS в виде I/O трафика может только вы­со­ко­про­из­во­ди­тель­ная периферия, на­при­мер, экс­тре­маль­ный NVMe RAID или несколько ви­де­о­а­дап­те­ров (ак­се­ле­ра­то­ров), требующие интенсивного bus mas­ter обмена с DRAM хост-платформы.

С другой стороны, стереотип о том, что главным потребителем трафика DRAM должен быть CPU, может по­сте­пен­но ус­та­ре­вать по мере внедрения новых шинных технологий, таких как Gen-Z, обес­пе­чи­ва­ю­щих ко­ге­рен­т­ные лин­ки с раз­лич­ны­ми внешними акселераторами, которые успешно «съедят» ту часть про­пуск­ной спо­соб­но­сти 8-канальной под­сис­те­мы оперативной памяти, которую в силу то­по­ло­ги­че­ских ог­ра­ни­че­ний не уда­лось пе­ре­дать в распоряжение CPU.

Резюме

По латентности DRAM ситуация в рамках приличий. Главный пострадавший параметр — пропускная спо­соб­ность при за­пи­си в DRAM. Возможно, устранение NUMA-архитектуры, вернее, попытка минимизировать ее вли­я­ние, ста­ло ре­зуль­та­том давления маркетологов на разработчиков, и какой из двух следующих ва­ри­ан­тов получится в итоге было не так уж важно:

  • NUMA нет, потому что все виды доступа одинаково быстрые
  • NUMA нет, потому что все виды доступа одинаково медленные

И правда не совсем посередине, а ближе ко второму случаю…