Модуль защиты кэш памяти

Обновлено: 04.07.2024

Это перевод апноута AN4838 [1] (автор перевода Marat Galyamov), который описывает управление модулем защиты памяти (memory protection unit, MPU) в архитектуре STM32. Блок MPU является опциональным (программно подключаемым) компонентом для защиты памяти. Включение модуля MPU в STM32 делает работу процессора более устойчивой и надежной. MPU должен быть настроен и включен перед использованием. Если модуль MPU не включен, то нет никаких изменений в поведении системы памяти. Этот апноут касается все продуктов STM32, включая Cortex®-M0+/M3/M4 и M7 варианты, которые поддерживают MPU.

• STM32F7 Series Cortex®-M7 processor programming manual (PM0253)
• STM32F3 and STM32F4 Series Cortex®-M4 programming manual (PM0214)
• STM32F10xxx/20xxx/21xxx/L1xxxx Cortex®-M3 programming manual (PM0056)
• STM32L0 Series Cortex®-M0+ programming manual (PM0223)

Таблица 1. Процессоры STM32, которые имеют блок MPU.

[Обзор системы MPU]

MPU может быть использован для повышения устойчивости и надежности системы, предоставляя следующие возможности:

• MPU запрещает пользовательскому приложению изменять данные, используемые критическими задачами (такой, как ядро операционной системы).
• MPU определяет область памяти SRAM как неисполняемую для предотвращения атаки внедренного кода.
• MPU изменяет атрибуты доступа к памяти.

MPU может быть использован для защиты 8 областей памяти. В свою очередь, они могут иметь 8 подобластей, если размер области не менее 256 байт. Подобласти всегда имеют равный размер, и могут быть включены или отключены с использованием номера подобласти. Поскольку минимальный размер области зависит от длины строки кэша (32 байта), 8 подобластей по 32 байта соответствует 256 байтам.

Области пронумерованы от 0 до 7. В дополнение есть другая область, названная областью по умолчанию, с идентификатором -1. Все области памяти в диапазоне от 0 до 7 имеют приоритет над областью по умолчанию.

Области могут перекрываться, и могут быть вложенными. Область 7 имеет более высокий приоритет, область 0 - низкий, и это определяет поведение перекрывающихся областей. Приоритеты фиксированы и не могут быть изменены.

Рис. 1 показывает пример с 6-ю областями. Этот пример показывает, что область 4 перекрывает области 0 и 1. Область 5 включена полностью в область 3. Так как приоритет идет в порядке возрастания, у областей перекрытия (желтые) есть приоритет над другими областями. Таким образом, если область 0 определена как доступная для записи, а область 4 наоборот, недоступная, то адрес, попадающий в зону перекрытия областей, не будет доступен для записи.

Рис. 1. Пример перекрытия областей.

MPU един для процессора, что означает отсутствие разделения областей для данных и команд.

MPU может быть использован для определения других атрибутов памяти, таких как кэширование, которые могут быть экспортированы (применены) в системном блоке кэш-памяти или в контроллере памяти.

Управление кэшем происходит глобально посредством регистра команд кэша, но MPU может определить политики кэша, и будет ли область кэшируемой или нет. MPU позволяет установить атрибуты кэша для области кэшем уровня L1 (доступно только для серии STM32F7, у которой есть кэш L1).

Модель памяти. В архитектуре STM32 процессор имеет по умолчанию фиксированную карту распределения памяти, которая предоставляет до 4 гигабайт адресуемой памяти. На рис. 2 показана карта распределения памяти.

Рис. 2. Распределение адресного пространства процессора.

[Типы памяти, регистры и атрибуты]

Карта распределения памяти и настройка MPU разделяют карту на области. Каждая область имеет определенный тип памяти и её атрибуты.

Типы памяти. Есть три общих типа памяти:

• Память Normal: позволяет загружать и хранить байты, полуслова и слова, которые будут эффективно расположены процессором (компилятору неизвестно о типах областей памяти). Для этой области загрузка/хранение не обязательно выполняется для процессора в том порядке, который определен в исходном коде программы.

• Память Device: в этом регионе загрузка и хранение совершаются в строго упорядоченном виде. Это должно гарантировать, что последовательность загрузки регистров выполнена в надлежащем порядке.

• Строго упорядоченная память: всегда выполняется в порядке, написанном в программе, ожидает завершения инструкции записи/хранения (эффективный доступ к шине) прежде, чем выполнить следующую инструкцию в потоке программы. Это может серьезно увеличить производительность.

Регистры MPU. Регистры MPU расположены по адресу 0xE000ED90. Есть 5 основных регистров MPU и несколько регистров-псевдонимов (alias registers) для каждой области. Следующие регистры используются для установки областей в MPU:

MPU_TYPE регистр только для чтения, используется для детекции наличия MPU.
MPU_CTRL регистр управления.
MPU_RNR номер области, используется для определения допустимых операций к ней.
MPU_RBAR базовый адрес области.
MPU_RASR атрибуты области и размер.
MPU_RBAR_An n-й псевдоним MPU_RBAR, где n в диапазоне от 1 до 3 (a) .
MPU_RASR_An n-й псевдоним MPU_RASR, где n в диапазоне от 1 до 3 (a) .

Примечание (a): В Cortex®-M0+ эти регистры не реализованы.

Для получения подробной информации про регистры MPU обратитесь к руководствам, приведенным во врезке "Дополнительная информация про MPU".

Атрибуты памяти. В регистре атрибутов и размера (MPU_RASR) устанавливаются все атрибуты памяти. Таблица 2 показывает краткое описание регистра атрибутов и размера.

Таблица 2. Регистр атрибутов и размера области - MPU_RASR.

XN. Этот флаг XN управляет выполнением кода. В случае выполнения команд в области должен быть разрешен доступ на чтение на уровне привилегий и XN должен быть 0. Иначе будет сгенерирована ошибка управления памятью (MemManage).
AP. Это поле разрешения доступа к данным (см. таблицу 3).

Таблица 3. Права доступа к регионам памяти.

S. Поле S для области совместно используемой памяти: система обеспечивает синхронизацию данных между устройствами управления шиной в системе с многократными устройствами управления шиной, например, процессор с контроллером DMA.
TEX, C, B. Биты TEX, C и B используются для определения свойств кэша области и возможности его совместного использования. Варианты представлены в таблице 4.

Таблица 4. Свойства кэша и его совместное использование.

SRD. Это биты отключения подобласти, которые определяют, включена ли определенная подобласть или нет. Отключение подобласти означает, что другая область, перекрывающая отключенный диапазон, соответствует ей вместо этого. Если никакая другая включенная область не перекрывает отключенную подобласть, MPU генерирует ошибку.

Для моделей с реализованным кэшем (только для серии STM32F7, у которой есть кэш L1) существуют дополнительные атрибуты памяти:

• Кэшированный или не кэшированный: означает, что выделенные области могут быть сохранены в кэше или нет.
• Прямая запись без выделения записи: при успехе записывает в кэш и основную память, при пропуске обновляет блок в основной памяти, не переносящей этот блок в кэш.
• Обратная запись без выделения записи: при успехе пишет в кэш "грязный бит" для блока,основная память не обновляется. При пропуске обновляет блок в основной памяти, не переносящей этот блок в кэш.
• Обратная запись с выделением чтения и записи: при успехе пишет в кэш, с установкой "грязного бита" для блока, основная память не обновляется. При пропуске обновляет блок в основной памяти и переносит блок в кэш.

[Сравнение характеристик MPU у различных моделей процессоров]

Есть несколько различий между уровнями MPU Cortex®-M0+, Cortex®-M3/M4 и Cortex®-M7, поэтому программист должен знать о них, если в программном обеспечении будет использоваться конфигурирование MPU. Таблица 5 показывает различия характеристик MPU между Cortex®-M0+, Cortex®-M3/M4 и Cortex®-M7.

Таблица 5. Сравнение характеристик MPU STM32.

Примечание (1). Cortex®-M0+ поддерживает один уровень политики кэша, поэтому поле TEX недоступно в cortex®-M0+.

Таблица 6 описывает пример настройки MPU со следующими областями памяти: Внутренняя память SRAM, Флэш-память и периферийные устройства. По умолчанию карта распределения памяти используется для привилегированного доступа в качестве фоновой области памяти, MPU не включен для обработчика отказа HARD и NMI.

Внутренняя память SRAM: 8 Kбайт статической памяти (SRAM) будут сконфигурированы как Region0. Атрибуты памяти: общедоступная память, прямая запись без выделения записи, права полного доступа и включено выполнение кода.

Флэш-память : вся флэш-память будет сконфигурирована как Region1. Атрибуты памяти : не общедоступная память, прямая запись без выделения записи, права полного доступа и включено выполнение кода.

Область периферии: будет сконфигурирована как Region2. Атрибуты памяти: общедоступное устройство, права полного доступа и выключено выполнение кода.

Таблица. 6. Пример настройки MPU.

[Заключение]

Использование MPU в микроконтроллерах STM32 делает их устойчивыми, надежными, и в некоторых случаях более безопасными, препятствуя задачам приложения получить нежелательный доступ к стеку или области памяти, или повредить стек и память данных, используемые другими задачами.


В этой статье мы подробнее расскажем о поддержке энергонезависимой памяти (NVDIMM) в ПО RAIDIX 4.6. Новую версию ПО взяли на вооружение наши ключевые партнеры. Так, управляющее ПО RAIDIX 4.6 уже используется в новой СХД Trinity FlexApp от «Тринити».

Персистентная память и стандарт NVDIMM

Новый RAIDIX работает с персистентной памятью (PMEM), которая объединяет в себе преимущества традиционных устройств хранения данных и большую пропускную способность памяти DRAM. Данный тип памяти допускает побайтовую адресацию (load/store), и – в отличии от традиционных «блочников» – функционирует со скоростью DRAM и соответствующими низкими задержками. В случае потери питания на сервере все содержимое памяти остается нетронутым и может быть восстановлено после загрузки. В настоящее время этот тип памяти доступен в форме модулей NVDIMM (Non-Volatile Dual Inline Memory Module).

Модули NVDIMM явили собой пример комплексного использования двух технологий: оперативной и энергонезависимой памяти. Сам по себе стандарт не является новинкой: он был утвержден пару лет назад, и многие компании уже представили свои модули памяти с «батарейкой». Однако, в связи с активным развитием микросхем Flash, современный NVDIMM стал включат в себя достаточный объем NAND-памяти. Теперь NVDIMM позволяет не только сохранить целостность данных на момент аварийного отключения питания, но и кэшировать все проходящие через ОЗУ данные на лету.

Энергонезависимая память NVDIMM бывает разных видов: NVDIMM-N, NVDIMM-F, NVDIMM-P. Модуль типа NVDIMM-N включает в себя как микросхему SDRAM (ОЗУ), так и микросхему флеш-памяти (SSD) для резервного хранения данных ОЗУ на случай аварии.

Если NVDIMM-N — это «оперативка» с расширенным функционалом, то NVDIMM-F – это своего рода хранилище. В «F» модулях нет ячеек ОЗУ, они содержат только микросхемы Flash-памяти. NVDIMM-P комбинирует функции NVDIMM-F и NVDIMM-N в рамках одного модуля. Доступ идёт одновременно как к DRAM, так и к NAND на одной планке. Все три конфигурации позволяют существенно увеличить производительность при работе с большими данными, HPC и т.д.

В 2017 году произошел своего рода прорыв в отношении памяти NVDIMM в серверном сегменте. Компания Micron представила новые модули емкостью 32 Гбайт. Эти модули работают на частоте DDR4-2933 с задержками CL21 — что гораздо быстрее других DDR4 для серверного применения. Несколько раньше были выпущены модули памяти на 8 и 16 Гбайт.



Рис.1 Модуль 32GB DDR4 NVDIMM-N от Micron

NVDIMM-N от Micron представляет собой память ECC DRAM с полностью доступными 32 Гбайт, при этом NAND Flash используется только для резервирования данных.

Доступ к NVDIMM

Cуществуют два основных способа установления доступа к памяти на NVDIMM:

1. Прямой доступ с помощью PMEM

Прямой доступ к модулям с помощью PMEM без объединения в единое пространство используется в RAIDIX 4.6. В этом случае физическое адресное пространство NVDIMM (DPA) приводится в соответствие с физическим адресным пространством системы SPA. Если в системе есть несколько планок NVDIMM, контроллер памяти может отобразить их на свое усмотрение. Например, так:



Рис. 2 Схема прямого доступа с помощью PMEM

Соответственно, доступ к модулям будет осуществляться как к единой сущности. Это не всегда предпочтительный вариант. В некоторых случаях необходимо получить доступ к каждой планке отдельно, например, чтобы собрать из них RAID. Для таких задач существует второй режим.

2. Доступ с помощью BLK apertures

Доступ осуществляется к каждой планке отдельно с помощью так называемых «окон» доступа:



Рис. 3 Схема доступа с помощью BLK apertures

Современные планки NVDIMM часто поддерживают оба этих режима одновременно. Для этого используются пространства имен аналогично тому, как это делается на NVMe устройствах. Также, если NVDIMM соответствует NFIT (NVDIMM Firmware Interface Table), то в начале каждого модуля хранятся специальные заголовки (labels), согласно которым адресное пространство делится на области с разным режимом доступа (BLK или PMEM).

Крайне важно, чтобы эти области не пересекались, так как параллельный доступ к одной области с использованием разных методов скорее всего приведет к порче данных. (Подробнее прочитать о NFIT можно в описании стандарта ACPI 6.1.)

Защита кэша на запись с NVDIMM в RAIDIX 4.6

Организация пространства

До версии 4.6 операция обновления блока лидирующим контроллером в RAIDIX сопровождалась синхронной копией блока в оперативную память ведомого контроллера. В случае отключения питания требовался существенный запас энергии в UPS, достаточный для того, чтобы кластер успел сохранить все копии блоков на диски перед полным выключением. При возврате питания требовалось существенное время для заряда батарей перед тем, как кластер мог быть приведен в рабочее состояние. Совокупное время простоя зависело как от потребляемой мощности кластера, так и от емкости батарей, которая в свою очередь зависела от качества обслуживания и условий эксплуатации СХД.

В одноконтроллерном режиме существовали риски потери данных при аварийных перезагрузках и нехватки емкости батарей в источниках резервного питания при вертикальном масштабировании решения.

Заложенная в версии 4.6 новая функциональность позволяет упростить обслуживание системы и избежать внедрения избыточных аппаратных компонентов. Как это реализуется технически?
NVDIMM используется в качестве более надежного места хранения нашего кэша, чем в RAM. Для этого необходимо получить адрес в виртуальном адресном пространстве и охватить весь размер области, необходимой для получения доступа.

Ниже приводим примерную схему организации хранения информации:



Рис. 4 Схема расположения данных и метаданных

Сначала разделим все доступное пространство на несколько пространств имен. На них будут храниться данные и метаданных, описывающие их расположение на RAID'ах. Также метаданные несут в себе идентификаторы для однозначного опознавания данных и возможности их восстановления после аварийного сбоя.

Какую память использовать?

В данной статье мы остановимся на взаимодействии RAIDIX 4.6 с персистентной памятью NVDIMM-N от Micron. Итак, NVDIMM позволяет сохранить целостность данных даже при аварийном отключении питания. При этом продукт Micron сочетает в себе быстродействие DRAM со стабильностью и надежностью NAND-памяти, позволяя обеспечить целостность данных и непрерывность рабочих процессов.

В случае аварии внутренний контроллер NVDIMM перемещает данные, хранящиеся в DRAM, в область энергонезависимой памяти. После восстановления системы контроллер без потерь переносит данные из NAND-памяти обратно в ОЗУ, позволяя приложениям продолжить работу. В качестве резервного источника питания для Micron NVDIMM может выступать ультраконденсатор AgigA Tech PowerGEM.



Рис.5 Модуль NVDIMM с ультраконденсатором AgigA PowerGEM

Технология NVDIMM в реализации Micron представляет собой комбинацию энергозависимой и энергонезависимой памяти (NAND Flash, DRAM и автономный источник энергии в подсистеме памяти). DDR4 NVDIMM-N от Micron обеспечивает высокую скорость чтения и записи DRAM и резервное копирование данных DRAM в случае потери источника питания.

Ниже — чуть подробнее о процессе переноса данных без потерь.

Процесс переноса данных

В новой версии система производит запись данных с учетом состояния суперконденсаторов (гарантийный срок службы — до 5 лет), питающих только NVDIMM-N. Гарантия целостности данных связана с точностью оценки запаса энергии, которая требуется для переноса данных в энергонезависимую память.

Персистентная память объединяет в себе преимущества традиционных устройств хранения данных и большую пропускную способность DRAM-памяти. Особенностью персистентной памяти является побайтовая адресация с высокой скоростью и очень маленьким временем задержки.

Модули NVDIMM-N в течении одной минуты после аварийного отключения питания самостоятельно вытесняют данные из DRAM в NAND. Процесс переноса сопровождается соответствующей индикацией. По завершении переноса модули могут быть извлечены из неисправного контроллера и помещены в исправный, как обычные DIMM модули. Эта функция актуальна для всех одноконтроллерных конфигураций, начиная с бюджетных дисковых решений и заканчивая специализированными твердотельными.

В чем преимущество?

В конфигурации с двумя контроллерами любой из NVDIMM-N модулей заменяется вместе с контроллером в любой удобный момент, без прерывания доступа к данным. Когерентность NVDIMM может быть обеспечена не только программными, но и аппаратными средствами. Таким образом, исчезает необходимость обслуживать аккумуляторы (BBU в старых RAID-контроллерах или UPS). При вертикальном и горизонтальном масштабировании решения больше не требуется переоценка рисков потери данных!

Функции СХД Trinity FlexApp на базе RAIDIX 4.6

В рамках СХД Trinity FlexApp каждый контроллер представляет из себя обычный сервер c NVDIMM-N модулями, установленными в слоты памяти:



Рис.6 Компоненты СХД Trinity FlexApp

Поддержка 100 Гбит

Система предоставляет администраторам возможность подключения к клиентским машинам с Linux посредством высокопроизводительных интерфейсов InfiniBand Mellanox ConnectX-4 100 Гбит. В результате система обеспечивает минимальные задержки и повышенную производительность в сфере больших данных, HPC и корпоративной среде. Кроме того, в ПО внесен целый ряд улучшений в плане удобства использования и управления ресурсами.

Cluster-in-a-box

СХД Trinity FlexApp на базе RAIDIX поддерживает гетерогенные кластеры в режиме Active-Active, что позволяет вертикально масштабировать систему без прерывания доступа к данным и с быстрой заменой контроллеров на более современные и производительные. Таким образом, сводятся к минимуму возможные текущие и будущие риски по качественному развитию системы в целом.

Высокая производительность и защита данных

Ключевые задачи системы — безопасность, согласованность и оперативность одновременного доступа к данным для определенных групп пользователей и конкурентных подключений на основе корпоративных политик и каталогов. Кроме того, RAIDIX включает в себя механизм Silent Data Corruption Protection и обеспечивает устойчивость к ошибкам, связанным с искажением данных на уровне дисков (помехи при чтении, резонанс при вибрациях и ударах).

Решения под управлением RAIDIX на базе NVDIMM-N уже используются не только в России, но и за рубежом. Например, в HPC-проектах для крупнейшего научного кластера в Японии. Программно-определяемая технология RAIDIX отвечает потребностям высокопроизводительных вычислений, обеспечивая неснижаемую скорость вычислений (до 25 ГБ/с на ядро процессора), высокую отказоустойчивость (патентованные уровни RAID — 6, 7.3, N+M), масштабируемость и совместимость с Intel Lustre*.

Модули памяти NVDIMM являют собой пример совместного использо­ва­ния двух технологий: оперативной и энергонезависимой памяти. Как известно, оперативная память обладает высоким быстродействием, но ее содержимое разрушается при выключении или перезапуске платфор­мы. Энергонезависимая или flash-память сохраняет информацию при отсутствии электропитания, но скорость ее работы сравнительно низкая, особенно при записи информации. Почему бы не объединить преимущества этих двух видов устройств хранения данных?

В сеансе работы системы, модули NVDIMM функционируют как динамическая оперативная память, включенная в адресное пространство вычислительной платформы. При отключении электропитания или по специальному сигналу, ее содержимое может быть скопировано в энергонезависимую Flash-память. При последующем перезапуске платформы, информация будет восстановлена и система быстро вернется в первоначальное состояние. Очевидно, для обеспечения процесса сохранения данных, который должен начаться после выключения основного электропитания, требуется дополнительный источник питания. Таким источником может быть блок аккумуляторов, батарей или конденсаторов большой емкости, как правило выполняемый в конструктивном исполнении PCI-Express адаптера или дискового накопителя и соединяемый с модулем памяти несколькими проводами для передачи питания и управления.

Модуль NVDIMM с подключенной платой резервного питания


Рис 1. Модуль NVDIMM с подключенной платой резервного питания

Почему архитектура именно такая?

Описанная архитектура, при реализации которой в адресном пространстве находится только оперативная память (DRAM) и у центрального процессора нет прямого доступа к Flash, классифицируется как NVDIMM-N.

Теоретически, есть и более простой метод, основанный на непосредственном включении энергонезависимой Flash-памяти в адресное пространство вычислительной платформы. Он давно уже используется для микросхем-носителей встроенного программного обеспечения или firmware, также известного как BIOS (Basic Input-Output System). Но как альтернатива оперативной памяти такой путь неприемлем, поскольку Flash-память обладает сравнительно низким быстродействием, кроме того, количество циклов перезаписи у нее ограничено.

Опция очистки Clear NVDIMM Flash в меню InsydeH2O Setup Utility


Рис 2. Опция очистки Clear NVDIMM Flash в меню InsydeH2O Setup Utility

Доступ к энергонезависимому содержимому NVDIMM с помощью программного обеспечения UEFI BIOS демонстрирует необычайную рефлексивность: пользователю предоставляется возможность удаления flash-информации. Хорошим примером может служить функциональность Insyde BIOS, обеспечивающая дополнительное удобство в обслуживании подсистемы памяти.

Еще один путь — использовать резервное аккумуляторное питание для оперативной памяти и таким образом обойтись без Flash-памяти. Недостаток очевиден — ограниченное время хранения информации.

Проблема кэширования

Сегодня ни одна вычислительная платформа не обходится без кэш-памяти (Cache), представляющей из себя быстродействующий буфер между вычислительным ядром и «внешним миром». Информация, прочитанная процессором из оперативной памяти, сохраняется в кэш-памяти. При повторном обращении к тем же данным, они будут предоставлены из кэш-памяти, что значительно быстрее доступа к оперативной памяти. Другим фактором увеличения быстродействия является отложенная запись или Write-back mode. Смысл метода в том, что запись данных выполняется в кэш, без немедленного переноса информации в оперативную память, а потому очень быстро. И только при необходимости вытеснения информации из кэш, например для размещения новых данных, требуется запись в «медленную» оперативную память. Какое отношение эти банальные истины имеют к NVDIMM? Вспомним, что в момент выключения электропитания или перезапуска системы, внутри модуля NVDIMM должен быть выполнен процесс копирования информации из оперативной памяти в энергонезависимую. Но в режиме отложенной записи, актуальная копия данных существует только в кэш, а в оперативной памяти находятся устаревшие данные, которые и будут перенесены в энергонезависимую память. Более «свежие» актуальные данные будут потеряны.

Решение проблемы — принудительно синхронизировать содержимое кэш и оперативной памяти. Но сделать это необходимо без нивелирования позитивного эффекта от кэширования данных, так, чтобы не снизить быстродействие системы. Именно это требование стало причиной введения компанией Intel двух новых процессорных команд.

Ассемблерная инструкция CLWB (Cache Line Write Back) выполняет копирование данных, подлежащих отложенной записи из кэш-памяти в оперативную память. При этом, данные не вытесняются из кэш-памяти и доступны для дальнейшего использования. Этим новая инструкция CLWB отличается от достаточно давно существующей инструкции CLFLUSH (Cache Line Flush), которая в свою очередь форсирует копирование данных в оперативную память с удалением их из кэш-памяти.

Ассемблерная инструкция PCOMMIT (Persistent Commit) форсирует отложенную запись в оперативную память для всех диапазонов адресного пространства, статус которых, в системных регистрах процессора декларирован как Persistent Memory или Non Volatile Storage.


Рис 3. Результат выполнения функции 7 подфункции 0 инструкции CPUID. Биты 22,23,24 регистра EBX индицируют поддержку инструкций PCOMMIT, CLFLUSHOPT, CLWB соответственно.

Назначение статуса диапазонов, требующих такой синхронизации, выполняется встроенным программным обеспечением, или firmware, при старте вычислительной платформы. При этом для идентификации модулей памяти используется информация, прочитанная из микросхем SPD (Serial Presence Detect).

Предоставление операционной системе сведений о диапазонах адресного пространства, содержащих NVDIMM базируется на ACPI-таблице NFIT (NVDIMM Firmware Interface Table), генерируемой firmware при старте платформы и выполнении процедуры Power-On-Self-Test (POST).


Рис 4. Функциональность таблицы NFIT (NVDIMM Firmware Interface Table), согласно спецификации ACPI 6.0.

Несмотря на то, что модули NVDIMM построены на основе уже достаточно долго существующих технологий, в частности DDR3/DDR4 RAM и NAND Flash, появление устройств, сочетающих в себе преимущества оперативной и энергонезависимой памяти бросает вызов традиционной классификации видов компьютерных устройств хранения данных. А это в свою очередь, может привести к появлению принципиально новых архитектур вычислительных платформ.

Возможность защиты кэша на запись при помощи энергонезависимой памяти NVDIMM-N

Энергонезависимая память NVDIMM используется для сохранения целостности данных при использовании механизма write-back кэш. Write-back кэш позволяет записывать данные на диск оптимальным способом, что существенно повышает производительность системы.

Принцип работы write-back кэша заключается в том, что данные сначала помещаются в оперативную память (в кэш), а затем в упорядоченном виде подаются непосредственно на накопитель. При такой схеме существует промежуток времени, когда данные переданы в кэш, но еще не записаны на диск. Здесь возникает необходимость защиты модуля оперативной памяти от отключения питания для сохранения целостности данных.

Принцип работы

ПО RAIDIX работает с персистентной памятью (PMEM), которая объединяет в себе преимущества традиционных устройств хранения данных и большую пропускную способность памяти DRAM. Данный тип памяти функционирует со скоростью DRAM и соответствующими низкими задержками. PMEM реализуется на модулях NVDIMM (Non-Volatile Dual Inline Memory Module), которые представляют собой комплексное использования технологий оперативной и энергонезависимой памяти.

Это позволяет использовать их в качестве надежных кэш накопителей, которые обеспечат целостность данных на момент аварийного отключения питания.

В стандартном режиме NVDIMM работает как обычный модуль оперативной памяти. Сопутствующий суперконденсатор (ультраконденсатор) имеет накопленный заряд. В момент отключения питания данные фиксируются в NAND-памяти модуля при помощи заряда суперконденсатора. При возобновлении питания данные записываются на основной накопитель, а суперконденсатор восстанавливает заряд.

Возможности технологии

NVDIMM является простым и надежным способом защиты write-back кэша при отключения питания системы. Использование NVDIMM характеризуется рядом ключевых особенностей:

• Длительность хранения данных в аварийном режиме не зависит от заряда аккумулятора и ограничивается естественным ресурсом NAND-памяти.
• Технология поддерживается в одноконтроллерном и двухконтроллерном режимах.
• Производительность до 10 раз выше по сравнению с синхронной записью на диски.
• Является уникальной технологией для программно-управляемых СХД.
• Возможность гибкого перехода на новые модели NVDIMM.

Перед началом основной беседы о важности объема кэш-памяти у процессоров остановлюсь на криптовалюте Raptoreum, которая, собственно, и подтолкнула меня написать этот блог. Кто хочет узнать, что ожидает всех майнеров и геймеров в следующем году, когда появятся видеокарты на рынке, вероятный прогноз развития событий можно найти здесь.

реклама


А теперь о Raptoreum. Важно! Не поддавайтесь на провокации, относительно этой криптовалюты, которая добывается на мощностях кэш-памяти центральных процессоров! Чем больше кэш-память второго и любого последующего уровня (при его наличии), тем быстрее происходят расчёты, результатом которых является условный доход. Так как сейчас на рынке именно у процессоров AMD самый «жирный» кэш, то наличие их на полках магазинов и соответственно рекомендованной стоимости этих процессоров под угрозой со стороны новой криптовалюты. Под удар могут попасть старейшие модели AMD Ryzen и все Threadripper.

MSI RTX 3070 сливают дешевле любой другой, это за копейки Дешевая 3070 Gigabyte Gaming - успей пока не началось

А теперь поговорим о кэш-памяти процессора. При решении задач процессор получает из оперативной памяти необходимые блоки информации, обработав их, он записывает в память результаты вычислений и получает для обработки следующие блоки. Этот процесс продолжается, пока задача не будет на 100% выполнена.


Все эти операции производятся на очень высоких скоростях, от десятков гигабайт в секунду у процессоров 20-ти летней давности, до сотен гигабайт в секунду у современных процессоров. Все это время процессор обменивается данными с оперативной памятью, которая работает в разы медленнее самого процессора. Каждое считывание из нее и обратная запись информации в неё отнимают уйму времени.

реклама

var firedYa28 = false; window.addEventListener('load', () => < if(navigator.userAgent.indexOf("Chrome-Lighthouse") < window.yaContextCb.push(()=>< Ya.Context.AdvManager.render(< renderTo: 'yandex_rtb_R-A-630193-28', blockId: 'R-A-630193-28' >) >) >, 3000); > > >);

Несмотря на такой дисбаланс, процессор не простаивает в ожидании очередной порции данных из оперативной памяти, так как эти данные подгружаются в его кэш-память.

Кэш-память процессора – это небольшая по объему, но супербыстрая оперативная память. Она встроена в процессор и является своеобразным буфером, при обмене CPU данными с медленной оперативной памятью, а в современных реалиях еще и с NVME SSD и видеокартой.


В большинстве процессоров используется многоуровневая система кэша:

реклама

• Кэш-память первого уровня или L1 – самая маленькая, но и самая быстрая область кэш-памяти. Её объем не превышает пару десятков килобайт. Работает L1 без каких-либо задержек. В нем содержатся данные, которые чаще всего используются процессором.

• Кэш-память второго уровня (L2) чуть медленнее кэш-памяти L1, но и объем ее в современных процессорах измеряется уже в мегабайтах. Служит она для временного хранения важных данных, вероятность запроса которых ниже, чем у данных, находящихся в L1 кэше.

• Кэш-память третьего уровня (L3) – еще более объемная и еще более медленная. Но она все равно быстрее любой оперативной памяти, даже новой DDR5. Со скоростями в несколько сотен гигабайт в секунду пока еще приходится считаться. Ее размер в современных процессорах в мейнстрим сегменте достигает нескольких десятков мегабайт, а в серверных AMD Epyc счет пошел уже на сотни мегабайт. В отличие от L1 и L2, кэш третьего уровня является общим для всех ядер процессора.

L3 кэш служит для временного хранения важной информации с относительно низкой вероятностью запроса, а также для обеспечения обменом данными между ядрами процессора.

реклама


А теперь небольшой экскурс в развитие и эволюцию кэш-памяти. Если за отправную точку взять Pentium 1, то кэша L2 у него не было. L1 был объёмом 32 Кб. L2 как правило распаивался на материнской плате. Когда появился Pentium II, то L2 сразу стал равным 512 Кб, но он располагался рядом с ядром процессора на отдельной микросхеме и имел низкую скорость, но все равно это лучше, чем ничего.

Pentium-III с Socket 370 имел уже половину объема от Pentium II – 256 Кб, но зато этот кэш был быстрее, так как он был интегрирован в кристалл процессора. Pentium 4 вначале удвоил этот объём до 512 Кб, так называемый Nothwood, а последовавшее за ним ядро Prescott довел L2 до 1 Мб. Это уже объём дней сегодняшних.


Во времена Pentium 4 случилось еще одно важное событие: у Pentium 4 Extreme Edition впервые появился L3 кэш. До этого момента в десктопах такого явления не было. Объем L3 равнялся «жирным» 2 мегабайтам, что положительно влияло на производительность и цену процессора.


После смены с 478 на 775 контактов без ножек, первые “новые” Pentium с ядрами Prescott-2M и Cedar Mill увеличили L2 до 2-х мегабайт, а L1 так и оставался в пределах 32 Кб.

Микроархитектура Core2 и Core2 Quad значительно увеличили объемы кэшей. Так, объем L2 кэша уже варьировался от 4 до 12 Мб, но эти цифры нужно поделить на два, из особенности организации кэша, так как группы ядер по факту взаимодействовали только с половиной этого объема, но суммарный объем был именно таким.

Микроархитектура Sandy Bridge поделила процессоры на различные линейки в зависимости от объема L2 кэша. В этот момент времени, именно объем кэш-памяти начинает решать главенствующую роль в позиционировании и производительности процессоров.


Так, i5-2500К отличался от i7-2600K только объемом кэша. И надо отметить, речь уже идет о L3 кэше, который начинает появляться уже повсеместно. В первом случае L3 = 6 Мб, во втором 8 Мб. L2 у обеих моделей равнялся 256 Кб на одно ядро, а L1 был равен по-прежнему 32 Кб.

Далее происходит рост L3 у последующих поколений. У i9-9900K он уже равен 16 Мб. Параллельно развивается HEDT линейка процессоров Intel, где L3 уже достигает 24.5 Мб. Но дальнейшее развитие всей процессорной архитектуры меняют процессоры AMD с микроархитектурой ZEN и производные от них. Стартовало первое поколение AMD Ryzen c L2 = 512 Кб и L3 = 8 Мб, а на сегодняшний день топовый Ryzen Gen3 уже обладает 64 Мб L3 кэша. Недавний анонс новых серверных процессоров AMD Epyс вообще увеличил объем L3 до астрономических 768 Мб.


Таким образом, система кэшей процессора позволяет частично уйти от зависимости от низкой производительности оперативной памяти, ведь процесс развития процессоров и скорости их кэшей намного опережает скорость оперативной памяти. Важно отметить и тот факт, что чем больше кэша у процессора, тем выше его производительность.

Поэтому при выборе того или иного процессора, обращайте внимание на объем L3 кэша процессора. Возможно, в будущем, объемы порядка пары гигабайт L3 кэша станут нормой, но а пока следим за стоимостью AMD Ryzen, в зависимости от популярности Raptoreum. Надеюсь, этот блог оказался для вас полезным.

Читайте также: