Двухканальные DDR-чипсеты: исследуем "под микроскопом"

15 апрель, 2003 - 23:00Станислав Гарматюк
Исследования производительности подсистемы памяти входят как одна из составляющих в более общую тему: исследования быстродействия чипсетов. Однако появление нового класса наборов микросхем, оснащенных двухканальными контроллерами DDR SDRAM, "подвигнуло" нас на более детальное ознакомление с особенностями их работы. И оказались они довольно-таки любопытными...

А что нас, собственно, интересует?

Для начала давайте зададим себе один очень простой вопрос: почему нас вообще интересует производительность подсистемы памяти? Вроде бы ответ очевиден -- "Потому что это одна из составляющих производительности компьютерной системы в целом". Однако раз уж мы сказали "а" ("...одна из..."), то следует сказать и "б" -- быстродействие некоей подсистемы, являющейся частью компьютера, как правило, оказывает влияние на скорость компьютера в целом в конкретном количестве случаев, но не более того. Фактически в рамках архитектуры x86 не существует такой подсистемы, которая бы оказывала влияние на производительность "при любом раскладе".

Однако предположим, что "все хорошо", и быстродействие ОЗУ на нужное нам ПО влияет очень сильно. Стоит ли нам в таком случае стремиться к задействованию самой быстрой памяти из имеющихся в данный момент на рынке? Ответ "традиционный" -- и да, и нет. Разумеется, теоретически DDR400 однозначно быстрее DDR333, а последняя, соответственно, превосходит DDR266. Но память, как известно, работает не в безвоздушном пространстве -- она устанавливается в системную плату, изготовленную на основе определенного чипсета, и функционирует в связке с неким CPU. Рассмотрим звенья этой цепи. Первое звено -- память, которая посредством некоей шины соединена с чипсетом. Второе звено -- чипсет, а точнее -- встроенный в него контроллер памяти. К контроллеру памяти (сознательно отбрасываем лишнее) подходят две шины -- одна, как уже говорилось выше, -- шина памяти, вторая -- процессорная шина. Ну и посредством последней подключается конечное звено в цепочке -- сам процессор. Нетрудно догадаться, что влияние на быстродействие конечной системы оказывают все без исключения звенья цепочки -- память, ее шина, контроллер, процессорная шина и даже сам процессор. Да, да -- именно процессор! На производительность подсистемы памяти сам он, конечно, влияния оказать не может -- зато он может повлиять на степень задействованности этой подсистемы! Ведь запросы к памяти появляются не из воздуха -- они генерируются именно процессором. Следовательно, если запросов по каким-то причинам мало (к примеру, CPU работает на недостаточно высокой частоте и относительно медленно исполняет код) -- то скорость их выполнения на общее быстродействие существенного влияния оказать не сможет. Кроме того, с какой бы частотой ни работала шина памяти, на процессор данные будут поступать ни в коем случае не быстрее, чем это может обеспечить его собственная шина. Ну и вот, наконец-то мы "окружили со всех сторон" основной объект внимания в данном материале -- контроллер памяти, встроенный в чипсет. Проще всего объяснить его роль на примере такой аналогии: представьте себе, что контроллер памяти -- это что-то вроде коробки передач. С одной стороны к нему подходит шина памяти (коленвал), с другой -- процессорная шина (карданный вал). Правда, в нашем случае "переключать передачи" на ходу невозможно, но сути вопроса это не меняет -- контроллер памяти согласовывает две разные шины -- FSB (CPU Front Side Bus) и шину памяти. От того, насколько хорошо он это делает, зависит процент потерь в общей "сквозной" пропускной способности канала процессор <--> память. Подытоживая все вышесказанное, мы наконец-то можем получить корректную формулировку: реальная (и способная быть задействованной) пропускная способность канала процессор <-> память зависит от частот функционирования памяти, процессора, их шин и удачности конструкции контроллера памяти. А если попросту, то вот несколько примеров из серии "от противного", т. е. "что такое плохо":

  • системе со "слабеньким" процессором даже самая быстрая память не поможет;
  • если пропускная способность процессорной шины меньше, чем пропускная способность ОЗУ, -- считайте, что в большинстве случаев ваша память "греет воздух";
  • быстрая память при плохом контроллере запросто может оказаться хуже по быстродействию, чем медленная при хорошем.
Основные параметры

Итак, мы уже выяснили, что запросы к подсистеме памяти генерирует процессор, а выполняет их -- контроллер. Теперь давайте определимся с тем, какими эти запросы бывают. Первое, что приходит в голову, -- чтение. То есть считать из памяти (ОЗУ --> шина --> контроллер --> еще одна шина --> процессор...) содержимое ячейки с заданным адресом или же несколько ячеек сразу с указанием диапазона адресов. Аналогичным образом выполняются запросы на запись. А вот о том, что существует еще и команда move (считать содержимое ячейки/диапазона и присвоить ее/их значение другой ячейке/диапазону), многие почему-то забывают, хотя используется эта простая команда в программах довольно часто. Вот вроде бы и все. Однако... не совсем. Потому что "чистый x86-код" -- это ведь "времена Очакова и покоренья Крыма", а на дворе у нас год 2003, и основные процессоры сегодняшнего дня, кроме классических x86-команд, поддерживают еще как минимум MMX и SSE. И кто, собственно говоря, сказал, что скорость доступа к памяти, замеряемая программным способом, не будет отличаться в зависимости от того, какие именно команды мы используем? Следовательно, вырисовывается уже гораздо более сложная картина: нас интересует скорость чтения, записи и переноса данных при использовании классических и дополнительных наборов команд. Все ли это, что мы хотим знать? И снова нет. Давайте теперь более подробно остановимся на скорости. Какая именно скорость нас интересует? Мегабайты в секунду, и только? Возвращаемся к описанию "процесса общения" CPU с ОЗУ... Итак, процессор послал запрос. Что он делает дальше? Дальше он ждет начала поступления данных. И только потом, дождавшись, начинает их принимать. Следовательно, на общую производительность подсистемы процессор <-> память влияет не только скорость прокачки данных, но и "время реакции" -- промежуток между посылкой запроса и получением ответа. Как правило, в компьютерном мире последний параметр называют латентностью. В общем-то, это не совсем верно... но уже настолько прижилось, что нет никакого смысла употреблять другой термин.


Двухканальные контроллеры

Ну а теперь рассмотрим подробнее основных героев этого материала: двухканальные контроллеры памяти. Разумеется, рассматривать мы их будем не сами по себе, а в составе соответствующих десктопных чипсетов. Для платформы Socket 478 таких наборов микросхем сейчас два: Intel E7205 и SiS 655. Для платформы Socket A -- всего один -- NVidia nForce2 (nForce уже снят с производства). Поэтому в качестве объекта для "тестового тестирования" мы избрали платформу Socket 478.

Итак, как же работает двухканальный контроллер? К сожалению, полной информацией по данному вопросу интересующихся снабжает только Intel -- в документе, озаглавленном "Intel E7205 Chipset Memory Controller Hub (MCH) Datasheet". А вот та "техническая документация", что доступна на сайте Silicon Integrated Systems, на свое гордое название никак "не тянет" -- скорее, это просто руководство для менеджеров на тему "как правильно описывать наш продукт". Двухканальный контроллер в чипсете Intel E7205 организован достаточно просто и логично -- к каждому каналу подключается "свой" модуль памяти (DIMM), после чего организуется общее адресное пространство с "эффектом чересполосицы" из строк (rows) памяти по принципу "строка 0 -- первый контроллер, строка 1 -- второй контроллер, строка 2 -- первый контроллер"... и так далее. В результате теоретически мы можем читать сразу из двух каналов или читать из одного и писать в другой. Но! -- именно теоретически. Ведь не стоит забывать, что если искомые данные полностью умещаются в одну строку и более никаких запросов к памяти контроллеру в настоящий момент обрабатывать не нужно, то один из его каналов просто-напросто останется незадействованным, он будет простаивать! Кроме того, не стоит забывать, что фактически мы имеем уже не одну, а две шины памяти, которые следует как-то согласовать с одной процессорной, и необходимость такого согласования также может быть источником задержек. В результате всех этих рассуждений становится ясно одно: производительность подсистемы памяти, и так достаточно сильно зависящая от контроллера, в случае с контроллером двухканальным зависит от него еще больше, а он сам -- становится еще сложнее.


Методика тестирования

"Железная" ее составляющая была в этот раз довольно проста: три платы от одного производителя (в кои веки удалось собрать такую удачную комбинацию!), процессор Pentium 4 3,06 GHz и два модуля DDR400 CAS 2.5 по 256 MB каждый. Последние при необходимости выполняли роль и DDR333/266. К слову, поскольку основной задачей в данном случае было сравнить между собой чипсеты, а не память, параметр CAS мы при работе DIMM на пониженных частотах не меняли -- он всегда оставался равным 2,5. SiS 655 "представляла" системная плата Micro-Star 655 Max (MS-6730 V1), Intel E7205 -- Micro-Star GNB Max (MS-6711 V1), ну а для того, чтобы "было от чего отталкиваться", в качестве конкурентов для них мы взяли наиболее распространенный i8545PE в лице Micro-Star 845PE Max2 (MS-6704 V2). Проще всего было с чипсетами Intel: i845PE для получения полной картины производительности необходимо было протестировать всего два раза -- с DDR266 и DDR333, E7205 тоже два раза -- в двухканальном и одноканальном режиме. Зато SiS 655, поддерживающий DDR266/333/400, и также способный работать в одно- и двухканальном режиме, из нас "кровушки попил": шутка ли -- шесть раз подряд тестировать один набор микросхем!

А вот программный инструментарий может на первый взгляд показаться скудным: всего-то две программы! Одна из них нашим постоянным читателям знакома -- это архиватор 7-zip с опционально включаемой многопоточностью (что совсем нелишне, учитывая поддержку Hyper-Threading всеми участниками тестирования). А вот вторая... Честно говоря, чисто случайно найдя не так давно этот небольшой тест на просторах Internet, мы были просто шокированы его функциональностью. CacheBurst32 позволяет измерить скорость памяти и процессорного кэша практически всеми известными способами: с помощью стандартных MMX- и SSE-команд, при чтении, записи и переносе, а также содержит выделенный в отдельную группу подтест Memory Walk, который предоставляет чрезвычайно широкую информацию по латентности. Собственно, именно благодаря появлению в нашем тестовом арсенале этой программы мы и решили вплотную заняться тестированием двухканальных контроллеров -- с одной стороны, это действительно интересная тема, а с другой -- замечательный повод "обкатать" методику.


Результаты тестов

Скорость чтения из памяти

Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Двухканальные DDR-чипсеты исследуем "под микроскопом"
Для начала -- о различных наборах команд и зависимости скорости работы с ОЗУ от этого фактора. Мы специально приводим в первом "разделе" комментариев к результатам тестов все три диаграммы: для стандартных инструкций, MMX и SSE, чтобы читатели могли убедиться -- да, действительно, на абсолютные величины скорости использование различных наборов команд влияет, но на относительное положение чипсетов в рейтинге -- чрезвычайно редко. Проще говоря, если набор микросхем оказался на пятом месте по результатам MMX-теста, то с большой вероятностью можно предсказать, что он попадет на пятое место и в тесте с использованием SSE, и если измерять скорость с помощью обычных x86-команд. Поэтому в дальнейшем "по умолчанию" мы будем приводить только SSE-результаты -- как самые "быстрые".

Итак, чтение. Впереди с внушительным отрывом Intel E7205, работающий в двухканальном режиме. И следует отметить -- с весьма впечатляющей скоростью: 3,3 GBps. Учитывая, что суммарная пропускная способность двухканального контроллера DDR266 -- 4,2 GBps, получаем КПД порядка 79% -- это очень хороший показатель, даже мы бы сказали -- отличный! Далее начинается "царство SiS" -- во всех двухканальных вариантах (DDR266/333/400) и в одном одноканальном -- с DDR400. Что ж, неплохо. Для SiS -- весьма неплохо. Правда, если вспомнить, что первое место занял чипсет, работавший в комбинации с "дряхлой" DDR266, -- радости по поводу успехов тайваньского чипмейкера немного поубавится... Не менее, чем "верх", интересен "низ" диаграммы. Обратите внимание -- будучи поставленными в одинаковые условия (одноканальность, равная частота работы памяти), все три чипсета демонстрируют практически одинаковые результаты.

А вот на диаграммах MMX Read и x86 Read весьма интересен "рывок вверх" i845PE с DDR333. Если на SSE Read он двухканальным вариантам SiS 655 на DDR333/400 и даже одноканальному SiS 655 с DDR400 проигрывает, то уже на на MMX Read идет с ними же почти вровень! А теперь сравним цифры, к примеру, у i845PE + DDR333 и SiS 655 + 2 DDR400.

i845PE (x86/MMX/SSE):
2046...2228...2385 MBps
SiS655 (x86/MMX/SSE):
2110...2384...2966 MBps

Интересно, правда? Там, где у SiS 655 происходит "рывок" (на командах SSE), скорость работы с памятью у i845PE остается практически такой же. Почему? Нам кажется -- потому, что вот только тут мы и наблюдаем, как скорость "уперлась" в физические ограничения чипсета. В случае же с SiS 655 процессор, похоже, просто не в состоянии, как следует, "нагрузить" контроллер запросами, поэтому чем более "скорострельные" команды используются -- тем выше скорость работы с памятью, но "потолка" еще не видно... Об этом же косвенно свидетельствуют практически идентичные результаты SiS 655 в двухканальном режиме с памятью DDR333 и DDR400. Таким образом, пока что особого смысла в поддержке DDR400 в двухканальных чипсетах мы не видим -- топовый процессор Intel еще не в состоянии загрузить работой такие контроллеры, даже на низкоуровневых тестах.


Скорость записи в память

А вот тут мы были буквально повергнуты в шок. Виданное ли дело -- все чипсеты Intel в самом низу! Двухканальный вариант E7205 проиграл одноканальному SiS 655 с DDR266! Ужас, одним словом... Однако к возможным причинам такой странной картины мы вернемся чуть позже, в комментариях к тестам латентности, а пока посмотрим повнимательнее на нашего чемпиона. А картина ведь очень интересная, даже мы бы сказали -- поучительная. Три верхние строчки -- SiS 655 + DDR400 в одноканальном и двухканальном режиме и он же в двухканальном режиме с DDR333. И сразу же бросается в глаза, что скорость все эти три варианта демонстрируют практически одинаковую. Что это означает? А то же самое, что и в случае с чтением -- это не производительность у них одинаковая, а процессор у нас "слабенький". Не может он быстрее писать в память! Ну а учитывая, что "слабеньким" у нас оказался Pentium 4 3,06 GHz, поневоле начинаешь задумываться, какой же тогда нужен процессор, чтобы "освоить" предлагаемую мощь контроллера...


Скорость переноса данных

В общем, картина, которую мы видим на этой диаграмме, может быть получена не только путем тестовых замеров, но и простым анализом двух предыдущих диаграмм. Правильно -- для того чтобы перенести данные из одного места в другое, их нужно сначала прочитать, а потом записать -- соответственно, анализ производительности чипсетов при чтении и записи вполне способен дать ответ на вопрос, кто окажется на каком месте по скорости переноса. В общем-то, все места распределились логично -- очень быстро пишущий SiS 655 занимает три верхних ряда, но в комбинации с той же памятью, что и E7205, он и работает примерно с такой же скоростью. К слову, это единственная диаграмма (и единственная операция с данными, соответственно), на которой видна разница между двухканальной DDR333 и DDR400 на SiS 655. Так что "все не так плохо" -- в одном случае из трех какая-то польза есть...


Латентность

Ну, "зато теперь мы знаем, где нет грибов". Измерение задержек при доступе к памяти расставило все на свои места: чипсеты Intel (что i845PE, что E7205) впереди, SiS 655 -- еле-еле догоняет их в двухканальном режиме и с DDR400. А теперь давайте попробуем разобраться -- из-за чего вообще задержки у различных чипсетов могут быть разными? Память-то -- одна и та же! Напрашивается вывод, что разница получается из-за различий в реализации неких "управляюще-сопрягающих" механизмов. А другими словами, в подходе к буферизации. Сопрягая две шины, работающие на разных частотах или даже просто различающиеся по пропускной способности, нам не обойтись без буфера. Буфер же -- механизм, привносящий в функционирование любого устройства инерционность. Отсюда и задержки. А теперь давайте вспомним "чудесатые" результаты SiS 655 в тестах записи и его же "разгром" в тестах латентности. Быть может, это просто две стороны одной медали? Разумеется, мы не можем утверждать это со 100%-ной уверенностью, но почему-то приходит в голову очень простое объяснение данного феномена: скорее всего, работая над проблемой сопряжения трех шин в своем первом двухканальном чипсете, SiS, не мудрствуя лукаво, начала разработку с того, что интегрировала в контроллер памяти довольно большой по объему буфер. Разумеется, чем больше у нас буфер (это ведь все равно, что кэш) -- тем проще "разводить" потоки, но... тем выше его инерционность, а значит -- и латентность! Уж не этим ли и объясняются все "странности" SiS 655?


Реальное приложение (архиватор 7-zip)

Что ж, как и всегда, реальность расставила все по местам. Не так уж и "круты" оказались двухканальные чипсеты -- обычный одноканальный (но с традиционно быстрым контроллером от Intel) i845PE с памятью DDR333 вполне успешно конкурирует с E7205 и SiS 655 + DDR400, отставая от них не более чем на 11%. Конечно, 11% -- "тоже цифра", но сравните диаграммы с результатами 7-zip и CacheBurst32 -- и вы поймете, как эфемерно подчас оказывается превосходство в "синтетике" по сравнению с приземленной действительностью. Впрочем, если подойти к вопросу с другой стороны -- а что, мы так часто наблюдаем хотя бы десятипроцентную разницу в производительности? Что же касается соперничества двухканальных чипсетов между собой, то общая ситуация выглядит примерно так, как и должна была бы выглядеть по идее, -- SiS 655 в комбинации с DDR400 является самым быстрым, но E7205 + DDR266 постоянно "наступает ему на пятки". Ну а даже с DDR333 набор микросхем от Silicon Integrated Systems уже начинает чипсету Intel уступать (впрочем, тоже несильно).


Выводы

Что ж, похоже, двухканальные чипсеты действительно справляются с основной возложенной на них "задачей": быть быстрее одноканальных. Разумеется (о чем мы уже неоднократно писали), их преимущества будут видны только в тех приложениях, которые в принципе способны "ощутить" разницу в производительности подсистемы памяти, но хорошо, что хотя бы в этих приложениях виден реальный прирост! Разумеется, он далек от двукратного, но этого никто и не ожидал -- "чудес на свете не бывает". Что же касается соперничества двухканальных решений от Intel и SiS -- то тут все более или менее очевидно: да, на данный момент SiS 655 в комбинации с DDR400 действительно по общему зачету быстрее, то есть формальным лидером является именно он. Порадуемся за SiS -- в кои-то веки она "в чемпионах". Но, с другой стороны, собственно контроллер памяти у SiS 655 спроектирован явно хуже, чем у E7205, -- и только отсутствие поддержки DDR333/400 мешает двухканальному чипсету Intel занять верхнюю позицию в рейтинге. Сильно мы сомневаемся, что такая ситуация продлится долго...

Системные платы MSI предоставлены компаниями MSI, www.msi.com.tw, и Service ASN: тел. (044) 213-1118.
Память DDR400 предоставлена компанией K-Trade: тел. (044) 252-9222