Что делает инструкция PCOMMIT?

В руководстве по расширению Intel ISA описание для pcommit немного загадочно:

PCOMMIT инструкция приводит к тому, что определенные операции сохранения в памяти для постоянных диапазонов памяти становятся постоянными (защита от сбоя питания). В частности, PCOMMIT относится к тем магазинам, которые были приняты в память.
[...]
Если PCOMMIT выполняется после того, как хранилище в постоянной области памяти принято в память, хранилище становится постоянным, когда PCOMMIT становится глобально видимым.
[...]
Данные в хранилище в постоянную память становятся постоянными (долговечными) только после того, как они были либо записаны на целевое энергонезависимое устройство, либо в некоторое промежуточное защищенное хранилище / буфер при сбое питания.

Он называет такие понятия, как постоянные диапазоны памяти, хранилища, принятые в память, хранилища, становящиеся постоянным и энергонезависимым устройством 1.

Каков точный контекст?


1 Это не могут быть классические устройства NV, такие как NOR Flash ROM или устройства NVMe (читай: новые твердотельные накопители), так как они находятся за переменным числом мостов, включая субтрактивные декодирующие, над которыми ЦПУ не имеет контроля.

1 ответ

Решение

Прежде всего pcommit устарел даже перед отправкой на реальный процессор.
Большая часть этого ответа основана на содержании ссылки выше.


Intel совместно с Micron разработали новую форму энергонезависимой памяти (NVM) под названием 3D XPoint (из ее внутренней структуры).
Фактическая реализация в виде дискового кеша уже доступна, и Intel недавно начала готовиться к более широкому внедрению своей технологии NVM.

В частности, Intel представила, что некоторые из модулей DIMM могут содержать часть, созданную по технологии 3D XPoint, и, таким образом, представлять собой энергонезависимое устройство.

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

Когда магазин сделан, он проходит:

  • Буфер магазина.
    Магазин заполнен / виден локально, но не глобально.
    Буфер хранилища может быть очищен различными инструкциями (например, sfence).
  • Иерархия кеша.
    Хранилище является глобально видимым (протокол согласованности кэша обеспечивает это).
    Кэш может быть очищен различными инструкциями (например, clflush, clflushopt, clwb, и другие).
  • Контроллер памяти пишет очередь ожидания (WPQ).
    Хранилище принято в память, но еще не записано в модули DIMM.
    WPQ может быть сброшен через определенные регистры конфигурации PCIe контроллера памяти или с pcommit,
  • Память.
    Магазин фиксируется / записывается в память.

В какой точке путь данных над хранилищем находится в постоянном домене и, таким образом, не будет потерян в случае сбоя питания?
Некоторые контроллеры памяти имеют функцию асинхронного обновления DRAM, которая гарантирует, что даже в случае отключения питания WPQ корректно сбрасывается (например, благодаря батарее).
Для этих платформ постоянный домен начинается с WPQ.

Intel, однако, была обеспокоена тем, что не все платформы имели бы функцию ADR и создали pcommit инструкция как способ убедиться, что магазины вошли в домен постоянства (pcommit исполняется в пользовательском режиме).

Вот как магазин должен был быть постоянным

mov [X], rax     ;Store

;Here the store has started moving to the store buffer

clwb [X]

;Here the store has moved to the cache (CLWB is ordered with previous stores) 
;and then starting moving to the memory controller WPQ 
;(the line containing X has been written back)

sfence           ;Wait for CLWB to become globally visible

;Here the store is in the WPQ

pcommit         

;The store is being committed

sfence          ;Wait for pcommit to become globally visible

;The store is committed

Оказалось, что каждая платформа, которая планирует поддерживать новую технологию Intel NVM, также планирует поддерживать ADR, поэтому Intel устарела pcommit в пользу более простой модели программирования:

mov [X], rax
clwb [X]
sfence         

;Here the store is in the WPQ and that's enough
Другие вопросы по тегам