Двухканальные 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, который предоставляет чрезвычайно широкую информацию по латентности. Собственно, именно благодаря появлению в нашем тестовом арсенале этой программы мы и решили вплотную заняться тестированием двухканальных контроллеров -- с одной стороны, это действительно интересная тема, а с другой -- замечательный повод "обкатать" методику.
Результаты тестов
Скорость чтения из памяти
Для начала -- о различных наборах команд
и зависимости скорости работы с ОЗУ от этого фактора. Мы специально приводим в
первом "разделе" комментариев к результатам тестов все три диаграммы:
для стандартных инструкций, 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