Подсистема памяти -- чем дальше, тем страшнее...

5 февраль, 2004 - 00:00Денис Хлебосолов
После ознакомления с теоретической частью самое время перейти, так сказать, к "практической теории". В данной статье мы поговорим о том необходимом багаже знаний, которым надо владеть для успешной и грамотной настройки подсистемы памяти. Поскольку понятие "подсистема памяти" имеет достаточно широкий диапазон значений и трактовок, придется сделать соответствующие уточнения -- мы рассмотрим работу "стандартной" системной памяти на примере наиболее популярных современных платформ, а отдельный материал будет целиком посвящен тестированию модулей.

Память до сих пор остается одним из самых "таинственных инструментов" современного компьютера, и для пользователя сложность управления и организации работы этой неотъемлемой составляющей любого компьютера растет в геометрической прогрессии. Во времена 386-х и 486-х основные трудности и премудрости заключались лишь в правильном выборе модулей FPM. Затем были выпущены более совершенные модули EDO, а BIOS Setup стали "обзаводиться" настройками, позволяющими хоть как-то управлять режимами работы памяти. С появлением модулей SDRAM организация подсистемы памяти лишь с небольшими изменениями (и постоянными усложнениями) дошла до наших дней. Поэтому опорным пунктом предлагаемой нами "практической теории" будет память PC100, продержавшаяся достаточно долго, да и сейчас нередко встречающаяся. Но сначала поговорим немного об общепринятых методах определения производительности подсистемы памяти.

Собственно говоря, сама методика включает всего три способа, которые для простоты понимания условно назовем так: прямые (низкоуровневые), синтетические и относительные. Первые включают в себя вычисление скорости записи в память, чтения из памяти, иногда еще копирования данных специализированными программами. Наиболее известные и часто применяемые -- CacheMem, Cache Burst 32, причем производительность именно памяти определяется при размере блока данных, обязательно превосходящем объем процессорных кэшей всех уровней. Обе эти программы являются достаточно гибкими инструментами, кроме скорости и латентности памяти, с их помощью можно найти значения этих же параметров для кэшей CPU. Немаловажен и тот факт, что продемонстрированные ими результаты не противоречат друг другу. Однако Cache Burst 32 все же имеет ряд преимуществ в плане функциональности по сравнению с CacheMem, поэтому в большинстве случаев мы оперируем именно его показаниями.

Вторая (синтетическая) группа тестов представляет собой подтесты из популярных пакетов, определяющие производительность подсистемы памяти. Наиболее распространенные -- PCMark, AIDA, SiSoft Sandra. Хотя последние два пакета отличаются от PCMark тем, что отображают свои результаты не в "марках", а, подобно "низкоуровневым" тестам, в "мегабайтах в секунду", но нам неизвестны алгоритмы определения производительности. Кроме того, полученная с их помощью информация иногда, мягко говоря, далека от реальности. Однако с точки зрения обычного пользователя ценность информации, выдаваемой этими пакетами, достаточно велика, а встроенную систему "бенчмарков" можно рассматривать как "приятную добавку". Тест PCMark сложно назвать информативным в отношении производительности подсистемы памяти, да и вообще он в этом амплуа уже давно не используется. Скорее, это "мерило крутизны", но ведь именно к этому и стремились разработчики, так что все честно.

Третий, наиболее интересный и профессиональный метод определения производительности подсистемы памяти -- сравнительный. Что имеется в виду? Когда для тестирования применяются реальные задачи, нагружающие память, а заключения делаются исходя из сравнительных показателей быстродействия нескольких систем, отличающихся организацией подсистемы памяти. Как правило, это комплекс тестов, включающий в себя игровые пакеты, работу архиваторов, сложную обработку растровых изображений, иногда медиакодирование. Данный список можно расширять, но на практике даже этот набор уже считается достаточно серьезным.

К примеру, есть необходимость определить, насколько один чипсет "быстрее" другого (относящегося к той же платформе). По показаниям "прямых" тестов можно сделать некоторые предположения, посредством сопоставления производительности в реальных задачах с низкоуровневыми набросками находятся отличия в быстродействии, и главное -- их причина! Затем с помощью имеющихся данных можно выполнять синтетические тесты -- тестировать не ими, а именно их, для определения достоверности результатов. Хотя это похоже на шутку, но для многих подобная деятельность (т. е. разоблачение "продажных" изготовителей тестов производительности) действительно становится неким хобби.

Но вернемся к теории. Самое время поговорить, чем же отличаются модули нового поколения с индексом PC3200 от "былых" PC100 и какие за это время произошли изменения. Ранее цифра "100" означала реальную частоту шины памяти. Поскольку контроллеры памяти были 64-битные (т. е. 8-байтовые), получаем теоретическую пропускную способность 100 x 8=800 MBps. В современных модулях как раз наоборот -- указывается та самая максимальная пропускная способность, т. е. "3200" -- это 3200 MBps. Чтобы "уравнять" прежнюю и нынешнюю организацию памяти, рассмотрим, какому бы ранее индексу соответствовала современная память DDR400 (PC3200), работающая в двухканальном режиме.

Реальная частота шины при DDR400 составляет 200 MHz, двойная передача данных за один такт (DDR) теоретически эквивалентна повышению частоты до 400 MHz, двухканальный (128 бит) контроллер памяти, благодаря одновременному считыванию с обоих каналов, увеличивает пропускную способность еще вдвое. Иными словами, в результате "спроецировав" PC3200 при 128-битном доступе на частоты, мы имеем 200x2x2=800 MHz. Следовательно, теоретическая производительность РС3200 оказалась соответствующей обычной памяти SDRAM, условно работающей на частоте 800 MHz, т. е. PC800 по "старым" стандартам. Если провести аналогию с жизнью реальной, то при прочих равных условиях показанное быстродействие PC800 было бы значительно выше, нежели двухканальной PC3200, по причине значительно более простой организации, а следовательно, меньших задержек. Но, к сожалению, такие частоты для SDRAM просто недостижимы за разумную цену, вот и приходится инженерам "выкручиваться" с помощью различных прогрессивных технологий повышения производительности.

Разобравшись на "скорую руку" со стандартами, перейдем к основным параметрам подсистемы памяти, имеющим отношение к быстродействию. Два термина мы уже затронули -- это теоретическая и реальная пропускная способность. Первая, как несложно догадаться, равна математически вычисленной максимальной скорости передачи данных, которую реализует шина. Говоря о реальной пропускной способности, обычно имеют в виду максимально достигнутую скорость передачи данных в памяти, продемонстрированную специализированными тестовыми пакетами. Далее идут наиболее часто встречающиеся термины -- "скорость чтения", "скорость записи". Определяются эти величины также "мегабайтами в секунду" и показывают производительность при соответствующих операциях с памятью. Так вот, очень важно знать, каким образом эти величины высчитываются и какие процессорные ресурсы при этом привлекаются. Быстродействие в режиме 32-битной передачи данных с задействованием регистров FPU будет значительно меньше, нежели при 128-битной передаче с использованием команд SSE/SSE2.

Также одним из наиболее важных параметров является латентность -- время реакции памяти, иными словами, наблюдаемая инерционность при изменении режимов ее работы. Или упрощенно: латентность -- это, по сути, значение задержки между посылкой команды на чтение (запись) некой ячейки (блока ячеек) памяти и выполнением этой команды. Вообще, по поводу терминов и определений латентности существует достаточно много теорий. Попробуем высказать нашу точку зрения в отношении данного параметра. Латентность -- это мера неэффективности (поскольку большее значение является худшим показателем) использования подсистемы памяти. Более детально и наглядно со всеми этими параметрами и значениями нам поможет разобраться табл. 1.

Таблица 1. Основные показатели производительности подсистемы памяти на различных платформах
Таблица 2. Формулы вычисления коэффициентов
Таблица 3. Конфигурации тестовых систем
Наверное, даже искушенный в этой области читатель не сразу поймет, что стоит за обилием приведенных цифр и столбцов. С первыми двумя колонками все должно быть понятно -- это частота работы шины памяти и соответствующая теоретическая пропускная способность контроллера памяти. Следующие три колонки -- реальные значения, полученные для применяемых платформ с помощью пакета Cache Burst 32 при использовании MMX-команд (скорость при 64-битной передаче данных условно можно считать усредненным показателем производительности памяти). Затем две колонки, отображающие латентность в тактах процессора и ее же в перерасчете на время. А дальше начинается самое интересное -- собственно наши расчеты, позволяющие распознать закономерности в поведении тех или иных современных платформ, и главное -- сравнить эффективность различных контроллеров памяти и посмотреть, насколько эти устройства "ушли вперед" от своих предков в лице 440BX и i815. Средневзвешенный показатель быстродействия подсистемы памяти высчитывался с весовыми коэффициентами, определенными эмпирическим путем: 0,6 для скорости чтения и 0,4 для записи. Разобраться, как вычислялись соответствующие коэффициенты, поможет табл. 2, а мы переходим к рассмотрению результатов (см. табл. 1). Собственно платформы выбраны неслучайно, на основании приведенных данных можно спрогнозировать поведение практически любого современного чипсета от Intel, VIA, SiS, зная разницу в спецификациях.

Наиболее интересными и показательными являются два последних столбца. Безусловно, полученные значения -- это некоторые условные коэффициенты, однако с их помощью очень удобно объяснить поведение той или иной платформы в плане работы с памятью. Показатель "полезной" производительности подсистемы памяти является неким нашим "марком", характеризующим общее быстродействие системы с учетом основных параметров памяти: скорости записи/чтения и латентности. Ударение следует сделать именно на слово "полезной", если взять два любых значения из этого столбца и найти их частное, можно узнать, насколько будет отличаться "повседневная" производительность подсистем памяти.

Но вернемся к участникам нашего тестирования и рассмотрим предпоследний столбец. Как можно заметить, двухканальный контроллер в чипсете i875P условно оказался в 10 раз быстрее своего знаменитого предка 440ВХ, а как мы уже упоминали, теоретическая производительность даже в самом идеальном случае должна была увеличиться всего в 8 раз. Следовательно, можно говорить о реально возросшей эффективности подсистемы памяти в целом. Значит, нам нужен еще один показатель (коэффициент), с помощью которого мы сумеем вычислить сравнительную эффективность той или иной подсистемы памяти. Цифры, приведенные в последнем столбце таблицы, как раз и показывают тот самый Сравнительный коэффициент эффективности контроллера памяти с учетом КПД шины (для удобства показатели чипсета 440ВХ в своем максимальном режиме 100 MHz приняты за единицу).

Если читатель разобрался с нашими математическими выкладками, то рассмотреть и понять имеющиеся в таблице закономерности особого труда не составит. Но основные моменты мы все же прокомментируем.

Для начала можно с уверенностью развенчать миф о непревзойденной эффективности BX -- все же современные платформы (хотя и совсем недавно) стали продуктивнее использовать подсистему памяти. Как можно заметить, nForce2 в двухканальном режиме оказался в два раза менее продуктивным, чем при 64-битном доступе. Ищем этому объяснение в нашей таблице -- вдвое меньший КПД применения шины при практически идентичных остальных показателях производительности. Отсюда вывод: двухканальность для любых Athlon XP -- "приятная опция", скорее тешащая собственное самолюбие, нежели реально востребованная. С платформой современных Pentium 4 ситуация более интересная и неоднозначная. Во-первых, разница между "честным" i865РЕ (без технологии PAT) и i875P все же есть и весьма значительная (оба этих чипсета были представлены платами Abit -- соответственно AI7 и IC7-MAX3, относящимися к новому поколению продуктов данного производителя и очень схожими по функциональности и настройкам BIOS Setup). Наверное, самое примечательное то, что даже сравнительная эффективность при переходе в 128-битный режим у 875P возрастает, в то время как у 865PE снижается. Кстати, любопытнейший факт -- у одноканального nForce2 Ultra 400 и двухканального 875P получился одинаковый коэффициент эффективности, следовательно, "флагманский" чипсет от Intel также хорошо нагружает шину пропускной способностью в 6400 MBps, как логика от NVidia шину в 3200 MBps. Вот еще одно доказательство того, почему последнее поколение Pentium 4 превосходит Athlon XP по производительности. Мы уже не раз в предыдущих обзорах обсуждали эффективность встроенного контроллера памяти в новых процессорах серии AMD64. Теперь с помощью таблицы находим яркое тому подтверждение: скорость чтения/записи -- практически как у двухканального 865, латентность вообще без комментариев. Результат налицо даже при одноканальном доступе -- производительность подсистемы памяти на голову выше всех конкурентов. Но тут хочется высказать некоторое недоумение: двухканальный контроллер Athlon 64 (в отличие от Athlon XP, у которого максимальная частота процессорной шины составляет 400 MHz) пришелся бы здесь как нельзя кстати. Да и, как можно предположить, с его реализацией тоже особых проблем возникнуть не должно (такое решение уже достаточно успешно применяется на процессорах Opteron и Athlon 64 FX-51). Но AMD с этим по каким-то причинам пока не спешит, вполне возможно, что "десерт" припасен на будущее.

Для проверки того, насколько полученные данные являются масштабируемыми (т. е. в каких случаях подобные закономерности сохранятся), было проведено несколько экспериментов. Вместо основного Pentium 4 3,2 GHz мы решили посмотреть, какую скорость покажет идентичная система с чипсетом i875P, но с процессором Pentium 4 2,4 GHz (шина 800 MHz). Как выяснилось, они оказались практически одинаковыми. То же самое можно сказать и о Athlon XP, в котором мы понизили множитель с 11 до 8, сравнительные показатели быстродействия подсистемы памяти остались теми же. Отсюда вывод: производительность подсистем памяти на платформах с однотипными процессорами, имеющими одинаковые частоты FSB, будет почти равной. Заметьте, мы сейчас говорим исключительно о памяти, а не о системе в целом.


Тайминги

Подсистема памяти -- чем дальше, тем страшнее...
Вопросов таймингов мы также периодически касаемся, но в этот раз придется поговорить о них всерьез. Если откровенно, то конечному пользователю (даже подготовленному) не так интересны сами по себе тайминги, как возможность их изменения с целью получения повышенного быстродействия. А раз уж речь пошла об их изменении, то необходимо затронуть еще одну глобальную тему -- функционирование и настройки BIOS Setup. Наверняка читатели, интересующиеся вопросами быстродействия своих компьютерных систем, пытались найти информацию о тонкостях настройки BIOS Setup с помощью Internet, а наблюдательные замечали, что в кажущемся многообразии материалов на эту тему угадывается отрывок из одной популярной книги пятилетней (!) давности, посвященной BIOS Setup. На написание нового современного материала, видимо, никто не решается, то ли не желая брать на себя ответственность, то ли ошибочно полагая, что существующая информация еще актуальна. В связи с чем мы торжественно обещаем нашим читателям, что "полновесный" материал по BIOS Setup мы действительно подготовим. Здесь же предлагаем небольшую порцию информации, касающейся исключительно организации подсистемы памяти. Поэтому объяснения таймингам дадим общепринятые, что называется, без комментариев.

Итак, основных таймингов собственно пять, и это вторая по значимости (после частоты) характеристика модулей памяти, прошитая в SPD. Прежде чем их перечислить, нужно разобраться с некоторыми понятиями:
  • CAS (#CAS) -- Column Access Strobe, выставление адреса столбца;
  • RAS (#RAS) -- ROW Access Strobe, выставление адреса строки;
  • Latency -- время задержки;
  • DRAM CAS Latency (TCL, CL) -- количество тактов между адресацией столбца и поступлением данных в выходные регистры (меньше--лучше);
  • DRAM RAS to CAS Delay (TRCD, RCD) -- количество тактов между выставлением адреса строки и считыванием адреса столбца, т. е. время, необходимое для переключения между строками и столбцами (меньше--лучше);
  • DRAM RAS Precharge time (TRP, RP) -- определяет, сколько тактов шины памяти понадобится для предварительной регенерации всех ячеек строки, для того чтобы она могла быть считана полностью (меньше--лучше);
  • DRAM RAS Active Time (Active to Precharge Delay, Precharge Wait State, Row Active Delay, Row Precharge Delay, Precharge Delay, Tras) -- задержка в тактах между адресациями двух произвольных строк памяти, т. е. необходимое время в тактах для начала выполнения любой операции с памятью (меньше--лучше);
  • DRAM Command Rate (CMD) -- время определения физического модуля памяти и непосредственно чипа на нем с необходимой областью данных (меньше--лучше);
  • DRAM Burst Length -- определяет, сколько пакетов данных будет передано за один цикл (больше--лучше).

Собственно, на этом основная часть заканчивается. Однако на многих материнских платах BIOS Setup позволяет менять еще несколько "второстепенных" типов таймингов и параметров регенерации, которые также могут помочь с получением несколько бoльшей производительности при довольно продолжительном времени, затрачиваемом на манипулирование ими.

Подсистема памяти -- чем дальше, тем страшнее... Описав действие таймингов, было бы странным не рассмотреть их влияния на производительность. Чтобы уменьшить погрешность измерений, мы решили взять два крайних случая -- тайминги 8-4-4-3 как наименее приемлемые и 5-2-2-2 как самые "скоростные" соответственно -- и посмотреть, насколько изменится реальная производительность современных платформ в большинстве игровых пакетов. Сразу ответим, почему именно игровых. В первом ряду экспериментаторов с настройками BIOS Setup всегда стоят геймеры, пытаясь любыми средствами поднять количество fps своих игровых компьютеров. Кроме того, как оказалось, достаточно мало неигрового ПО способно "адекватно" отреагировать на изменение таймингов. Во-первых, большинство "серьезных" пакетов, скорость работы которых зависит от быстродействия памяти, более восприимчивы к изменению частоты ее функционирования, а немного возросшая производительность в той малой доле "тайминго-зависимого" ПО (например, архиваторы), как правило, некритична. Многие из нас также спокойно "переживут" процесс архивирования в 5 минут и вряд ли будут особо "напрягаться" для того, чтобы это время сократилось до 4:40.

Подсистема памяти -- чем дальше, тем страшнее... Возросшую производительность мы приводим не в абсолютных величинах, а в процентах, тем самым сокращая количество диаграмм. Нами отслежен прирост в наиболее популярных играх в разрешении 1024 x 768 x 32 с максимальной детализацией. На графике видно еще одно косвенное подтверждение полезности и адекватности коэффициентов, полученных в нашей таблице, -- чудовищный рост быстродействия у Athlon 64 при переходе с 8-4-4-3 на 5-2-2-2: 16% реальной (не синтетической) скорости от переключения таймингов -- уже настоящая сенсация. Опять отличился i875 в двухканальном режиме: при его пока лучшей в общем зачете производительности лишние 5% -- это тоже очень много. Замыкает список, хоть и с незначительным отставанием, платформа Athlon XP c двухканальным nForce2, для которой значения таймингов особой роли не сыграли.

Хотя мы и не приводим отдельных результатов по влиянию того или иного тайминга на быстродействие, скажем следующее: наиболее важные параметры -- CAS Latency и RAS to CAS (впрочем, как и наиболее проблематичные). Если есть возможность изменять DRAM Command Rate, то переключение с 2Т на 1Т также значительно поднимет производительность. В некоторых BIOS Setup можно устанавливать тайминги, выходящие за общепринятые нормы, к примеру доступны значения 1,5 для CAS Latency или 4 для RAS Active Time. Кроме того, во многих случаях эти значения даже удастся выставить и запустить систему, но на самом деле никаких 1,5 вы не получите. Вот тут мы подошли к еще одному очень важному вопросу о соответствии настроек BIOS Setup и реальных показателей. Проверить существующие установки можно с помощью информационных пакетов -- тех же Sandra и AIDA, но лучшей и самой достоверной утилитой является, пожалуй, свободно распространяемая программа CPU Z, которая, помимо таймингов, показывает и содержимое SPD. Также далеко не все материнские платы корректно устанавливают напряжения и тайминги в режиме "By SPD". К примеру, наши модули Corsair PC3200, стандартно имеющие тайминги 6-2-2-2 и вольтаж 2,6 В, в некоторых случаях определялись как 7-3-3-2,5 с напряжением 2,5 В. Были и "обратные" варианты -- например, установка режимов 5-2-2-2 по умолчанию. Так что настоятельно рекомендуем проверять соответствие, это поможет избежать недоразумений в работе.


Выводы

Как мы смогли убедиться, частоты, двухканальность, тайминги -- все это понятия достаточно условные и относительные, сами по себе еще ничего не определяющие. Например, одноканальный контроллер памяти у Athlon 64 оказался на сегодняшний день самым эффективным, в то время как в более серьезном по спецификациям чипсете nForce2 наличие второго канала -- лишь дань моде. Если вспомнить неоднократно рассматриваемый нами чипсет ATI 9100IGP, то даже в случае использования с ним самого мощного процессора Intel Pentium 4 3,2 GHz (шина 800 MHz) практически не будет иметь значения ни количество каналов, ни установленные тайминги, ни применение встроенного или внешнего видео -- и при всем при этом чипсет действительно хороший.

При изменении таймингов на разных платформах под Pentium 4 и Athlon XP реакция подсистемы памяти весьма различается. В первом случае повышаются пропускная способность и скорость чтения/записи, во втором -- значительно уменьшается латентность при сохранении других параметров, но прирост реальной производительности при этом практически одинаков. Системы, чипсеты которых умеют работать с регистровой памятью с возможностью коррекции ошибок, считаются самыми надежными, однако существуют серверные решения, где память вообще организована наподобие RAID-массива уровня 5 и поддерживает горячую замену модулей. Следовательно, для того чтобы уверенно говорить о чем-либо, касающемся подсистемы памяти, нужно учитывать огромное количество факторов.

Исходя из всего этого мы не можем однозначно ответить на один из наиболее часто задаваемых вопросов, к примеру, в каком случае система будет работать быстрее: с процессором Pentium 4 (FSB 533 MHz) -- с памятью DDR333 и "плохими" таймингами либо с DDR266, но с "хорошими"? Чтобы дать ответ, нужно рассмотреть как минимум пару десятков типичных случаев (о нюансах мы даже не говорим), да и то полученная информация будет лишь первым приближением к истине, не более того.

При поиске ответа на один вопрос, касающийся работы современных подсистем памяти, возникает еще два, для тех двух -- еще по два и т. д. Если мы попробуем "копнуть" затронутые в данной статье проблемы еще чуточку глубже, то размер ее тут же возрастет многократно. Мы же пытались больше изложить методику по работе с памятью и дать информацию для собственного "полета мысли" и возможного проведения самостоятельных исследований.


Оборудование предоставлено:

Материнские платы Abit  "Оникс"  (044) 205-5562 
Материнские платы и видеокарта ASUS  Представительство ASUS в Украине  www.asuscom.ru 
"Технопарк"  (044) 238-8990 
Модули памяти Corsair  Entry  (044) 246-8462