В пересчёте на количество транзисторов оперативная память занимает в современном сервере не менее 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 - замеряем, выбираем...
- Немножко поговорим о тенденциях в эволюции системы памяти и о том, что нас ожидает в будущем.