Почему CLFLUSH существует в x86?

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

Мой вопрос: почему CLFLUSH необходим в x86? Каковы причины того, чтобы когда-либо использовать эту инструкцию, если все кэши L* действуют прозрачно (т.е. не требуется явная аннулирование кэша)? Кроме того: разве процессор не может спекулировать шаблонами доступа к памяти и, таким образом, вообще игнорировать инструкцию?

1 ответ

Решение

Я думаю, в основном для таких странных вещей, как кешируемые регионы MMIO.

Skylake представила слабо упорядоченную высокопроизводительную CLFLUSHOPT, поскольку она полезна для энергонезависимого хранилища, подключенного непосредственно к иерархии памяти. Очистка кеша гарантирует, что данные записываются в реальную память, а не остаются грязными в процессоре.

Это потенциально также имеет значение для DMA, не связанного с кэшем, для устройств, если что-то еще можно сделать в x86. (Вероятно, нет; я думаю, что все DMA сейчас связано с кэшем.)

Я не эксперт в этом, и это не означает, что это полный ответ, охватывающий все варианты использования.

Другие вопросы по тегам