2016-09-05 9 views
8

Я недавно узнал о нападении row hammer. Чтобы выполнить эту атаку, программисту необходимо очистить всю иерархию кэша процессора для определенного количества адресов.Почему CLFLUSH существует в x86?

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

ответ

6

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

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

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

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