byte_shifter
Ссылка
нажмите — покажем
нажмите — покажем
Прикольное видео про одну особенность оперативной памяти DDR:
https://www.youtube.com/watch?v=KKbgulTp3FE
Я начал смотреть его с изрядной долей скепсиса: ну да, DDR хранит каждый бит буквально в заряженном или разряженном конденсаторе. А поскольку у любого конденсатора есть саморазряд, контроллеру приходится периодически «обновлять» эти ячейки. Знаю, читал ещё студентом, всем известно — ничего нового.
С этого ролик и начинается. Но потом постепенно появляются всё более интересные детали, и незаметно уровень погружения становится гораздо глубже.
Например, оказывается, что время, которое уходит на обновление заряда в ячейках памяти, можно фактически измерить, записывая и считывая данные из одной и той же ячейки памяти. И эта задержка может быть существенной проблемой для некоторых задач - например, для высокочастотного трейдинга, где важны даже очень малые задержки.
Или вот ещё. Любой программист знает, что операционная система выделяет процессу оперативную память на своё усмотрение и скрывает от программы реальные физические адреса. Но далеко не каждый знает, что даже сама операционная система на самом деле понятия не имеет, где именно физически расположена адресуемая ячейка, потому что контроллер памяти намеренно перемешивает адресацию, чтобы лучше использовать параллелизм внутри памяти.
Или ещё интереснее: существует техника Rowhammer, которая позволяет влиять на биты в соседних ячейках памяти, если достаточно агрессивно обращаться к соседним ячейкам памяти. Потенциально это можно использовать для атак.
И все это она демонстрирует с помощью кода на С++ и с ассемблерными вставками, шаг за шагом показывает как это работает и что мешает написать код, который бы не подвергался задержкам обновления DDR. В итоге с этим справляется и прикладывает исходники с результатами бенчмарков.
Формат повествования такой, что можно детям показывать - все увлекательно и просто
1 · 154 ·