ЦП имеют кеш, поэтому они могут многое делать без фактического обращения к основной памяти. . Даже системы с низким энергопотреблением, как правило, имеют кэш-память, потому что передача сигналов вне кристалла требует достаточно энергии, чтобы кэш-память окупалась за счет энергии, сэкономленной за счет попаданий в кэш-память.
Что еще более важно, DMA не "занимает" ОЗУ и даже не перегружает пропускную способность памяти. ЦП не «отказывается от шины»; контроллер памяти принимает запросы на чтение/запись от ядер ЦП и других системных устройств. Выполнение задачи с большим объемом памяти на ЦП замедлит задержку DMA, а также наоборот, поскольку контроллер памяти или системный агент распределяет доступ к памяти, ставя в очередь запросы на чтение и запись из всех источников.
DMA отлично подходит для передачи, которая все еще намного медленнее, чем пропускная способность памяти. Например, SATAIII составляет 6 Гбит/с, а пропускная способность основной памяти для двухканальной DDR3-1600 МГц составляет около 25 Гбайт/с. Таким образом, programd-io проводил большую часть времени в ожидании данных от контроллера SATA, даже не ограничиваясь сохранением в ОЗУ.
Пример того, как части соединяются вместе в современном процессоре Intel x86: эта диаграмма системной архитектуры Intel Skylake (включая eDRAM в качестве кэша на стороне памяти). К сожалению, я не нашел более простой схемы, показывающей только ядра и системный агент, но в системе без eDRAM справа от системного агента находится только контроллер памяти, а все остальное остается прежним.
Контроллер памяти находится на кристалле, поэтому единственным внешним соединением на этой схеме является шина PCIe.
![Схема агента системы Skylake, из IDF через ARStechnica](https://i.stack.imgur.com/Z4P3T.png)
person
Peter Cordes
schedule
30.07.2016