Что-то с памятью моей стало… Сколько стоит доступ в память, и что с этим делать Аппаратное обеспечение, инфраструктура
Более 15 лет занимаюсь различными проектами в области системного программирования, включая реализацию компиляторов и сетей обмена данными для суперкомпьютеров, а также проблемой передачи данных в развесистой иерархии памяти суперкомпьютера с GPU. На текущий момент занимаюсь исследованием аппаратных компонентов, пригодных к использованию в платформе фильтрации трафика Qrator Labs.
Тезисы
В пересчёте на количество транзисторов оперативная память занимает в современном сервере не менее 85% (если добавить сюда внутрипроцессорные кэши, то и сильно за 90%). Все эти транзисторы оплачены, они греются. Хотелось бы использовать их по максимуму. При этом уже с середины 90-х годов именно скорость доступа к данным ограничивает производительность большинства вычислений (фоннеймановское узкое горло, стена памяти).
Мы так привыкли к слову RAM, что порой принимаем название random access за чистую монету. Однако во что на самом деле обходится доступ в память? И как это узнать? И что потом с этим делать?
Подробнее, о чём пойдёт речь:
- Современная иерархия памяти от регистров процессора до ячеек DRAM (кэши, каналы, NUMA, банки, строки, столбцы).
- Задержка (latency), пропускная способность (bandwidth), sustained bandwidth - каковы они на разных уровнях иерархии, и как замерять.
- Возможности по прыжкам через уровни иерархии (prefetch, non-temporal writes, DDIO).
- Виды серверной памяти - DDR3, DDR4, RDIMM (registered), LRDIMM (load-reduced), ECC - замеряем, выбираем...
- Немножко поговорим о тенденциях в эволюции системы памяти и о том, что нас ожидает в будущем.