Оперативная память является неотъемлемым компонентом любой вычислительной системы. Как она устроена внутри, и как работает?
Немного истории
Началось всё очень давно, ещё в ХIХ веке. Именно в 1834 году Чарльз Беббидж разработал конструкцию аналитической машины. В те годы самому Чарльзу не удалось воплотить свою конструкцию в реальную жизнь из-за проблем с финансированием и отсутствием необходимых для постройки технологий.
Упрощённо, данный компьютер состоял из 4-х элементов – арифметико-логического устройства (АЛУ), устройства ввода-вывода, шины передачи данных и оперативной памяти. Как же работала оперативная память в 19 веке? Работала она за счёт сложного массива валов и шестерёнок, положение которых и «записывало» то или иное значение информационной единицы. И после этого изобретения давайте сделаем скачок на более чем 100 лет вперёд, в 40-50-ые годы ХХ века, когда начинались выпускаться электронно-вычислительные машины (ЭВМ) первого поколения.
Так как технология только зарождалась, инженеры экспериментировали с конструкциями и принципами работы ОЗУ. Таким образом, на первых порах использовалась оперативная память, работающая на электромеханических реле, на электромагнитных переключателях, на электростатических трубках и на электро-лучевых трубках. Но спустя пару лет все сошлись на одном варианте, другом – магнитные диски и магнитные барабаны.
По своей структуре магнитные барабаны похожи на современные жёсткие диски. Ключевое отличие – на барабане считывающие головки неподвижны и время доступа полностью определяется скоростью их вращения, в то время как у жёсткого диска это определяется как скоростью вращения, так и скоростью перемещения головок по цилиндрам диска. Следующим этапом развития оперативной памяти стали массивы на ферромагнитных сердечниках, или, как её проще называли, ферритовая память. Такой вид памяти обеспечивал очень высокую скорость доступа по сравнению с магнитными барабанами, но и потреблял он больше электроэнергии.
А самой главной проблемой что магнитных барабанов, что ферритовой памяти были габариты. Именно над исправлением этого недостатка исследователи работали на протяжении более десяти лет. И главный толчок в развитии оперативной памяти дало создание больших интегральных схем БИС), или же микросхем, и уже на них появились всеми нами известные и используемые до сих пор DRAM и SRAM, которые стали постепенно сменять ферритовую память, начиная с 70-ых годов. Какая разница между DRAM и SRAM? Если вкратце, то DRAM хранит бит данных в виде заряда конденсатора, а SRAM хранит бит в виде состояния триггера. DRAM является более экономичным видом памяти с меньшим энергопотреблением, а SRAM может похвастаться меньшим временем доступа за большую стоимость и энергопотребление. В нынешний момент SRAM используется как кэш-память процессора, так что мы подробнее перейдём к DRAM, ведь именно такую память используют при создании оперативной памяти.
Кому будет интересно почитать и освежить память, или подчерпнуть для себя что то новое, есть замечательная статья на просторах ПИКАБУ автора BootSect "История оперативной памяти".
Но давайте вернемся и все таки рассмотрим -
Что такое оперативная память
Любая вычислительная система состоит из нескольких компонентов. При этом неважно, где эта система используется — в компьютере, ноутбуке, смартфоне, планшете или даже смарт-часах. Основной принцип работы везде один: данные считываются с медленного накопителя и попадают в более быструю оперативную память. Оттуда их получает очень быстрая кеш-память центрального процессора, которая передает данные на вычислительную часть ЦП.
В компьютерах с этим проще: память для них распространяется в виде модулей формата DIMM, на которых распаяны микросхемы памяти. В ноутбуках можно встретить как более компактные модули SO-DIMM, так и распаянную ОЗУ.
Устройство чипов памяти
Внутри микросхем памяти находится несколько слоев, соединенных друг с другом. Каждый из них разделен на кластеры, в которых находятся ячейки памяти, хранящие информацию.
Ячейка памяти состоит из конденсатора и полевого транзистора. Конденсатор может хранить электрический заряд (логическая единица) или находиться в состоянии без заряда (логический ноль). Таким образом каждая ячейка хранит один бит информации.
Транзистор выступает в роли своеобразной двери. Когда «дверь» закрыта, она удерживает заряд конденсатора. При считывании и записи информации эта «дверь» открывается. Помимо конденсатора, транзистор подключен к двум линиям — линии слов («Word Line», строка) и линии битов («Bit Line», столбец).
Ячейки памяти расположены подобно клеткам шахматной доски. Те, которые находятся на одной линии слов, образуют страницу памяти. Операции чтения и записи производятся не с одной ячейкой, а с целой страницей памяти сразу, так как все транзисторы ячеек на одной линии слов открываются одновременно. Для операции чтения на одну линию слов подается управляющее напряжение, которое открывает все транзисторы ячеек на ней. На концах линий битов находятся усилители чувствительности (Sense Amplifier). Они распознают наличие или отсутствие заряда в конденсаторах ячеек памяти, таким образом считывая логическую единицу или логический ноль.
Конденсаторы ячеек имеют маленькие размеры и очень быстро теряют заряд. Поэтому независимо от того, нужно ли сохранять в памяти текущую информацию или записать новую, ячейки периодически перезаписываются.
Для этого, как и при чтении, управляющее напряжение подается на «двери» транзисторов ячеек по линии слов. А вот по линии битов вместо считывания производится процесс записи. Он осуществляется с помощью подачи напряжения для заряда конденсаторов нужных ячеек — то есть только тех, где должна быть логическая единица.
Передача данных и тайминги
Работа линий координируется декодером адресов строк и мультиплексором столбцов. Информация для записи в ОЗУ поступает в общий буфер данных. Оттуда она попадает в мультиплексор и в его собственный буфер, а затем — в управляющую логику, которая координирует работу ячеек памяти с учетом латентности памяти.
Данные из логики поступают в буфер декодера адресов строк, а оттуда и на сам декодер, позволяя своевременно открывать страницы памяти для операций чтения и записи. При чтении данные вновь проходят через мультиплексор и общий буфер данных, который передает их системе.
Операции декодера адреса строки и мультиплексора столбцов требуют определенных периодов времени — стробов. Строб адресов строк обозначается как RAS, адресов столбцов — как CAS. Данными характеристиками и их соотношениями определяется латентность памяти, или тайминги. Тайминги — это временные задержки между выполнением команд чтения и записи. Чем они ниже, тем быстрее работает память при прочих равных.
Тайминги выражаются не в абсолютном, а в относительном числовом значении. Оно показывает количество тактовых циклов, которое требуется памяти на выполнение операций. Или, если простым языком, во сколько раз медленнее производится та или иная операция относительно задержки передачи данных. Именно поэтому одни и те же модули ОЗУ имеют разные тайминги на разных частотах.
Для простого примера возьмем распространенную ОЗУ DDR4 с частотой 3200 МГц. Время передачи одного бита информации у нее составляет 1/3 200 000 долю секунды, или 0.3125 нс. Так как память типа DDR передает данные дважды за такт, длительность одного цикла передачи данных занимает в два раза больше времени — 0.625 нс. При тайминге, равном 16, определенная операция будет происходить за время, которое в 16 раз больше этого значения: 0.625 x 16 = 10 нс.
Основные виды таймингов — это:
Количество тактов между получением команды чтения/записи и ее выполнением.
Количество тактов между открытием строки и началом выполнения операции чтения/записи по столбцу.
Количество тактов между получением команды закрытия одной строки и открытием следующей.
Количество тактов, в течение которых строка памяти может быть доступна для чтения/записи.
Количество тактов с момента активации чипа памяти до готовности принять команду.
Тайминги — качество
Работа памяти, вопреки стереотипу, измеряется не только герцами. Быстроту памяти принято измерять в наносекундах. Все элементы памяти работают в наносекундах. Чем чаще они разряжаются и заряжаются, тем быстрее пользователь получает информацию. Время, за которое банки должны отрабатывать задачи назвали одним словом — тайминг (timing — расчет времени, сроки). Чем меньше тактов (секунд) в тайминге, тем быстрее работают банки.
Такты. Если нам необходимо забраться на вершину по лестнице со 100 ступеньками, мы совершим 100 шагов. Если нам нужно забраться на вершину быстрее, можно идти через ступеньку. Это уже в два раза быстрее. А можно через две ступеньки. Это будет в три раза быстрее. Для каждого человека есть свой предел скорости. Как и для чипов — какие-то позволяют снизить тайминги, какие-то нет.
Частота — количество
Теперь, что касается частоты памяти. В работе ОЗУ частота влияет не на время, а на количество информации, которую контроллер может утащить за один подход. Например, в кафе снова приходит клиент и требует томатный сок, а еще виски со льдом и молочный коктейль. Бармен может принести сначала один напиток, потом второй, третий. Клиент ждать не хочет. Тогда бармену придется нести все сразу за один подход. Если у него нет проблем с координацией, он поставит все три напитка на поднос и выполнит требование капризного клиента.
Аналогично работает частота памяти: увеличивает ширину канала для данных и позволяет принимать или отдавать больший объем информации за один подход.
Тайминги плюс частота — скорость
Соответственно, частота и тайминги связаны между собой и задают общую скорость работы оперативной памяти. Чтобы не путаться в сложных формулах, представим работу тандема частота/тайминги в виде графического примера:
Разберем схему. В торговом центре есть два отдела с техникой. Один продает видеокарты, другой — игровые приставки. Дефицит игровой техники довел клиентов до сумасшествия, и они готовы купить видеокарту или приставку, только чтобы поиграть в новый Assassin’s Creed. Условия торговли такие: зона ожидания в отделе первого продавца позволяет обслуживать только одного клиента за раз, а второй может разместить сразу двух. Но у первого склад с видеокартами находится в два раза ближе, чем у второго с приставками. Поэтому он приносит товар быстрее, чем второй. Однако, второй продавец будет обслуживать сразу двух клиентов, хотя ему и придется ходить за товаром в два раза дальше. В таком случае, скорость работы обоих будет одинакова. А теперь представим, что склад с приставками находится на том же расстоянии, что и у первого с видеокартами. Теперь продавец консолей начнет работать в два раза быстрее первого и заберет себе большую часть прибыли. И, чем ближе склад и больше клиентов в отделе, тем быстрее он зарабатывает деньги.
Так, мы понимаем, как взаимодействует частота с таймингами в скорости работы памяти.
Очередь — это пользователь, который запрашивает информацию из оперативной памяти.
Продавец — это контроллер памяти (который доставляет информацию).
Техника со склада — это информация для пользователя. Прилавок — это пропускная способность памяти в герцах (частота).
Расстояние до склада — тайминги (время, за которое контроллер найдет информацию по запросу).
Соответственно, чем меньше метров проходит контроллер до банок с электрическим зарядом, тем быстрее пользователь получает информацию. Если частота памяти позволяет доставить больше информации при том же расстоянии, то скорость памяти возрастает. Если частота памяти тянет за собой увеличение расстояния до банок (высокие тайминги), то общая скорость работы памяти упадет.
Сравнить скорость разных модулей ОЗУ в наносекундах можно с помощью формулы: тайминг*2000/частоту памяти. Так, ОЗУ с частотой 3600 и таймингами CL14 будет работать со скоростью 14*2000/3600 = 7,8 нс. А 4000 на CL16 покажет ровно 8 нс. Выходит, что оба варианта примерно одинаковы по скорости, но второй предпочтительнее из-за большей пропускной способности. В то же время, если взять память с частотой 4000 при CL14, то это будет уже 7 нс. При этом пропускная способность станет еще выше, а время доставки информации снизится на 1 нс.
Вот, как выглядят тайминги на самом деле:
Строение чипа памяти и тайминги
В теории, оперативная память имеет скорость в наносекундах и мегабайтах в секунду. Однако, на практике существует не один десяток таймингов, и каждый задает время на определенную работу в микросхеме.
Они делятся на первичные, вторичные и третичные. В основном, для маркетинговых целей используется группа первичных таймингов. Их можно встретить в характеристиках модулей. Их намного больше и каждый за что-то отвечает. Здесь бармен с томатным соком не поможет, но попробуем разобраться в таймингах максимально просто.
Схематика чипов
Микросхемы памяти можно представить в виде поля для игры в морской бой или так:
В самом упрощенном виде иерархия чипа это: Rank — Bank — Row — Column. В ранках (рангах) хранятся банки. Банки состоят из строк (row) и столбцов (column). Чтобы найти информацию, контроллеру необходимо иметь координаты точки на пересечении строк и столбцов. По запросу, он активирует нужные строки и находит информацию. Скорость такой работы зависит от таймингов.
Первичные
CAS Latency (tCL) — главный тайминг в работе памяти. Указывает время между командой на чтение/запись информации и началом ее выполнения.
RAS to CAS Delay (tRCD) — время активации строки.
Row Precharge Time (tRP) — прежде чем перейти к следующей строке в этом же банке, предыдущую необходимо зарядить и закрыть. Тайминг обозначает время, за которое контроллер должен это сделать.
Row Active Time (tRAS) — минимальное время, которое дается контроллеру для работы со строкой (время, в течение которого она может быть открыта для чтения или записи), после чего она закроется.
Command Rate (CR) — время до активации новой строки.
Вторичные
Второстепенные тайминги не так сильно влияют на производительность, за исключением пары штук. Однако, их неправильная настройка может влиять на стабильность памяти.
Write Recovery (tWR) — время, необходимое для окончания записи данных и подачи команды на перезарядку строки.
Refresh Cycle (tRFC) — период времени, когда банки памяти активно перезаряжаются после работы. Чем ниже тайминг, тем быстрее память перезарядится.
Row Activation to Row Activation delay (tRRD) — время между активацией разных строк банков в пределах одного чипа памяти.
Write to Read delay (tWTR) — минимальное время для перехода от чтения к записи.
Read to Precharge (tRTP) — минимальное время между чтением данных и перезарядкой.
Four bank Activation Window (tFAW) — минимальное время между первой и пятой командой на активацию строки, выполненных подряд.
Write Latency (tCWL) — время между командой на запись и самой записью.
Refresh Interval (tREFI) — чтобы банки памяти работали без ошибок, их необходимо перезаряжать после каждого обращения. Но, можно заставить их работать дольше без отдыха, а перезарядку отложить на потом. Этот тайминг определяет количество времени, которое банки памяти могут работать без перезарядки. За ним следует tRFC — время, которое необходимо памяти, чтобы зарядиться.
Третичные
Эти тайминги отвечают за пропускную способность памяти в МБ/с, как это делает частота в герцах.
Отвечают за скорость чтения:
tRDRD_sg
tRDRD_dg
tRDRD_dr — используется на модулях с двусторонней компоновкой чипов
tRDRD_dd — для систем, где все 4 разъема заняты модулями ОЗУ
Отвечают за скорость копирования в памяти (tWTR):
tRDWR_sg
tRDWR_dg
tRDWR_dr — используется на модулях с двусторонней компоновкой чипов
tRDWR_dd — для систем, где все 4 разъема заняты модулями ОЗУ
Влияют на скорость чтения после записи (tRTP):
tWRRD_sg
tWRRD_dg
tWRRD_dr — используется на модулях с двусторонней компоновкой чипов
tWRRD_dd — для систем, где все 4 разъема заняты модулями ОЗУ
А эти влияют на скорость записи:
tWRWR_sg
tWRWR_dg
tWRWR_dr — используется на модулях с двусторонней компоновкой чипов
tWRWR_dd — для систем, где все 4 разъема заняты модулями ОЗУ
Скорость памяти во времени
Итак, мы разобрались, что задача хорошей подсистемы памяти не только в хранении и копировании данных, но и в быстрой доставке этих данных процессору (пользователю). Будь у компьютера хоть тысяча гигабайт оперативной памяти, но с очень высокими таймингами и низкой частотой работы, по скорости получится уровень неплохого SSD-накопителя. Но это в теории. На самом деле, любая доступная память на рынке как минимум соответствует требованиям JEDEC. А это организация, которая знает, как должна работать память, и делает это стандартом для всех. Аналогично ГОСТу для колбасы или сгущенки.
Стандарты JEDEC демократичны и современные игровые системы редко работают на таких низких настройках. Производители оставляют запас прочности для чипов памяти, чтобы компании, которые выпускают готовые планки оперативной памяти могли немного «раздушить» железо с помощью разгона. Так, появились заводские профили разгона XMP для Intel и DOHCP для AMD. Это «официальный» разгон, который даже покрывается гарантией производителя.
Профили разгона включают в себя информацию о максимальной частоте и минимальных для нее таймингах. Так, в характеристиках часто пишут именно возможности работы памяти в XMP режимах. Например, частоте 3600 МГц и CL16. Чаще всего указывают самый первый тайминг как главный.
Чем выше частота и ниже тайминги, тем круче память и выше производительность всей системы.
Ранги памяти
Модули ОЗУ имеют на борту несколько микросхем памяти. Внешняя ширина шины модуля определенного вида ОЗУ — величина постоянная, но внутреннее устройство зависит от поколения памяти и рангов.
Чипы памяти на обычном одноранговом модуле образуют один блок данных. Доступ к нему осуществляется по каналу определенной ширины. Если у модуля два ранга, то доступ к чипам памяти осуществляется через два таких канала. При четырех рангах — через четыре, при восьми рангах — через восемь. В модулях памяти для обычных компьютеров встречается одно- или двухранговая организация. Количество рангов более двух характерно для серверной ОЗУ.
Внешняя ширина шины модуля во всех случаях остается равной ширине канала доступа к одному рангу. Поэтому центральный процессор системы может обращаться только к одному рангу единовременно. Но пока один ранг модуля передает данные, другие могут подготавливать данные для следующей передачи. Поэтому многоранговая память при прочих равных быстрее, хоть и ненамного.
Ширина внешней шины модуля и одного ранга зависит от поколения и типа оперативной памяти.
Обычная ОЗУ DDR4 (и более старых поколений DDR) имеет ширину в 64 бита. Все биты используются для передачи данных.
Серверная ОЗУ DDR4 (и более старых поколений DDR) имеет ширину в 72 бита. 64 бита используются для передачи данных, 8 бит — для коррекции ошибок.
ОЗУ DDR5 имеет ширину в 80 бит, поделенных на два канала по 40 бит. В каждом канале 32 бита используются для передачи данных, а 8 бит — для коррекции ошибок.
В виду ограничения фотоматериалов