Оперативная память: принципы устройства и работы

Егор
wide_pic.jpg

Одной из первых моих статей на этом сайте был гайд по выбору ОЗУ (почитать его можно тут). Он в основном практический: что выбрать, что можно ставить и что нельзя, ну и различные полезности. Однако он не затронул, пожалуй, самую интересную часть — а как память вообще работает, и как ее тонко настроить (и разогнать). Если посмотреть, то по количеству параметров ОЗУ является чуть ли не самым сложным элементом ПК: посудите сами, для процессора вы в лучшем случае можете менять частоту тактового генератора (FSB, да и к тому же она уже лет 15 как 100 МГц и редко кто ее трогает), множитель (его как раз и меняют) и напряжение (ибо для работы на более высоких или низких частотах всегда можно подкорректировать напряжение для стабильности работы и, в некоторых случаях, меньшего энергопотребления), ну и количество рабочих ядер (хотя мало кто будет их трогать — разве что многопоточность отключают, ибо в некоторых задачах она может дать отрицательный прирост). Все остальные параметры уже индивидуальны и есть не у всех процессоров, так что зачастую их и не трогают. Что касается видеокарт, то тут параметров еще меньше — всего-то частоты GPU, памяти и напряжение GPU. Но если мы посмотрим на ОЗУ, то увидим море важных параметров: задержки, частоты, транзакции в секунду и т.д. — давайте разберемся, что это и как связано с производительностью и стабильностью работы памяти.

Технические характеристики памяти

Для начала нужно понять, что означают те или иные циферки и буковки в спецификациях памяти. Посмотреть их можно или на самой памяти, или на ее коробке, или в специальных программах типа AIDA64. Я разберу на примере своей памяти, но у вас будут схожие данные. Итак, вот скриншот из AIDA64:
Снимок.PNG
Что мы видим про память? То, что она Dual Channel DDR4-3200 SDRAM (16-18-18-36-CR2). Если погуглить маркировку самих чипов, то можно узнать еще немного информации — PC4-17000 1.2 В. Пойдем по порядку. Что означает Dual Channel (у вас может быть и Single, и Triple, и Quad — хотя если у вас последнее, то вы, скорее всего, знаете, что это)? Это означает, что память работает в двухканальном режиме (или одноканальном, или в трехканальном, четырехканальном и т.д.). Если у вас стоит одна планка памяти, то она будет работать в одноканальном режиме — то есть характеристики чтения и записи будут приблизительно такими же, которые указаны на ней (на деле все зависит от контроллера памяти, и на практике значения могут быть на 10-15% ниже). Если у вас стоит две и больше планок с одинаковыми характеристиками, то они могут работать вместе: в таком случае объем увеличивается пропорционально числу модулей, и скорость также растет почти линейно. Поэтому если у вас одноканальная память и интегрированная графика, которая использует ОЗУ как видеопамять, и если вы на ПК занимаетесь чем-то серьезнее просмотра фильмов и сидения в интернете — в первую очередь нужно купить еще одну планку ОЗУ и сделать двухканальный режим (как это делается — написано в практической статье), ибо вы тем самым фактически удваиваете производительность ОЗУ (ну а двухканальные контроллеры памяти имеют 90% современных процессоров).

Идем дальше — сочетание букв DDR SDRAM (Double Data Rate Synchronous Dynamic Random Access Memory — синхронная динамическая память с произвольным доступом и удвоенной скоростью передачи данных). Здесь нам интересна только концовка — «и удвоенной скоростью передачи данных». Смысл тут в том, что в старом типе памяти SDRAM данные считывались только при переходе из стостояния «0» в состояние «1» (по фронту сигнала). В DDR же решили считывать данные и при переходе из состояния «1» в состояние «0» (по спаду сигнала), то есть реальная частота памяти удвоилась. Однако с аппаратной точки зрения частота памяти остается той же, поэтому, например, в том же CPU-Z частота памяти будет вдвое ниже, чем в диспетчере задач:
Снимок.PNG
Как я уже объяснил выше — пугаться этого не стоит, это особенность DDR.  

Далее — что означает четверка в DDR4? В общем-то только одно — что это 4ое поколение памяти DDR. Отличия между всеми типами можно посмотреть на Вики, не вижу особого смысла это переписывать, но скажу, что основной прирост идет за счет роста частоты памяти.

Теперь посмотрим всю конструкцию — DDR4-3200. Очень многие после 3200 подписывают МГц — в общем-то, это не совсем правильно. На самом деле тут имеется ввиду МТ/с, или мегатранзакции в секунду. Что это за величина? Это величина, которая показывает, сколько операций в секунду может совершаться с памятью. С учетом того, что ширина шины DDR4 составляет 64 бита (или 8 байт), можно получить ее скорость в МБ/с — для этого нужно 3200 МТ/с * 8 Б = 25600 МБ/с. И тут следует сказать, что эта цифра зачастую уже пишется на самой памяти — в моем случае это PC4-17000. Вы скажете — 17000 не равно 25600. Все верно, в моем случае память разогнана, если взять ее реальную скорость в 2133 МТ/с то мы как раз получим 17000 МБ/с. Ну а PC4 в данном случае — эквивалент DDR4. То есть, как вы видите, DDR4-2133 и PC4-17000 — эквивалентные записи, поэтому для понимания того, какая у вас память, достаточно знать только одну из них.

Теперь идет конструкция 16-18-18-36-CR2. Для объяснения этих цифр нужно посмотреть, что же из себя представляет современная DDR-память. По сути она — набор ячеек, хранящих информацию. Каждая ячейка имеет внутри себя транзисторы и конденсаторы, и располагается она в двумерном массиве вместе с другими ячейками. Ну а принцип действия прост: конденсаторы заряжаются при записи в ячейку единичного бита и разряжаются при записи нулевого бита. Отсюда, кстати, возникает проблема — дабы избежать разрядки конденсаторов и потери информации, их нужно постоянно заряжать — именно поэтому при отключении питания ПК вся информация из ОЗУ стирается. 

Основная проблема при работе с ОЗУ — это задержки (latency) при доступе к ячейкам памяти. Логично, что чем меньше задержка — тем быстрее будет идти чтение/запись — тем меньше будет простаивать процессор в ожидании ответа от ОЗУ — тем быстрее будет быстродействие. Посмотрим, какие бывают задержки и за что они отвечают.

Разумеется, каждая ячейка имеет свой «адрес»: грубо говоря, это ее номер в строке и столбце таких же ячеек в двухмерном массиве. В свою очередь, некоторое количество ячеек объединяется вместе для более быстрого доступа к ним — такая группа называется банком. Теперь посмотрим, что происходит, когда контроллер памяти хочет что-то записать в определенную ячейку.  Для начала он обращается в банку с адресом строки — этот сигнал называется RAS (Row Address Strobe). Соответственно, время обращения (задержка) называется RAS Latency — но этот параметр малоинформативен и очень редко пишется. Зато важен параметр RAS to CAS Delay — это процесс поиска нужной строки в банке памяти. Вот этот параметр уже нужен, и его задержка пишется второй — то есть в моем случае он составляет 18 тактов (один такт — это одна отправка данных по шине памяти). Великолепно, всего за 18 тактов мы нашли нужную строку. Но ведь нужен еще и столбец — за него отвечает еще один сигнал, CAS, и его задержка пишется первой — в моем случае это 16 тактов. Казалось бы — все, мы получили точное расположение нашей ячейки, зачем еще две цифры?
kak_uznat_tajming_operativnoj_pamyati_3.jpg
Не все так просто — зачастую бывает, что контроллеру нужно обратиться к другой ячейке этой же строки. Но для этого он должен сначала закрыть предыдущую сессию запроса (нельзя одновременно обращаться к различным ячейкам одной строки) — а на это опять же уходит время, и эта задержка называется RAS Precharge — она указывает на время закрытия и повторной активации строки. Ее пишут третьей, в моем случае это опять же 18 тактов. Последний параметр — Cycle Time — отвечает за время, необходимое для полного открытия и закрытия всего банка, иными словами — это быстродействие всей памяти. Он пишется четвертым, и у меня он 36 тактов. 

Остался последний параметр — CR (Command Rate), он может быть 1 или 2. Отвечает этот параметр за время, которое должно пройти между активацией памяти и ее способности к работе — это 1 или 2 такта. Разумеется, 1 такт лучше, но тут уж как повезет с памятью. 

Разумеется, такой параметр как такт не очень нагляден — интереснее узнать результат в наносекундах. Для этого узнаем, сколько времени занимает один такт — это 1 / 1200 МГц = 0.83 нс (берем, разумеется, реальную частоту памяти). Cycle Time у памяти 36 тактов, то есть задержка получается 0.83 нс * 36 = 30 нс. Тогда почему AIDA64 показывает результат около 48 нс? Все просто — сам процессор хоть и небольшой, но из-за крайне малых промежутков времени (миллиардные доли секунды) приходится учитывать время на проход сигнала внутри него, что и добавляет дополнительные 18 нс.

Вот в общем-то и все, теперь Dual Channel DDR4-3200 SDRAM (16-18-18-36-CR2) для вас не просто куча символов, а вполне осмысленный набор параметров, который позволяет достаточно точно понять, что за ОЗУ перед вами.

Разгон ОЗУ

У внимательного читателя мог возникнуть вопрос — а что же важнее, более высокая частота памяти или более низкие тайминги (задержки)? Ведь, с одной стороны, чем выше частота — тем быстрее производительность памяти и системы в целом. С другой стороны, чем ниже тайминги — тем быстрее будет происходить обращение к памяти и меньше будет простаивать CPU, то есть — тем быстрее будет работать ПК. С учетом того, что чем выше частота — тем выше тайминги, тут нужно соблюсти баланс. Увы — у каждого он свой, так что разгон памяти — достаточно кропотливое занятие по выставлению различных таймингов, напряжений и частот, и тесты скорости работы ОЗУ в системе. Разумеется, далеко не все хотят заниматься перебором, поэтому в продаже есть память с поддержкой профилей DOCP и XMP. Это — уже зашитые в память профили авторазгона, где прописаны напряжения, частоты и тайминги, на которых память гарантированно заработает — вам лишь нужно выбрать нужный профиль в UEFI. Плюсы такого метода очевидны — вы получаете разгон в один клик. Минусы тоже — во-первых, такая память стоит дороже, причем чем выше гарантированная частота — чем больше цена. Во-вторых, профили не идеальны, и зачастую можно выжать еще 5-10% производительности, но опять же — ковыряясь в таймингах. 

Ну и самый последний ожидаемый вопрос — а стоит ли вообще разгонять ОЗУ? Все зависит от ваших задач и процессоров: к примеру, в 6 и 8-ядерных AMD Ryzen частота шины, связывающей два процессорных кристалла, напрямую зависит от частоты ОЗУ, так что там ее разгон как говорится «маст хэв». В играх особого прироста производительности от разгона памяти стоит ждать лишь в топовых системах, и то это будет разница между 110 и 120 fps — с одной стороны, приятный бонус, с другой — разница-то все равно не заметна на глаз. Ну а лучше всего заметен разгон в задачах, тесно связанных с ОЗУ — к примеру, архивацией, где у процессоров зачастую не хватает кэша, и они вынуждены часто обращаться к памяти. 
14

Будь в курсе последних новостей из мира гаджетов и технологий

Мы в соцсетях

Комментарии

Snegovik
+632
В первой статье по выбору оперативки вроде как перечислили преимущества DDR4.. а на деле прирост небольшой относительно DDR3.. почему же так?.. и от чего же задержка у нового поколения хуже?
4 декабря 2017 в 14:27
#
Егор Морозов
+1764
Дело в том, что скорости лучших DDR3 пересекаются со скоростями обычных DDR4: к примеру, в макбуки ставят DDR3-2133, а обычные плашки DDR4 идут с частотами 2133-2400 МГц, поэтому прироста и нет. Что касается задержек — у DDR4 поменялась компоновка банков, поэтому задержки выросли. Зато уменьшился техпроцесс и напряжение, что в итоге дало возможность серьезно поднять частоты до уровня, который невозможен для DDR3 — это свыше 3000 и даже 4000 МГц. С такими частотами даже достаточно большие тайминги — не помеха: прирост производительности как минимум в полтора раза в сравнении с DDR3.
4 декабря 2017 в 14:41
#
–5
Вот это годнота , всегда бы так
4 декабря 2017 в 15:01
#
+313
Отличная статья
4 декабря 2017 в 15:11
#
Олег Воронин
+2306
Супер) впрочем, как обычно
4 декабря 2017 в 20:57
#