SPEC CPU2000. Часть 12.1. Изучение архитектуры AMD Opteron

Интегрированный контроллер памяти и двухпроцессорные конфигурации


Несмотря на то, что новый процессор компании AMD был представлен достаточно давно — 22 апреля, только сейчас мы публикуем первые результаты его тестирования. Одной из причин такого, на первый взгляд, странного поведения нашего ресурса являются большие отличия архитектуры Opteron от других современных процессоров. Это приводит к тому, что новый процессор получился для нас неким новым черным ящиком, и основные вопросы к нему звучат не как "А насколько он быстрый?", а "Как, чем и зачем его тестировать?".

Напомним, что основные отличия AMD Opteron от предшественников заключаются в использовании интегрированного контроллера памяти и поддержке 64-х битной архитектуры AMD64 (ранее технология именовалась как x86-64). Подробнее с особенностями AMD Opteron вы можете познакомиться в статье "Факты и предположения об архитектуре AMD Opteron и Athlon 64".

В этой статье мы попробуем применить тесты пакета SPEC CPU2000 для изучения одной из особенностей процессора — контроллера памяти, в том числе, и при работе в двухпроцессорном режиме.

Для начала вспомним базовую информацию о подсистеме памяти у систем на AMD Opteron. Каждый процессор поддерживает до 8 DDR модулей с частотой до 166 МГц (PC2700). Модули должны быть обязательно регистровыми и это требование, как вы понимаете, от материнской платы и чипсета не зависит. Интерфейс памяти имеет ширину 128 бит (144 с ECC). Это можно трактовать как "двухканальный контроллер", однако производитель настаивает именно на формулировке "128 (144) битная шина". Что, впрочем, сути не меняет. Правда, возникает вопрос — а будет ли работать Opteron с одним модулем? Наша проверка показала, что такая конфигурация вполне работоспособна, хотя и снижает производительность.

Еще одной особенностью шины памяти Opteron является механизм выбора частоты работы. Она привязана к внутренней частоте процессора и поэтому может отличаться от официальной. Подробнее об этом можно прочитать в вышеуказанной статье. В частности, в тестируемой в этой статье конфигурации память работала на 155 МГц вместо положенных ей 166.

Конфигурация

  • AMD Opteron 240 (1,4 ГГц) x 2
  • Rioworks HDAMA (чипсет AMD 8000)
  • 512 МБ PC2700 Reg Transcend x 4

В качестве основной ОС для сегодняшних тестов был выбран SuSE SLES для AMD64. Такой выбор будет обоснован в следующем параграфе, а пока отметим, что SLES является первой официально поставляемой операционной системой, поддерживающей архитектуру AMD64. Кроме того, прошлые тестирования показали, что бывает так, что от ОС не так уж много и зависит, а гораздо важнее оказывается выбор компилятора и ключей оптимизации.

Что касается компиляторов, то разговор о AMD64 и 64-хбитных компиляторах отложим до следующего раза, а пока остановимся на "старом добром" 32-хбитном продукте компании Intel версии 7.1 (как парадоксально это ни звучит :). По крайней мере, мы знаем, как он работает :). Кстати, убедимся, что 32-хбитные приложения, даже такие сложные, как компилятор, могут работать в 64-хбитной ОС. Конфигурационные файлы не отличаются от давно используемых в наших тестах. Конечно, используются поддерживаемые Opteron команды SSE2.

SuSE SLES AMD64

Теперь настало время поговорить о выборе ОС для тестов. В принципе, аналогичные результаты могут быть получены (и были получены) и на более распространенных операционных системах компании Microsoft, поскольку процессор и его окружение полностью совместимы с архитектурой x86. Как показал опыт, платформа с процессорами Opteron полностью работоспособна и под обычной Windows XP. Кроме того, мы попробовали и бета-версию 64-хбитной (в понимании AMD :) ) серверной системы Windows 2003. Не было отмечено и никаких проблем с совместимостью. Все проверенные "старые" приложения работали и под ней. Хотя стоит напомнить, что это верно только для обычных задач, а вот драйвера необходимо использовать уже специальные, исключительно 64-х битные. По информации компании Microsoft, также возможны проблемы у приложений, использующих 16-битные библиотеки.

Однако для использования SLES для тестов двухпроцессорных конфигураций есть одна очень веская причина — поддержка этой ОС технологии NUMA. Чтобы понять, что это и зачем, сначала вспомним, как устроены классические SMP-платформы (на немного частном случае популярных двухпроцессорных систем).

Интерфейс памяти в этих системах находится в северном мосту чипсета. К тому же мосту подключаются и процессоры. Отметим, что может использоваться как общая для двух ЦПУ шина (например, для Intel Pentium III, Xeon) так и отдельная (AMD Athlon MP). Однако важно не это, а то, что для каждого процессора доступ ко всей памяти совершенно одинаков. И при росте числа процессоров именно скорость шины памяти может стать ограничивающим фактором, поскольку она практически не масштабируется (для каждого отдельно взятого чипсета).

В двухпроцессорных системах на Opteron память может быть как "своя" (то есть, подключенная непосредственно к данному процессору), так и "чужая" (подключенная к его напарнику). Понятно, что доступ к локальной памяти осуществляется заметно быстрее. Но классические SMP операционные системы не могут гарантировать, что выделенная приложению память окажется именно на том процессоре, на котором работает задача. Таким образом, мы можем получить существенные потери в производительности, если задаче приходится обращаться к памяти, подключенной к другому процессору. Исключить такие ситуации и призвана NUMA (Non-Uniform Memory Access), которая как раз и позволяет ОС выделить задаче память на "своем" процессоре.

Конечно, SLES поддерживает и классическое SMP-ядро, которое поможет нам оценить эффективность NUMA.

Количество модулей памяти

Итак, начнем. В первом исследовании на системную плату мы ставили один процессор с различным количеством модулей памяти — 1, 2 и 4. Используются метрики "скорость/speed" теста SPEC CPU2000. Для удобства на диаграммах приводится отклонение в % от варианта с двумя модулями как базового. Формально можно считать вариант с одним модулем просто работой по 64-битной шине. А поскольку результаты при установке четырех модулей заметно отличались от варианта с двумя, считаем, что работал режим чередования модулей (настройка в BIOS платы HDAMA позволяет выбрать только "Disable" и "Auto", использовался второй вариант).

Как видно из диаграммы, для целочисленных расчетов количество модулей памяти не играет большой роли. Только подтест 181.mcf отреагировал на изменения заметным изменением скорости. Что вполне согласуется с полученными ранее данными о его "прожорливости".

Что касается вычислений с плавающей точкой, то здесь наблюдается большая чувствительность. Ухудшение показателей при использовании одного модуля особенно заметно у известных своей жадностью до ПСП подтестов 171.swim и 179.art. Отметим и прирост почти в 20% у 189.lucas при использовании 4-х модулей.

Таким образом, можно сделать вывод, что для достижения максимальной производительности систем на AMD Opteron необходимо использовать по 4 модуля на процессор (поскольку пока таких плат с 6 и 8 разъемами у нас нет, то можно только предполагать, что для них тоже полезно "забивать" все разъемы). За счет чередования можно получить 5-10% прирост производительности у требовательных к ПСП приложений.

Установка второго процессора

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

Однако в случае архитектуры Opteron использование (точнее установка) второго процессора может реально ухудшить скоростные показатели системы в некоторых задачах. Связано это с тем, что два процессора начинают использовать связывающую их шину Hyper Transport для обмена информацией о состоянии своих кешей, что вызывает задержки у процессоров при обращении к локальной памяти.

В следующих тестах мы использовали метрику "производительность/rate" теста SPEC CPU2000. Напомним, что она измеряет "количество выполненных заданий за единицу времени" и таким образом лучше подходит для оценки скорости многопроцессорных систем (к которым мы вскоре перейдем), чем классическая "скорость исполнения одной задачи". Отметим, что в случае работы на одном процессоре эти метрики могут быть легко пересчитаны друг в друга.

В тестах с двумя процессорами модули памяти устанавливались по 2 на каждый. В принципе, вариант 4+0 тоже работоспособен с SMP-ядром (результаты будут приведены далее). А вот NUMA-ядро такой вариант совсем не признало и перезагружало ПК. К сожалению, восьми модулей у нас не нашлось, и с учетом предыдущей информации, можно предположить, что абсолютные цифры производительности двухпроцессорных систем можно еще немного улучшить.

На первой паре диаграмм вы видите эффект падения производительности от установки второго процессора относительно тестирования на однопроцессорной конфигурации с обычным ядром.



Из диаграмм видно, что для большинства приложений отмечается снижение производительности при установке второго процессора. При этом использование NUMA ядра позволяет сгладить этот эффект и иногда даже попасть в плюс.

Эффективность двухпроцессорной платформы

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

Тест SPEC CPU2000 помогает оценить эффективность работы многопроцессорных систем при использовании метрики "rate" и изменении параметра запуска -users. Как я уже говорил ранее, значение этого параметра никак не зависит от количества процессоров в системе. Он просто указывает тесту, сколько задач нужно запустить одновременно. Например, можно на однопроцессорной системе запустить тест с параметром, равным двум, однако роста показателей мы не увидим. Грубо говоря, "пропускная способность турникетов в метро не зависит от числа желающих через них пройти" (конечно, в случае, если этих желающих достаточно много и они их не снесли).

Поскольку, как мы уже выяснили, простой второго процессора вреден, то на следующей паре диаграмм сравниваются показатели "rate" для системы с одним процессором и ядром по умолчанию и с двумя процессорами (ядра SMP и NUMA).



В целом отметим, что эффективность использования двух процессоров достаточно высока — кроме 181.mcf, все целочисленные тесты показывают не менее 80% роста. С вещественной арифметикой дело обстоит заметно хуже, и только использование NUMA-ядра позволяет держать планку на 75% и выше.

На последнем графике можно увидеть преимущество использования ядра NUMA для случая двух процессоров. Хотя ожидается, что NUMA показывает высокую эффективность в системах с четырьмя и более процессорами (то есть когда доступ в нелокальную память еще медленнее), даже в простейшем случае двух процессоров мы видим заметное повышение производительности. Напомним, что оно в данном случае практически бесплатно :). Отметим, что в основном отличие ядер проявляется в подтестах, которые сильно нагружают подсистему памяти — 181.mcf, 171.swim и 179.art.

Сравнение вариантов установки модулей памяти 2+2 и 4+0

Сразу скажу, что такое тестирование даже и не планировалось сначала. Причин этому несколько. Основная из них — это то, что тест SPEC CPU2000 в некотором смысле "неизвестно что считает" при условиях:

  • архитектура Opteron
  • двухпроцессорный режим (метрики rate, users=2)
  • память установлена на двух процессорах
  • ядро SMP

Дело в том, что в этом случае ОС выделяет задаче память, исходя из своих собственных предпочтений и управлять этим процессом просто невозможно. Так что результаты последовательных запусков могут (теоретически) очень отличаться, если в одном из них память была выделена локальная, а в другом — нет. Конечно, в SPEC CPU2000 необходимо для получения "официальных" данных запускать каждый подтест не менее трех раз, однако данные размышления заставляют осторожно относиться к результатам. Кстати, можно и предшествующую диаграмму грубо интерпретировать как "насколько ОС угадала, кому какую память выделить" :)

Вторая причина более простая — если можно использовать вариант 2+2 модуля, то зачем так явно ограничивать производительность режимом 4+0? Но здесь есть и возражения :) Например, анонсы двухпроцессорных плат для рабочих станций, в которых (предположительно, только по внешнему виду) четыре разъема памяти подключены все к одному процессору. Учитывая, что и AGP, и PCI (возможно, не все) тоже должны быть подключены к нему же, получается немного странная конфигурация, когда второй процессор связан только с первым и больше ни с чем. Конечно, скорость обмена по межпроцессорной шине достаточно велика, да и большой L2-кеш процессора может помочь ему не считать себя обиженным :), но тем не менее неприятно. Кроме того, "в среднем" с SMP-ядром оба варианта дают 50% вероятность попадания в локальную память.

Таким образом, для "правильного" измерения производительности SMP-системы с двумя процессорами Opteron необходимо либо "уровнять" память для обоих процессоров (например, использованием настройки в BIOS "node interleave"), либо исключить возможность случайного выделения памяти системой выполняемой задаче, поставив все модули на один процессор (конечно, здесь и везде до этого считаем, что ОС достаточно "умна", чтобы разбросать две ресурсоемкие задачи на разные процессоры, поскольку сам тест SPEC CPU2000 этим не занимается :) ).

Однако, просмотрев логфайлы запуска теста именно в таком непонятном режиме, я все же решил опубликовать и эти измерения. Поскольку средние отклонения между последовательными запусками практически не отличались у обоих вариантов расположения модулей памяти.

Отметим, что для этой и только для этой диаграммы тесты проводились на материнской плате MSI K8D Master (MS-9131), подробнее о которой мы расскажем в следующий раз.

Забавно, что ни говори. Оказывается межпроцессорный канал действительно очень быстрый. Для девяти приложений CINT2000 падение скорости не превышает 1%. В CFP2000 похуже, однако не такая уж это катастрофа.

PS, после тестирования

Как часто бывает, когда статья уже практически была готова, выяснилось, что у материнской платы Rioworks HDAMA, оказывается, есть новая версия BIOS — 1.67 (первые тесты проводились с версией 1.50). И в ней нашлись такие интересные исправления как реально работающий параметр "node memory interleave" а также выбор частоты работы шин Hyper Transport между процессорами (800 или 1000 МГц) и между процессором (первым) и мостами на шины PCI/PCI64/PCI-X (600 или 800 МГц). Конечно, упустить такой лакомый кусок мы не смогли. Однако поскольку в целом ожидать больших изменений не стоит, то использовались оценочные (однократные) запуски теста SPEC CPU2000. Чтобы не загромождать статью диаграммами, приведем только интегральные показатели.

Как видно из диаграмм, настройка "node memory interleave" действительно работает и может быть полезна для SMP-систем (например, Windows XP), которые не используют технологию NUMA: по отдельным подтестам прирост достигает 5-15% (старые знакомые — 171.swim и 179.art). Правда в 301.apsi (единственном) наоборот наблюдается падение на 15%. А вот если ОС имеет в ядре поддержку стандарта NUMA, то данный параметр лучше оставить в положении "Disabled".

Эффект от установки частоты межпроцессорной шины в 1000 МГц хоть и очень слаб, но тем не менее заметен. Отметим, что несмотря на то, что старый BIOS и не позволял посмотреть и настроить частоты, судя по результатам, они были установлены на максимум.

Заключение

Обобщим полученную информацию об особенностях проведения тестов процессоров AMD Opteron:

  • максимальная производительность подсистемы памяти достигается при использовании четырех модулей на процессор (то есть с активным режимом host memory interleave);
  • "однопроцессорные" тесты показывают более высокие показатели при работе на системе с одним физическим процессором. При этом установка второго может (в некоторых случаях заметно) снизить результаты;
  • использование ОС с поддержкой технологии NUMA позволяет достичь очень высокой эффективности в двухпроцессорных конфигурациях;
  • для SMP двухпроцессорных систем более предпочтительно использование конфигурации с модулями памяти у каждого процессора, но падение производительности в не симметричном варианте для приложений, аналогичных набору CINT2000, практически не заметно.

При этом тестирование нового процессора в пакете SPEC CPU2000 поставило и новые вопросы — иногда, казалось бы, знакомые тесты вели себя неожиданным образом. Вспомним, например, рост показателей у 300.wolf и 189.lucas при установке второго (но бездействующего) процессора, когда все другие тесты наоборот снизили результаты. И поведение того же 189.lucas при сравнении вариантов установки моделей 2+2 и 4+0. Эти факты показывают, что архитектура AMD Opteron действительно сильно отличается от всего, что мы видели и тестировали ранее, и чтобы узнать ее поближе, понадобится еще не одна статья :)

Что же касается собственно процессора, то, пожалуй, говорить о его сравнении с конкурентами все еще рано. Как я уже неоднократно говорил — уж очень он сильно от них отличается :) Хотя, конечно, использование таких стандартных тестов, как SPEC CPU2000 поможет их свести на одном поле боя. Однако эту большую и интересную тему мы будем раскрывать постепенно.

Сегодня, для самых терпеливых :) (кто дочитал до этого места), приведем краткое сравнение AMD Opteron с Intel Xeon.

К сожалению, у нас нет собственных результатов тестирования рабочих станций на базе процессоров Intel Xeon, так что будем использовать опубликованные на www.spec.org в апреле (и июле для процессора Xeon c 1 МБ кешем L3) этого года результаты компании Dell. К сожалению, данная система имеет всего лишь двухканальный контроллер памяти под модули типа PC2100, что сегодня уже недостаточно, тем более для двухпроцессорной системы. Безусловно, один процессор Pentium 4 3,2 ГГц c двухканальной PC3200 быстрее, но.. "это уже совсем другая история" (c).

Итак, сравниваются Dell Precision WorkStation 650 (чипсет E7505, FSB 533 МГц, память PC2100) и система на базе материнской платы MSI K8D Master (чипсет AMD 8000, память PC2700). Операционная система — Windows XP Pro SP1. Компиляторы: Intel версии 6.0 для Xeon 2.0..3.06, Intel версии 7.1 для Xeon 3.06 (1 МБ L3) и Opteron.

"Speed" запуски проводились с одним установленным процессором Opteron и 4-мя модулями памяти. "Rate" — два процессора и по два модуля памяти на каждом.







Комментарий в этот раз будет короткий: все наши ранние предположения, о том, что хорошо и что плохо у Opteron в целом подтверждаются. Интегрированный контроллер памяти — это просто великолепно, особенно для SMP-систем (не забудьте, что есть еще NUMA, которая еще добавит баллов системам на Opteron). Однако частота ядра менее 2 ГГц — сегодня уже несерьезно. Тем не менее, и на частотах 1,4 и 1,8 ГГц процессоры AMD успешно соперничают с конкурентами. При этом масштабируемость с ростом частоты у Opteron заметно лучше.

Конечно, борьба на этом не закончится, и выпусти Intel двухканальный PC3200 чипсет под Xeon, ситуация легко изменится. (Кстати уже был анонс материнской платы от ASUS на i875 под два процессора Xeon…может быть, это первая ласточка?)

Вот в общем и все, что удалость протестировать для начала. Не забывайте, что впереди увлекательное (надеюсь) исследование полезности и актуальности технологии AMD64 и компиляторов для нее, так что оставайтесь с нами!


От себя лично добавлю, что новые процессоры AMD очень понравились — железная крышка, практически бесшумные боксовые кулеры… :) Однако с ними очень сильно стала греться память, так что дополнительные вентиляторы в корпус все равно придется ставить. Что касается питания, то все тесты на плате Rioworks проводились с блоком питания на 300 Вт (но в реальной системе конечно нужно больше — быстрые диски тоже немало потребляют).



Благодарим компанию Традиция, предоставившую материнскую плату Rioworks HDAMA и процессоры AMP Opteron 240.
Память Transcend предоставлена компаний Патриарх



Дополнительно

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.