Re[13]: Meltdown and Spectre
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 08.01.18 21:12
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Обычный барьер не очищает L1-кэш. Он лишь форсирует его синхронизацию.

O>>....которая занимает время, равное времени записи в память. То есть разрешение твоего таймера будет заведомо больше самого большого интервала, который нужно измерить, чтобы провести атаку.
C>Чтение данных из DRAM — это около 300 наносекунд, или около 600 циклов на типичном CPU. Межпроцессорная синхронизация — это около 50 циклов. Более чем достаточно запаса.

Откуда такие цифры? Например, DDR3-1600 (опорная тактовая 800MHz) с таймингами 9-9-9-28 имеет 35 наносекунд (28/0.8) на самый длинный вариант чтения — закрытие одной из предыдущих открытых строк (копирование из буферной строки на SRAM в модуле DRAM в основной массив) и открытие новоуказанной (кэширование в буферную строку SRAM). Прохождение через все цепочки кэшей и контроллеров чуть-чуть добавляет, но не сильно. Тут ты преувеличил на порядок; это всё равно дохрена, но уже не 600 тактов, а только около 120.
И да, лучше говорить "тактов", это не английский.
Во времена DDR1...DDR2 обычно писали про ~200 тактов, когда процессоры уже набрали 3-4GHz тактовой, а память была медленнее (например, в знаменитой статье Дреппера про память); сейчас 100-150 тактов; прогресс за 15 лет с временем переоткрытия строки от 50-70 нс до нынешних 25-40 это грандиозный прогресс, как оказалось.
Вот если строка не открывается, а уже открыта — тогда быстрее будет (потребуется CAS latency, в приведённом примере это 9 тактов опорной частоты DRAM => 11.25 нс; реально ну 15, ну с натяжкой 20; соответственно 40-60 тактов). Но предсказать, попадёт в ту же строку или нет, не так просто — северные мосты любят перемешивать линии шины адреса в зависимости от выбранного расклада памяти. В принципе, на нынешнем железе можно предполагать, что младшие 10-15 линий адреса не подвергнутся такому перемешиванию; это сходно с размером страницы виртуальной адресации, так что надо рассчитывать и на такие времена.

Запаса получается в 3-4 раза (при переоткрытии строки), или совсем чуть-чуть при той же строке DRAM, а не 12. Общий уровень успешности принципиально не меняется, но давай не пугать нереальными цифрами...
(Это я не считал, сколько занимает синхронизация кэшей. Может, и там не так страшно.)

C>Впрочем, даже в твоём сценарии я смогу сделать измерение. Просто делаем его 20 раз для того, чтобы накопить время.


Угу.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.