LFENCE уже достаточно силен (по крайней мере, на практике), чтобы помешать ЦП фактически просматривать инструкции загрузки после него, но ЦП может спекулятивно загружаться по другим причинам.
Чтобы остановить это, потребовалось бы какое-то предвидение, минуя барьер, чтобы выяснить, для каких адресов отключить предварительную выборку HW. Это совсем не практично. CPUID или другие инструкции сериализации не сильнее LFENCE для остановки предварительной загрузки.
ЦП всегда разрешено спекулятивно производить выборку из памяти в областях / страницах WB и WT. В руководстве по оптимизации Intel задокументированы некоторые сведения об аппаратных средствах предварительной выборки в некоторых из их моделей ЦП, поэтому на практике вы можете избежать действий перед CPUID, которые могут вызвать такую предварительную выборку.
(WC - это слабо упорядоченный некэшируемый + объединение записи, но спекулятивная выборка также разрешена на бумаге. В реальной жизни это, вероятно, происходит только в тени неверного предсказания ветвления, а не предварительной выборки HW. Обычно он не кэшируется, как WB и WT. )
Если вы проводите микробенчмаркинг для реального ЦП, хитрость некоторых видов микробенчмарков заключается в том, чтобы найти шаблон доступа, который не запускает предварительную выборку HW, или отключить предварительные выборки HW.
Возможно, теоретически у вас может быть процессор x86, который смотрит вперед в потоке инструкций для инструкций загрузки / сохранения и предположительно предварительно выбирает их, отдельно от их фактического выполнения (что, согласно определению Intel LFENCE, заблокировало бы). Я не думаю, что что-то помешает ему сделать это и с CPUID.
Такой ЦП, наверное, никто не будет проектировать, потому что
- Не стоит транзисторов / питания. Запуск предварительной выборки, как только может появиться регулярное выполнение вне очереди, уже достаточно хорошо. И за исключением абсолютных / относительных адресов RIP или прямых переходов, вам потребуются значения регистров из ядра OoO, чтобы получить полезный адрес предварительной выборки.
- Смотреть дальше LFENCE / CPUID - извращенно; они настолько редки, что победа над спекулятивным «казнью» множества мин - это часть дела в эпоху Spectre.
person
Peter Cordes
schedule
15.01.2019