SPEC CPU2000. Часть 21. Платформа AMD Opteron: двухпроцессорные и «двухпроцессорно-двухъядерные» системы


Не так давно мы изучили теоретическую сторону вопроса функционирования особой подсистемы памяти NUMA двухпроцессорных платформ AMD Opteron и сравнили ее с традиционными SMP-решениями. Настало время посмотреть, как эффективно проявляет себя этот вид организации подсистемы памяти на практике — в реальных расчетных задачах на примере тестов SPEC CPU2000. А также сравнить ее с классическим SMP-подобным вариантом, причем реализованным с участием ни кем иным, как ядер AMD K8. Как вы уже возможно догадались, под этим имеются в виду двухъядерные процессоры Opteron.

В нашем исследовании мы воспользуемся тестами SPEC CPU 2000, откомпилированными в новой версии компиляторов Intel C++/Fortran Compiler 9.0, эффективность которых, в сравнении с предыдущей версией компиляторов, мы также только что изучили.

Конфигурация тестовых стендов

Стенд №1

  • Процессоры: 2x AMD Opteron 250, 2.4 ГГц
  • Чипсет: NVIDIA nForce Pro 2200/2050 + AMD-8131
  • Материнская плата: Tyan Thunder K8WE (S2895)
  • Память: 4x512 МБ Corsair DDR-400, Registered, ECC

Стенд №2

  • Процессоры: 2x AMD Opteron 275, 2.2 ГГц (dual-core)
  • Чипсет: NVIDIA nForce Pro 2200/2050
  • Материнская плата: SupermicroH8DCE
  • Память: 4x512 МБ Corsair DDR-400, Registered, ECC

В тестах SPEC использовалась метрика «производительность» (rate). Напомним, что она измеряет «количество выполненных заданий за единицу времени» и таким образом лучше подходит для оценки скорости многопроцессорных систем, чем классическая «скорость исполнения одной задачи». Учитывая, что тестируемые платформы базируются на процессорах AMD, все бинарные файлы тестов были взяты из нашего предыдущего исследования, в котором они предварительно… модифицировались на предмет устранения проверок соответствия изготовителя процессора компании Intel :).

Двухпроцессорные Opteron: симметричная и асимметричная NUMA, Node Interleave

Исследование двухпроцессорных систем на базе Opteron в тестах SPEC CPU2000 мы уже проводили ранее. Разумеется, использовались другие конфигурации систем, другие компиляторы, но, тем не менее, повторяться здесь мы особо не станем. А именно, мы не станем уделять внимание вопросам сравнения производительности «1 CPU vs. 2 CPU», а займемся именно тем, чем хотели — сравнением эффективности различных конфигураций подсистемы памяти NUMA — симметричной («2+2»), в режиме Node Interleave и без такового, и асимметричной («4+0»).

Мы не стали очень долго задумываться, что взять в качестве эталона (то есть показателя «100%»), и выбрали в качестве такового конфигурацию «симметричная NUMA в режиме Node Interleave». Почему симметричная — это понятно, ибо по такому принципу построено большинство «нормальных» (не «бюджетных») двухпроцессорных платформ Opteron. А почему Node Interleave — в общем-то, тоже понятно, если вспомнить особенности функционирования операционных систем класса Windows NT в многопроцессорных системах. Об этом мы писали в нашей статье по NUMA, но вкратце напомним основную идею: если не осуществлять строгую «привязку» процессов к физическим процессорам (что, к сожалению, не делает rate-запуск тестов SPEC), выделение области памяти под данные всегда приходится на один из процессоров, а исполнение кода равномерно «раскидывается» по всем процессорам. В результате доступ задачи к своим собственным данным в один момент времени будет происходить с меньшими задержками, а в другой — с большими, обеспечивая, как минимум, нестабильность результатов измерений. Режим Node Interleave (суть которого мы рассматривали там же) призван устранить подобную «неприятность», по сути, нивелируя как положительные, так и отрицательные аспекты NUMA и превращая его в «псевдосимметричную» архитектуру памяти — в этом случае, доступ любого процессора к любому участку памяти происходит с одинаковыми задержками, в точности как в традиционных SMP-системах.

Итак, с чем сравнивать результаты, мы разобрались, так что переходим непосредственно к их рассмотрению. Для начала, оценим симметричную организацию NUMA в отсутствие режима Node Interleave.

Как видно, результат отключения Node Interleave, то есть превращения подсистемы памяти в «истинную NUMA» в целом по целочисленным тестам (то есть оценке SPECint_rate2000) может быть как несколько выигрышным (2.3 — 3.0%, варианты кода: неоптимизированный, а также относительно «старые» оптимизации -QxK и -QxW), так и проигрышным (-1.1 — -1.7%, в обеих «новых» вариантах оптимизации, -QxN и -QxB). Проигрыш связан со снижением производительности всего трех задач — 164.gzip, 176.gcc и 256.bzip2, но весьма ощутимым (от -5.6% до -29.2%) и стабильным (он наблюдается в разных вариантах оптимизации кода — то есть не связан исключительно с «неопределенностями» поведения ОС и обычных приложений в среде NUMA).

Тем не менее, во всех остальных случаях наблюдается либо равенство в скорости, либо выигрыш, иногда даже весьма значительный (наилучшей в этом плане является 181.mcf, показывая от 14.0% до 17.2% прироста) — что вновь нельзя списать на особенности функционирования ОС и приложений.

Несколько иначе обстоит дело с тестами с вещественными числами. Практически во всех случаях здесь наблюдается заметный прирост производительности, исключение составляет лишь вариант -QxB. Но провалы до 16-17% в скорости там, где во всех остальных случаях наблюдается ее увеличение, выглядят очень уж странно. По-видимому, здесь как раз виновата «неопределенность» поведения ОС на NUMA-платформах. Общий прирост по показателю SPECfp_rate2000 (исключая последний случай) — от 5.5 до 6.6%, в отдельных же случаях он может быть весьма значительным (например, неоптимизированный вариант 179.art — 26.9%).

Таким образом, с точки зрения производительности расчетных задач симметричная архитектура NUMA как таковая оказывается более выгодной по сравнению с ее «уравновешенным» вариантом Node Interleave. Тем не менее, выигрыш в производительности далеко не такой, каким он мог бы быть при условии полной оптимизации задачи под NUMA и ее требовательности к пропускной способности памяти, в теории — примерно 1.5 раза (если сравнивать именно по ПСП: 12.8 ГБ/с против 8.4 ГБ/с). На практике же наблюдаются не более чем 3-5% прироста. Вновь повторимся — в общем, в отдельных случаях он может быть и заметно выше.

Переходим к рассмотрению более «дешевой», асимметричной конфигурации NUMA «4+0». Для этой цели мы, естественно, не стали использовать другую материнскую плату, предполагающую возможность установки модулей только для одного из процессоров, а просто видоизменили наш стенд соответствующим образом.

Результат налицо: превращение «псевдооднородной» NUMA (то есть симметричной с Node Interleave) в асимметричную практически во всех случаях приводит к заметному ухудшению производительности. Результат весьма стабильный, почему — вполне понятно, поскольку в этом случае «случайность» поведения ОС по отношению к NUMA никак себя не проявляет — все пространство памяти все равно принадлежит одному процессору, и каждая задача в среднем получает 50% обращений к «своей» памяти, а оставшиеся 50% — к «чужой», как и в режиме Node Interleave симметричной NUMA.

По сути, данное сравнение можно считать прямой оценкой требовательности отдельных задач к ПСП. Наиболее требовательными к ней оказываются (в порядке убывания): 300.twolf, 175.vpr, 181.mcf, 176.gcc, 256.bzip2. Практически не зависит от нее всего одна задача — 252.eon, слабую зависимость показывает и 253.perlbmk. Эти же задачи, как и следовало ожидать, почти не получают преимущества от использования «истинной NUMA» (см. выше), однако то же самое нельзя сказать о задачах, упомянутых чуть выше — явного соответствия проигрыша в асимметричной NUMA с выигрышем в симметричной конфигурации не наблюдается. Общий итог SPECint_rate2000 таков: несимметричная конфигурация NUMA по производительности целочисленных задач на 21-27% уступает симметричной в режиме Node Intreleave.

Тесты с вещественными числами. Принципиальных отличий от целочисленных тестов не наблюдается — большинство задач здесь также проигрывают от «асимметризации» подсистемы памяти (реально — снижения ее пиковой пропускной способности). Суммарный проигрыш оказывается примерно таким же, как и в целочисленных задачах, но с чуть меньшим разбросом — 22-23%. Практически не зависит от ПСП также всего одна задача — 200.sixtrack, слабо зависит — 177.mesa. Четкой корреляции между выигрышем в симметричной конфигурации и проигрышем в асимметричной не наблюдается и в этих тестах. Причина этого, как мы уже неоднократно отмечали — это «хаотичность» поведения системы и самих однопоточных тестовых приложений в среде NUMA.

Двухпроцессорные двухъядерные Opteron: dual-core vs. 2x single-core и 2x dual-core

Переходим ко второй части нашего исследования. По сути, она является логическим продолжением первой части, поскольку здесь тоже будет проводиться сравнение различных вариантов организации подсистемы памяти многопроцессорных платформ Opteron. В качестве эталона сравнения на этот раз выберем наиболее естественную конфигурацию — один двухъядерный процессор. Для тестирования двухпроцессорной двухъядерной платформы в этом режиме осуществлялась привязка теста к системным процессорам 0 и 1, отвечающим двум ядрам первого физического процессора. А сопоставим мы эту конфигурацию, во-первых, с равночастотной двухпроцессорной платформой, для «превращения» в которую нашей платформы мы использовали привязку к процессорам 0 и 2, соответствующим первому ядру каждого из физических процессоров (к несчастью, такая привязка не подразумевает привязку индивидуальных потоков теста строго к одному из процессоров). Второе сравнение — это два двухъядерных процессора против одного двухъядерного. В этом случае тест запускался в rate-режиме с «количеством пользователей», равным четырем (по количеству доступных процессорных ядер в общей сложности).

Итак, перейдем к рассмотрению результатов целочисленных тестов в режиме «2x Single-core vs. Dual-core». По сути, этот случай является сравнением истинной SMP-системы на ядрах AMD K8 с истинной NUMA-системой на тех же ядрах.

Результат измерений, как и следовало ожидать, весьма хаотичен. Выявить какую-либо закономерность абсолютно невозможно — например, задача 300.twolf, оказавшаяся весьма требовательной к ПСП в предыдущих тестах, практически не выигрывает от задействования NUMA в полной мере. А 256.bzip в некоторых вариантах оптимизации неожиданно выигрывает до 84.6% по сравнению с SMP-подобной организацией подсистемы памяти. Что-то более-менее однозначное можно сказать лишь об общей, усредненной оценки — по производительности целочисленного кода двухпроцессорная конфигурация выигрывает у равночастотной двухъядерной от 6 до 14%.

Не меньший разброс наблюдается и в тестах с вещественными числами. Кроме вполне ожидаемого отсутствия прироста в 177.mesa и 200.sixtrack, что согласуется с вышеприведенными данными. Во всех остальных случаях наблюдается ощутимый прирост в скорости, иногда достигающий воистину фантастических значений — например, 124.7% в 178.galgel, вариант —QxW (при ожидаемом теоретическом пределе — всего 100%, учитывая двукратное возрастание ПСП при переходе от SMP к NUMA). Общее увеличение производительности по оценке SPECfp_rate2000 составляет от 16 до 40% — что весьма неплохо характеризует истинно двухпроцессорные системы на базе Opteron (и архитектуру NUMA, в частности) по сравнению с двухъядерными (SMP-подобными) вариантами.

И напоследок — сравнение двухпроцессорной системы, построенной на двухъядерных процессорах, с одним двухъядерным процессором.

Как и следовало ожидать, увеличение скорости от «добавления» второго процессора есть. Каким оно может быть по максимуму — однозначно сказать сложно, но совершенно понятно, что оно может превышать 100%, учитывая, что помимо добавления второго «вычислительного устройства» мы еще и потенциально увеличиваем в 2 раза пропускную способность памяти (чего не было бы, если бы мы сравнивали двухъядерный процессор с гипотетическим четырехъядерным). Именно это мы и наблюдаем на практике, правда — не во всех случаях. Лидерами здесь выступают 164.gzip и 256.bzip2, большинство остальных задач показывают «стандартные 100% прироста» за исключением 176.gcc и 181.mcf, где он и того меньше — примерно 70-80%. В результате взаимной компенсации разбросов по этим задачам, прирост по общей оценке составляет практически те же 100% (разве что, за исключением варианта -QxW, который проявил себя чуть лучше и показал 112.8% прироста).

В тестах с плавающей точкой картина «2x Dual-core vs. Dual-Core» несколько более размазана. Большинство задач здесь получают менее 100% выигрыша в скорости, за исключением 301.aspi. Тем не менее, и здесь наблюдаются совершенно фантастические выбросы, причем во все том же варианте —QxW (что стоит только 178.galgel с его 253% прироста!). Увеличение производительности этих задач в среднем — порядка 80% (с разбросом от 66 до 114%).

Итоги

Совершенно четких выводов относительно производительности «более-менее реальных» приложений, а не чисто синтетических тестов вроде RMMA, можно сделать всего три. Причем все они будут суждениями на качественном, а не количественном уровне:

1. Симметричная организация NUMA однозначно лучше асимметричной;

2. Включение Node Interleave для симметричной NUMA несколько ухудшает ее производительность;

3. Два одноядерных процессора Opteron лучше, чем один двухъядерный.

Сюда же, пожалуй, можно добавить еще один вывод:

4. Операционные системы класса Windows XP/Server 2003 имеют лишь «номинальную» поддержку архитектуры NUMA, в связи с чем любые тесты, идея которых заключается в одновременном запуске нескольких копий однопоточных приложений (под это определение подходят тесты SPEC), непригодны для надежного, воспроизводимого тестирования NUMA-платформ.

Прямое следствие последнего вывода — это невозможность получить строгую количественную оценку выгодности подсистемы памяти NUMA в целом, и двухпроцессорных Opteron по сравнению с двухъядерными, в частности. Точнее, мы ее, конечно, попытались сделать (смотрите «промежуточные итоги» по ходу текста), но, учитывая нынешнее положение дел, мы абсолютно не застрахованы от того, что при повторении проведенных нами тестов мы получим уже совершенно другую картину. Похожую на прежнюю лишь в общих чертах, на качественном уровне.

Плата Supermicro H8DCE с установленными в неё процессорами Opteron 275 и кулерами
Supermicro SNK-P0014AP4 предоставлена компанией NIAGARA

Плата Tyan Thunder K8WE с установленными в неё процессорами Opteron 250 и
кулерами Titan TTC-K8ATB/825 предоставлена компанией ТРАДИЦИЯ

Память Corsair для систем на базе процессоров Opteron
предоставлена компанией Neo Group



2 сентября 2005 Г.

SPEC CPU2000. 21. AMD Opteron: «-»

SPEC CPU2000. 21. AMD Opteron: «-»

NUMA AMD Opteron SMP-. , — SPEC CPU2000. SMP- , , AMD K8. , Opteron.

SPEC CPU 2000, Intel C++/Fortran Compiler 9.0, , , .

1

  • : 2x AMD Opteron 250, 2.4
  • : NVIDIA nForce Pro 2200/2050 + AMD-8131
  • : Tyan Thunder K8WE (S2895)
  • : 4x512 Corsair DDR-400, Registered, ECC

2

  • : 2x AMD Opteron 275, 2.2 (dual-core)
  • : NVIDIA nForce Pro 2200/2050
  • : SupermicroH8DCE
  • : 4x512 Corsair DDR-400, Registered, ECC

SPEC «» (rate). , « » , « ». , AMD, , … Intel :).

Opteron: NUMA, Node Interleave

Opteron SPEC CPU2000 . , , , , , . , «1 CPU vs. 2 CPU», , — NUMA — («2+2»), Node Interleave , («4+0»).

, ( «100%»), « NUMA Node Interleave». — , «» ( «») Opteron. Node Interleave — -, , Windows NT . NUMA, : «» (, , rate- SPEC), , «» . , — , , , . Node Interleave ( ) «», , , NUMA «» — , , SMP-.

, , , . , NUMA Node Interleave.

, Node Interleave, « NUMA» ( SPECint_rate2000) (2.3 — 3.0%, : , «» -QxK -QxW), (-1.1 — -1.7%, «» , -QxN -QxB). — 164.gzip, 176.gcc 256.bzip2, ( -5.6% -29.2%) ( — «» NUMA).

, , , ( 181.mcf, 14.0% 17.2% ) — .

. , -QxB. 16-17% , , . -, «» NUMA-. SPECfp_rate2000 ( ) — 5.5 6.6%, (, 179.art — 26.9%).

, NUMA «» Node Interleave. , , NUMA , — 1.5 ( : 12.8 / 8.4 /). 3-5% . — , .

«», NUMA «4+0». , , , , .

: «» NUMA ( Node Interleave) . , — , «» NUMA — , 50% «» , 50% — «», Node Interleave NUMA.

, . ( ): 300.twolf, 175.vpr, 181.mcf, 176.gcc, 256.bzip2. — 252.eon, 253.perlbmk. , , « NUMA» (. ), , — NUMA . SPECint_rate2000 : NUMA 21-27% Node Intreleave.

. — «» ( — ). , , — 22-23%. — 200.sixtrack, — 177.mesa. . , — «» NUMA.

Opteron: dual-core vs. 2x single-core 2x dual-core

. , , Opteron. — . 0 1, . , -, , «» 0 2, ( , ). — . rate- « », ( ).

, «2x Single-core vs. Dual-core». , SMP- AMD K8 NUMA- .

, , . - — , 300.twolf, , NUMA . 256.bzip 84.6% SMP- . - - , — 6 14%.

. 177.mesa 200.sixtrack, . , — , 124.7% 178.galgel, —QxW ( — 100%, SMP NUMA). SPECfp_rate2000 16 40% — Opteron ( NUMA, ) (SMP-) .

— , , .

, «» . — , , 100%, , « » 2 ( , ). , — . 164.gzip 256.bzip2, « 100% » 176.gcc 181.mcf, — 70-80%. , 100% ( , -QxW, 112.8% ).

«2x Dual-core vs. Dual-Core» . 100% , 301.aspi. , , —QxW ( 178.galgel 253% !). — 80% ( 66 114%).

«- » , RMMA, . , :

1. NUMA ;

2. Node Interleave NUMA ;

3. Opteron , .

, , :

4. Windows XP/Server 2003 «» NUMA, , ( SPEC), , NUMA-.

— NUMA , Opteron , . , , , ( « » ), , , , . , .

Supermicro H8DCE Opteron 275
Supermicro SNK-P0014AP4 NIAGARA

Tyan Thunder K8WE Opteron 250
Titan TTC-K8ATB/825

Corsair Opteron
Neo Group