Презентация EPYC Rome, разработанного с использованием архитектуры Zen 2, открывает путь к натурным экспериментам с новинкой от AMD. В нашем распоряжении оказался инженерный образец 32-х ядерного процессора AMD EPYC 7452 в конструктиве Socket SP3, исследование внутренних структур которого дает возможность узнать, какими аргументами компания AMD хочет убедить серверный рынок в своих лидерских способностях.

В системной информации, доступной с помощью Java-инструментария CPUID (а потому способного выполнять свои функции в среде большинства операционных систем), на первый план выступает поддержка инструкций управления кэш-памятью, оптимизированных для операций с персистентными регионами памяти — CLWB и WBNOINVD.

Процессор AMD EPYC 7452 глазами утилиты Java CPUID v0.72
О кэшировании энергонезависимой памяти
Появление NVDIMM, а также приобретение NVMe-накопителями способности прямо отображать персистентные диапазоны памяти в адресное пространство, стало маленьким шагом на долгом пути нивелирования различий между оперативной памятью и устройствами хранения. Речь о функциональности PMR (Persistent Memory Region), получившей официальный статус в спецификации NVMe 1.4 от 10 июня 2019 года.
Благодаря таким новациям, кэширование, как метод повышения производительности DRAM, теперь применим и к диапазонам, адресующим энергонезависимую память. Наибольшего внимания в этом контексте требует корректная обработка политик отложенной записи (Writeback). Она должна дать ответ на сакраментальный вопрос: как в случае внезапного сбоя или отключения питания не потерять информацию, находящуюся в кэш-памяти и ожидающую отложенной записи?

Функция CPUID 80000008h декларирует поддержку процессором инструкции WBNOINVD (Writeback no invalidate)
Классическая инструкция WBINVD (Writeback and Invalidate) далека от решения означеной выше проблемы — она выгружает содержимое кэш, ожидающее отложенной записи, и объявляет кэш-память недостоверной. Это нежелательный побочный эффект в ситуации, когда кэшированная информация вскоре потребуется приложению.
Новая инструкция WBNOINVD (Writeback and No Invalidate) преследует благую цель — выгрузить информацию из кэш-памяти процессора в персистентный носитель, не удаляя эту информацию из кэш-памяти. Обе инструкции WBINVD и WBNOINVD не только гарантируют когерентность процессорной кэш-памяти, но и формируют специальное сообщение для системной логики, форсирующее сохранение внешних по отношению к процессору уровней кэш. Полномочия для использования этих «тяжеловесных» конструкций являются привилегией только операционной системы и недоступны прикладному программисту.
О достоверности отложенной записи строк
Инструкция CLWB (Cache Line Writeback) оптимизирована для согласования содержимого кэш-памяти и персистентного запоминающего устройства на уровне отдельных кэш-строк. Если ячейка памяти, адрес которой определяется операндом инструкции CLWB, содержится в кэш и ожидает отложенной записи, то операция записи форсируется. Так достигается гарантированное обновление информации в персистентном носителе, санкционированное программным обеспечением.

Функция CPUID 00000007h декларирует поддержку процессором инструкции CLWB (Cache Line Writeback)
В отличие от функционально сходной инструкции CLFLUSH (Cache Line Flush), информация не удаляется из кэш-памяти. В случаях, если сценарий работы приложения предусматривает последующий доступ к этой информации, такое различие между инструкциями CLWB и CLFLUSH оказывает существенное влияние на производительность.
Инструкция CLWB (Cache Line Writeback), управляющая сохранением заданной строки кэш-памяти, может применяться на любом уровне привилегий, в том числе в пользовательских приложениях.
Что в итоге?
В условиях, когда ни твердотельные накопители, ни операционные системы толком не готовы поддержать идею персистентности, AMD следует неуклонным курсом на построение эффективных гетерогенных систем с максимальным нивелированием различий в подключении компонентов. Будет ли платформа на EPYC Rome готова реально включить в свое адресное пространство и энергонезависимые устройства, сегодня прогнозировать не возьмется никто. Тем не менее, AMD предусматривает и такой сценарий.