процессор переходит в специальный режим - speculation
каждая инструкция анотируется флагом (speculative)
если процессор угадал - он работает быстрее
и если вдруг мы ошиблись и пошли не по той ветке - то происходит сброс данных
если не угадал - то данные удалятся и мы пойдем по другой ветке
и это не замедлит процессор по сравнению со случаем когда мы бы остановились
если мы выполним невилидные инструкции - то ничего не случится пока не поймем в какую втеку попали
Предполагается что из кода программы не узнать было ли предсказание успешным или нет
Предсказатель ветвлений так или иначе записывает историю
ер если мы встретили 10 раз условие true значит в 11ый вероятно будет true
в некоторых случаях даже может быть предсказатель закончится ли цикл
чтобы не хранить полный адрес каждого ветвлений - хранится только часть
минус - если есть 2 процесса у которых так получилось что кусок адреса совпал, предсказатель не сможет сказать какое приложение выполняется
И теперь мы поговорим про Meltdown и Spectre
Их нашли параллельно в нескольких проектах - в академических исследованиях и в google project zero
Кстати пример side-channel атаки не в цпу - можно было посмотреть свежозарегистрированные домены и найти домен для spectre/meltdown еще в декабре
В новых ядрах есть /sys/devices/system/cpu/vulnerabilities/*
где есть инфа о том что ядро думает о уязвимостях процессора и их mitigation'е (пофиксить их можно в ряде случаев только заменой железа, чего не случиться)
Вспомни что если speculative exectuion случился и произошел exception - то он не вернется если if не выполнится по факту
В упрощенном виде - можно замерять время выполнения попытки доступа к кэшу