Overclockers.ru: Немного о DDR SDRAM и параметре tRAS (original) (raw)
Эта работа была прислана на наш "бессрочный" конкурс статей. Автор получает приз - материнскую плату P4VX4 от компании ASRock.
После написания статьи "Зависимость производительности от частоты шины и параметров памяти на ASUS A7N8X-X (nForce2 400)" у меня остался небольшой осадок касательно приведённой там формулы:
Active Precharge Delay (tRAS) = RAS to CAS Latency (tRCD) + CAS Latency + 2
Эта формула была взята на сайте производителя памяти Mushkin, где она достаточно подробно объяснена и обоснована "на пальцах". Понять это объяснение я не смог, а на практике не было обнаружено строгого соответствия. После непродолжительных поисков была найдена и скачана спецификация памяти DDR SDRAM – "Double Data Rate (DDR) SDRAM Specification. JESD79D. JANUARY 2004. JEDEC SOLID STATE TECHNOLOGY ASSOCIATION". Изучение этого документа выявило полную несостоятельность формулы Mushkin. Если сказать более жёстко, эта формула – заблуждение, бред, конфабуляция. В сети она приведена во многих форумах и нигде не подвергалась сомнению, хотя её абсурдность очевидна при знании основ работы DDR SDRAM. На многих ресурсах, в том числе и уважаемых, были замечены элементарные ошибки. Более того, даже в самой документации имеются неточности и опечатки.
В данной статье приведено небольшое описание DDR SDRAM на основе официальной спецификации. Описаны и проиллюстрированы почти все параметры памяти, влияющие на производительность. Более подробно рассмотрен параметр tRAS. Это достаточно базовая информация, которой должен владеть каждый уважающий себя любитель разгона.
Как работает динамическая память (DRAM).
Начнём с самого начала, с основ работы динамической памяти. Конечно, такой информации нет в спецификации, но будет полезно напомнить. Носителем информации в динамической памяти является электрическая ёмкость или конденсатор. Ячейки памяти, в основе которых лежит конденсатор, объединяются в массив. Чтобы считать информацию из ячейки, подаётся адресный сигнал в соответствующую строку (по-английски Row). Данные считываются из соответствующей колонки (по-английски Column) массива. Для "перевода" аналогового сигнала электрической ёмкости используются специальные усилители. Кроме того, существуют специальные цепи для подзарядки конденсаторов и записи данных. Обычно на блок-схемах всё это объединяется и обозначается как "Sense Amplifiers".
При считывании информации происходят следующие операции:
- Подаётся адресный сигнал в соответствующую строку. Данные целой строки попадают на усилители и через некоторое время могут быть считаны. Такая операция называется активацией строки (по-английски Activate).
- Данные считываются из соответствующей колонки. Для этого подаётся команда на чтение (по-английски Read). Данные появляются на выходе с некоторой задержкой. В современной памяти используется чтение пакета данных (по-английски Burst), представляющего собой несколько последовательно расположенных данных. Обычно размер пакета равен 8.
- Пока строка остаётся активной, возможно считывание или запись других ячеек памяти (текущей строки).
- Так как при чтении заряд ёмкостей ячеек памяти теряется, то производится подзарядка этих ёмкостей или закрытие строки (по-английски Precharge). После закрытия строки дальнейшее считывание данных невозможно без повторной активации.
- Со временем конденсаторы ячеек разражаются и их необходимо подзаряжать. Операция подзарядки называется регенерацией (по-английски Refresh) и выполняется каждые 64 мс для каждой строки массива памяти.
При записи данных всё происходит точно так же, только чтение меняется на запись и при закрытии строки происходит непосредственная запись в массив памяти.
Ячейка памяти может хранить только один бит информации. Чтобы хранить один байт, используется 8 элементарных ячеек памяти. При этом они адресуются одинаково и организованы с использованием шины данных шириной в 8 линий. Такие объединённые ячейки образуют слово. Обычно чипы памяти имеют размер слова 4, 8, 16 бит. Ширина шины данных при этом равна 4, 8, 16 линий (или разрядность 4, 8. 16 бит). Простой модуль памяти DIMM имеет ширину шины данных 64 линий.
Банки памяти.
Чтобы обеспечить возможность быстрой работы одновременно с разными участками памяти используется архитектура с несколькими массивами памяти или банками (по-английски Bank). Банки памяти работают полностью независимо. Например, данные можно считывать из памяти банка 1, обрабатывать и записывать в память банка 2. При этом будут отсутствовать задержки на активацию и закрытие строк данных в массиве памяти, что было бы в случае одного банка.
Возможна различная организация использования банков. При этом по-разному выполняется трансляция адреса памяти, который использует процессор, в последовательность: номер банка, номер строки массива памяти, номер колонки массива памяти. В простейшем случае банки памяти идут последовательно. Соответственно преимущества от наличия нескольких банков будут, только если обращения к памяти сильно разнесены в адресном пространстве. Обычно программы работают с небольшим локальным участком памяти и не будут иметь ускорения. Возможна организация с чередованием банков (по-английски Interleaving). Сначала идёт строка первого банка, потом второго, потом опять первого, и так далее до конца памяти. Вероятность, что будут использоваться участки памяти, принадлежащие разным банкам, значительно увеличивается. Но всегда возможны "неудобные" случаи, когда рабочие участки памяти разбросаны так, что принадлежат одному банку. Тем не менее, наличие нескольких банков повышает производительность. Чем больше банков, тем лучше. В спецификации чётко написано, что DDR SDRAM имеет 4 банка памяти.
Как работает DDR.
Сокращение DDR расшифровывается как Double Data Rate или удвоенная скорость передачи данных. Число, следующее за "DDR", указывает на скорость передачи данных. Например, у DDR 400 скорость передачи 400 МГц. При этом использовать термин "МГц" некорректно. Правильно указывать скорость в "миллионах передач в секунду через один вывод данных". Такое замечание есть в спецификации. Память DDR 400 работает на частоте 200 МГц или на частоте в 2 раза меньше скорости передачи данных (вернее, скорость передачи данных в 2 раза больше тактовой частоты). Все управляющие сигналы синхронизируются частотой 200 МГц. Внутри чипа все работает классически по переднему фронту сигналов тактового генератора с частотой 200 МГц (есть правда исключение). Официальная частота DDR333 равна 167.0 МГц.
Чтобы обеспечить передачу данных дважды за такт, используется специальная архитектура "2n Prefetch". Внутренняя шина данных имеет ширину в два раза больше внешней. При передаче данных сначала передаётся первая половина шины данных по переднему фронту тактового сигнала, а затем вторая половина шины данных по заднему фронту.
Для возможности работы на высоких частотах вместо одного тактового сигнала используется два (Differential Clock). Дополнительный тактовый сигнал инвертирован относительно основного. Поэтому на самом деле синхронизация происходит не по заднему фронту. В документации написано, что синхронизация происходит при пересечении этих двух тактовых сигналов. Но, насколько я понимаю, вместо пересечения просто используется передний фронт дополнительного тактового сигнала. Хотя это только предположение.
Примечание: здесь и далее на диаграммах сигналы данных и команд имеют разное "выравнивание" относительно тактового сигнала. Поэтому они немного сдвинуты относительно друг друга.
Кроме передачи двух данных за такт, DDR SDRAM имеет несколько других принципиальных отличий от простой памяти SDRAM. В основном они являются технологическими. Например, был добавлен сигнал QDS, который располагается на печатной плате вместе с линиями данных. По нему происходит синхронизация при передаче данных. Если используется два модуля памяти, то данные от них приходят к контроллеру памяти с небольшой разницей из-за разного расстояния. Возникает проблема в выборе синхросигнала для их считывания. Использование QDS успешно это решает.
Пару слов можно сказать о стандарте DDR2. Как и для обычной памяти DDR, число после "DDR2" указывает на скорость передачи данных. Поэтому DDR2 400 и DDR 400 имеют абсолютно одинаковую скорость передачи данных. Массив памяти DDR2 работает на частоте в 4 раза меньше скорости передачи (вернее скорость передачи данных в 4 раза больше частоты работы массива). Для того чтобы обеспечить передачу данных 4 раза за такт используется архитектура "4n Prefetch". При этом внутренняя шина данных имеет ширину в 4 раза больше внешней шины. Тем не менее, вся управляющая логика ввода/вывода работает на частоте в 2 раза меньше скорости передачи, то есть на 200 МГц для DDR2 400. Непосредственно на сам чип памяти подаётся только эта частота.
Внутренняя организация DDR2 осталась в основном прежней, но есть и некоторые изменения. Задержка чтения (CL - CAS Latency) уже не может быть дробной. Это сделано для упрощения внутренней логики. Задержка записи изменена с фиксированного 1 такта до RL-1, где RL (Read Latency) – задержка чтения с учетом добавочной задержки (AL – Additive Latency) или другими словами, RL=AL+CL. Задержка записи стала как минимум 2 такта (CL=3, AL=0). Это сделано для уменьшения пропусков в передаче из-за разных задержек чтения и записи и, соответственно, для лучшего использования шины данных.
Была добавлена возможность отложенного выполнения команд при помощи добавочной задержки (AL - Additive Latency). Это приводит к отсутствию перерывов в передаче данных при конфликтных ситуациях на линии команд. Например, когда необходимо подать команду на чтение и команду активации строки другого банка памяти, подаётся только одна команда, хотя память может "обработать" две команды одновременно. Использование AL позволяет избежать таких ситуаций. С одной стороны, AL уменьшает задержки на получение информации при доступе к разным строкам массива памяти и позволяет более полно нагрузить шину данных при работе с несколькими банками памяти. С другой стороны, при работе с данными, находящимися в пределах одной строки, задержки увеличиваются. Для повышения производительности в DDR2 количество банков памяти было увеличено с 4 до 8, правда, только для чипов ёмкостью 1 Гбит и выше, и с некоторыми ограничениями. Основное отрицательное влияние на скорость работы оказывает массив памяти, который работает на частоте в 2 раза меньшей, чем массив DDR, и имеет большие внутренние задержки. Собственно точные причины повышения задержек выяснить не удалось. Такая информация является "внутренней" для производителей памяти.
Подведя небольшой итог, можно сказать, что при одинаковом рейтинге память DDR2 и DDR имеют одинаковую скорость передачи данных. Главным преимуществом DDR2 является возможность функционирования на значительно более высоких частотах. Становятся доступными большие скорости передачи данных. Массив памяти DDR2 работает в 2 раза медленнее, чем массив DDR, и обладает большими задержками. Кроме того изменения в протоколе работы в среднем так же увеличили задержки.
Протоколы работы с DDR SDRAM.
"Общение" системы с памятью происходит при помощи передачи сигналов по линиям ввода/вывода. При помощи этих сигналов подаются команды, передаются и считываются данные. Форма и задержки между этими сигналами жёстко описывается в спецификации. Для понимания параметров памяти и того, как система с ней работает, можно ограничиться упрощенным представлением протокола работы. Далее будут представлены диаграммы основных операций.
На диаграмме хорошо видно, что данные начинают поступать на выход только через tRCD+CL тактов после начала операции единичного чтения. Другими словами, параметры tRCD и CL имеют одинаковое значение. Однако если запустить обычные тесты латентности памяти (ScienceMark 2.0, CPU-Z 1.20a, CacheMem 2.6), то CL будет влиять на результаты больше. Это происходит из-за того, что тесты измеряют время не случайного произвольного чтения, а последовательного чтения с некоторым шагом. При этом происходит несколько чтений в пределах активной строки. Размер строки массива памяти может быть разным, от 512 ячеек до 4096 ячеек. Соответственно, tRCD оказывает влияние на результаты реже, только при активации строки, а CL – при каждом чтении.
Проведённое исследование в статье "Зависимость производительности от частоты шины и параметров памяти на ASUS A7N8X-X (nForce2 400)" показало, что в реальных приложениях изменение tRCD на 1 имеет чуть большее значение, чем изменение CL на 0.5. Ещё одним интересным моментом на диаграмме является подача команды на закрытие строки, когда передача данных не закончилась. То есть строка может быть закрытой, а данные всё ещё передаваться.
Вот определение некоторых параметров памяти, проиллюстрированных на диаграмме. Приводятся сокращённые и развернутые (не расшифровка) названия параметров, как они указаны в спецификации. Значения параметров задаются либо в абсолютном выражении в наносекундах или в циклах (тактах) тактового генератора.
tRCD (ACTIVE to READ or WRITE delay) – время необходимое на активацию строки банка памяти или минимальное время между командой активации и командой чтения/записи.
CL (CAS Latency) – время между командой чтения и началом передачи данных.
tRAS (ACTIVE to PRECHARGE command) – время необходимое на накопление заряда для операции закрытия строки банка или минимальное время между командой активации и командой закрытия (для одного и того же банка).
tRP (PRECHARGE command period) – время необходимое на закрытие строки банка памяти или минимальное время между командой закрытия и повторной активации (для одного и того же банка).
По ходу можно дать ещё пару определений параметров, не отображённых на диаграмме.
tRRD (ACTIVE bank A to ACTIVE bank B command) – минимальное время между командами активации для разных банков.
tRC (ACTIVE to ACTIVE/Auto Refresh command period) – минимальное время между командами активации одного и того же банка. Собственно это время состоит из tRAS+tRP.
При последовательном чтении следующая команда подаётся, когда данные предыдущей ещё не закончили передаваться. Это и есть конвейеризация. При этом CL абсолютно не влияет на пропускную способность памяти. Если предвыборка данных контроллером памяти организована хорошо, то CL имеет совсем небольшое влияние на производительность.
tWR (Write recovery time) – минимальное время между окончанием передачи данных при записи (по переднему фронту) и командой закрытия строки банка памяти (для одного и того же банка).
Как видно, в случае операции чтение-запись, конвейеризация не работает. Получается бесполезный пропуск 1 такта.
При операции запись-чтение, конвейеризация тоже не работает. Пропуск равен tWTR+CL тактов.
tWTR (Internal Write to Read Command Delay) – минимальное время между окончанием передачи данных при записи (по переднему фронту) и командой чтения (для любого банка памяти).
Собственно это все параметры памяти, влияющие на производительность, за исключением параметров, относящихся к регенерации. Пару слов можно сказать про наилучшие значения параметров памяти. Все параметры, за исключением CL, определяют минимальное время. Параметр CL жестко фиксирован и программируется в чипе памяти при инициализации (кстати, это объясняет невозможность изменения CL на платах nForce2 без перезагрузки, в то время как tRAS и другие параметры менять можно). Для любого параметра меньшее значение обеспечивает более высокую скорость. Влияние на производительность некоторых параметров приведено в статье "Зависимость производительности от частоты шины и параметров памяти на ASUS A7N8X-X (nForce2 400)".
Чипы памяти, модули памяти.
Под понятием DDR SDRAM подразумеваются собственно чипы или микросхемы памяти. В обычных современных компьютерах в качестве основной памяти используются модули памяти DIMM (Dual In-Line Memory Modules). Модуль памяти представляет собой "сборку" на печатной плате, состоящую из нескольких чипов памяти. Кроме того, на модуле расположена небольшая энергонезависимая память для хранения конфигурационной информации (SPD). Это маленькая микросхема с небольшим числом выводов. В случае буферизированных модулей, имеются чипы буферов.
Ширина шины данных в простых DIMM равна 64 линии (разрядность 64 бит). В модулях с коррекцией ошибок (ECC) - 72 линии (64 бита данных и 8 бит для коррекции). Обычно чипы памяти имеют разрядность 4, 8, 16 бит. Поэтому для получения разрядности 64 бита, необходимой для модуля памяти, используется несколько чипов: 16 чипов по 4 бита, 8 чипов по 8 бит или 4 чипа по 16 бит. Возможно параллельное включение двух наборов чипов памяти с разбивкой на два банка. При этом каждый из наборов работает независимо от другого. Обычно эти наборы состоят из 8 чипов по 8 бит и находятся на разных сторонах модуля памяти. Получается так называемый двухсторонний модуль. Такие банки памяти обычно называют физическими. Может быть или 1 банк (односторонний модуль) или 2 банка (двухсторонний модуль). Банки памяти, организованные внутри чипов, обычно называют логическими. Количество логических банков строго оговорено в спецификации и равно 4. Наличие двух физических банков увеличивает общее количество банков памяти в два раза, с 4 до 8.
Из-за большего количества банков двухсторонний модуль памяти обеспечивает производительность немного выше по сравнению с односторонним. Аналогичная ситуация с количеством модулей. Чем больше модулей памяти, даже для одноканальных чипсетов, тем лучше. Правда необходимо помнить, что увеличение количества чипов памяти и особенно модулей, дополнительно нагружает линии ввода/вывода. Это не только снижает разгонный потенциал, но и, в некоторых случаях, вызывает необходимость к ухудшению параметров памяти для обеспечения стабильной работы. Если важен разгон, то лучше ограничиться одним односторонним модулем с минимальным количеством чипов. Если система будет работать без разгона, то лучше двухсторонние модули или даже несколько модулей. Однако не стоит ожидать большого прироста производительности. Кроме того, эффект зависит от возможностей чипсетов. Я сомневаюсь, что все они "выжимают" максимум из наличия большого количества банков.
Пару слов можно сказать о тепловыделении модулей памяти. Только цифры. Память Nanya DDR400 SDRAM 512 Мб, операция последовательного чтения – 8 Вт, произвольный доступ (максимальная нагрузка) - 13 Вт. Для модулей 256 Мб тепловыделение почти в два раза меньше.
Параметр tRAS и формула Mushkin.
Active Precharge Delay (tRAS) = RAS to CAS Latency (tRCD) + CAS Latency (CL) + 2
Она объясняется производителем памяти просто. Это время операции единичного или минимального чтения. Если tRAS будет меньше, то контроллер памяти будет закрывать строку памяти и понадобится повторная активация. Уже здесь есть несостыковка.
Неужели контроллер памяти настолько "глуп", чтобы прерывать передачу? Кроме того, как было показано на диаграммах, время единичного чтения вычисляется как tRCD+4. Здесь в принципе не может быть параметр CL. Длина пакета данных равна 4 такта, но никак не 2 такта. Больше всего возмущает не абсурдность формулы, мало ли ерунды есть в Интернете. Эта формула приведена на странице, обличающей недобросовестных производителей памяти, которые указывают минимальные значения tRAS и CMD rate для своей продукции. По "обличительной" версии Mushkin, минимальное значение tRAS не обеспечивает максимальной производительности. Получилось очень некрасиво.
Можно прокомментировать и ещё один "перл" на этой же странице. Он заслуживает внимания из-за достаточной распространённости. Вот оригинал: "Any tRAS setting lower tRCD + CAS + 2 cycles ... Along with those hassles comes the self-explanatory risk for data corruption. That one is not a real problem as long as the system is kept running but in case it is shut down and the memory content is written back to the hard disk drive, the consequences can be catastrophic. For the drive, that is." Здесь написано, что черезмерно низкое значение tRAS может вызывать повреждение данных. Причем это не проблема, пока система работает, но как только происходит выключение и содержимое памяти записывается на диск, последствия могут быть катастрофическими для диска.
В Интернете встречаются и более "откровенные" выражения о том, что ошибки появляются только при выключении, без слова "может". Собственно у меня не было сомнений в таких утверждениях. Мало ли какие нюансы могут быть при выключении компьютера. Но осознание "авторитетности" источника позволяет достаточно просто объяснить это. Вероятно, имелось в виду, что если сбой (любой, в том числе и от заниженного tRAS для памяти) произойдет во время работы компьютера, то, в большинстве случаев, это не катастрофа. Зависание, синий экран, сообщение "Программа выполнила недопустимую операцию и будет закрыта". Все это "лечится" перезагрузкой и установкой корректных значений параметров памяти. Если сбой произойдёт во время записи данных на диск, в том числе и при выключении компьютера, то можно повредить не только пользовательские данные на диске, но и важные системные файлы (например, реестр). После этого компьютер может не "запускаться". При повреждении метаданных файловой системы теоретически можно вообще потерять все данные на диске (на самом деле, возможно ручное восстановление некоторых данных или их частей). Таким образом "сбой при выключении" – это своеобразная страшилка для "запугивания детей".
Каким должен быть tRAS.
По определению, значение tRAS, обеспечивающее максимальную производительность должно быть минимальным. Однако что же на практике?
Небольшое исследование влияния tRAS на производительность с рисунками приведено в этом форуме. Максимальная скорость на материнской плате с чипсетом nForce2 400 Ultra была зафиксирована при значении tRAS 11 тактов. По заявлению www.anandtech.com, на чипсетах Intel 865/875 максимальная производительность достигается при минимальном значении tRAS. На чипсетах nForce – при значении tRAS 8 тактов или 11 тактов. Значит все дело в специфике чипсета nForce2. Память здесь не причем.
Все попытки объяснения такого значения tRAS для nForce2 не дали результатов. Придумать ничего не удалось. Единственное, было найдено приложение, производительность которого сильно зависит от tRAS. Это архиватор SBC. В основе его алгоритма лежит трансформация (сортировка) больших блоков данных.
Сам характер зависимости объяснить вполне по силам. С одной стороны, при увеличении значения tRAS, контроллер памяти вынужден дополнительно ожидать, пока можно будет закрыть активную строку. Это заметно влияет на производительность только при достаточно больших значениях tRAS, так как необходимость в закрытии строки буквально сразу после открытия возникает редко. С другой стороны, если значение tRAS очень мало, то возможна такая ситуация. Контроллер памяти выполнил предварительную активацию строки. Смысл этого действия аналогичен предвыборке данных. Однако в течение нескольких следующих тактов обращения к этой активной строке не было. Тогда контроллер памяти закрывает эту строку как не используемую. Однако в дальнейшем обращение все же происходит. В результате затрачивается дополнительное время на повторную активацию строки. Увеличением tRAS можно искусственно заставить контроллер памяти оставлять открытыми строки памяти большее время, что позволяет в дальнейшем быстро к ним обращаться. Если сложить этих два фактора, то и получится, что при максимальных значениях tRAS большее влияние оказывает один фактор, а при минимальных – другой. Максимум наблюдается в районе 9 тактов или 11 тактов. Необходимо так же отметить, что в спецификации DDR SDRAM минимальное значение tRAS для DDR400 равно 8 тактам, а для DDR333 равно 7 тактам.
Разница между разогнанной DDR333 и DDR400.
Существует разница в значении параметра tWTR и параметров регенерации между DDR400 и DDR333, разогнанной до частоты DDR400. Время регенерации остаётся неизменным (в абсолютном выражении). Параметр tWTR для DDR333 равен 1 такту, для DDR400 равен 2 тактам. Особенностью этого параметра является то, что он не влияет на низкоуровневые тесты памяти. Заметное влияние может быть только в реальных приложениях. К сожалению, измерить величину этого влияния нет никакой возможности.
Такое изменение tWTR на 1 такт будет происходить при смене параметров с DDR333 на DDR400 на промежуточной частоте 183 МГц. Это частично (но никак не полностью) объясняет провал производительности на 183 МГц, рассмотренный в статье "Зависимость производительности от частоты шины и параметров памяти на ASUS A7N8X-X (nForce2 400)". Таким образом, небольшой провал производительности на частоте 183 МГц будет вообще на любой материнской плате, поддерживающей DDR400.
Итоги.
В Интернете много ошибочной информации, очень много. Даже производители памяти не застрахованы от ошибок и ерунды.
Для максимальной производительности значение параметра памяти tRAS должно быть минимальным. Однако для материнских плат на чипсете nForce2 это значение должно быть в районе 9 тактов или 11 тактов.
Небольшое падение производительности в реальных приложениях на частоте 183 МГц должно быть на всех материнских палатах, поддерживающих DDR400, и связано с ухудшением параметра tWTR. Чтобы избежать такого падения, можно установить в BIOS память как DDR333, загрузиться, а затем разогнать память до частоты DDR400 при помощи специальных утилит (например, ClockGen). Эти утилиты обычно не изменяют параметров чипсета, отвечающих за работу с памятью.
Ждём Ваших комментариев в специально созданной ветке конференции.