Я думаю, можно предположить, что нет; выпечка invlpg
в clflush
звучит как безумное дизайнерское решение, которое, я думаю, никто не примет. Вы часто хотите сделать недействительными несколько строк на странице. Там также нет очевидной выгоды; очистка TLB также не облегчает реализацию очистки кэша данных.
Даже простое удаление окончательной записи TLB (без необходимости отмены кэширования каталога страниц) будет слабее, чем invlpg
, но все равно не имеет смысла.
Все современные x86 используют кеши с физическим индексированием / тегами, а не виртуальные. (Кэши VIPT L1d на самом деле являются PIPT со свободной трансляцией индекса, потому что они взяты из битов адреса, которые являются частью смещения на странице.) И даже если кэши были виртуальными, аннулирование записей TLB требует аннулирования виртуальных кешей, но не наоборот. .
Согласно IACA, clflush
- это всего 2 мопа на HSW-SKL и 4 мопа (включая микросинтез) на NHM-IVB. Так что это даже не микрокод на Intel.
IACA не моделирует invlpg
, но я предполагаю, что это больше мопсов. (И это привилегировано, так что это не совсем тривиально для тестирования.) Удаленно возможно, что эти дополнительные мопы на pre-HSW были для аннулирования TLB.
У меня нет никакой информации о AMD.
Тот факт, что invlpg
является привилегированным, является еще одной причиной ожидать, что clflush
не будет его надмножеством. clflush
непривилегирован. Предположительно, только из соображений производительности invlpg
ограничено звонком только 0.
Но invlpg
не вызовет сбоя страницы, поэтому пользовательское пространство может использовать его для аннулирования записей TLB ядра, задержки процессов в реальном времени и обработчиков прерываний. (wbinvd
является привилегированным по аналогичным причинам: он очень медленный, и я думаю, что он не прерываемый.) clflush
делает ошибку на недопустимых адресах, поэтому он не откроет эту уязвимость отказа в обслуживании. Вы можете clflush
страницу общего доступа VDSO.
Если только по какой-то причине процессор не захочет выставить invlpg
в пользовательском пространстве (путем преобразования в clflush
), я действительно не понимаю, почему какой-либо поставщик сделал бы это .
С энергонезависимыми модулями DIMM в будущем вычислений, еще менее вероятно, что любые будущие процессоры будут делать слишком медленные циклы по диапазону памяти, делая clflush
. Можно ожидать, что большинство программ, использующих NV-хранилище с отображением памяти, будет использовать clflushopt
, но я бы ожидал, что производители процессоров также сделают clflush
максимально быстрым.