Search
Write a publication
Pull to refresh

как мы тестили двухядерные opteron'ы

Reading time3 min
Views554
Ну. Если сказать по правде, мы их до сих пор тестим, но есть уже одна, ставшая очевидной, особенность: память не тянет два ядра. Ну не тянет и всё. У нас есть новый кластер, в котором стоит сколько-то блэйдов, в которые засунуты двухпроцессорные платы, на которых установлены двухядерные opteron'ы 285, к каждому из которых воткнуто по 4 гигабайта памяти и соединено это всё с внешним миром через Hyper Transport вот так вот:

внешний мир (в том числе и 1Gb медный ethernet) --HT-- cpu0 --2xHT-- cpu1


Делаем простейший тест (ну, на самом деле программа не такая уж и простая — это MG из NASA Parallel Benchmark) в следующей конфигурации: либо прибиваем 4 процесса этой задачи к одному узлу — на каждое ядро по процессу, либо 4 процесса на разные процессоры в двух разных блэйдах. В итоге первая конфигурация выдаёт 2700 попугаев, а вторая 4500. Вдумайтесь, взаимодействие через ethernet, которое гораздо менее эффективно, чем zerocopy на NUMA, да ещё в такой конфигурации, когда весь траффик протягивается через один линк, да ещё когда вместо оптимизированного протокола всё качается вычислтельно ёмким TCP, оказывается намного более эффективным.

Конечно, причина очевидна: два ядра конкурируют за один контроллер памяти. Когда же мы используем 4 контроллера и асинхронную доставку данных между ними, всё получается намного шустрее. Но возникает тогда вопрос: а какого фига нас заставляют покупать многоядерные процессоры, убеждая в том, что они обладают какой-то непревзойдённой производительностью? Право же, лучше бы вместо второго ядра добавили какой-нибудь логики, вроде DMA. Или энергопотребление бы снизили, просто ядра выкидывая.

Эх. Но что более всего удручает, так это то, куда навострили свою деятельность разработчики: засунуть в процессор ещё больше ядер, при этом никак не снизив конкуренцию за доступ к памяти. Ну да, ну да, у Intel есть общий кэш второго уровня, у AMD появиться кэш третьего, но это общий ресурс, да, наверное с несколькими банками. Да, AMD выведет это всё на два контроллера памяти, но зачем так сложно и энергонеэффективно? Если это не снимет проблему. Потому что по прежнему за 1 контроллер (даже если каким-то чудесным чудом удасться убедить Linux раскладывать адресные пространства так, чтобы они попадали под разные контроллеры памяти и в разные банки Lтретьего кэша) будут конкурировать два ядра.

А теперь, внимание, барабанная дробь и всё такое прочее, на сцену выкатываются процессоры с интегрироваными графическими ядрами. У меня возникает вопрос: а как же они в своих любимых SMP-конфигурациях с одной подсистемой обращения к памяти будут свои любимые ядра кормить данными? Зачем нам простаивающие (сколько там, если считать по попугаям?) 30% времени процессоры? Почему не сделать побольше простых процессоров, но с DMA и со своей памятью. Кстати, вы знаете, что BlueGene/L работает на процессорах для встраиваемой электроники?: )

Да даже если хочется Intel и AMD продавать решения на одном кристалле, почему бы просто не развести каждое ядро к своей памяти? Ну эффективнее же гораздо. Эх. Не понимаю я логику производителей. Тем более не понимаю логику тех, кто на всё это 'великолепие' тратит деньги, ибо недостатки очевидны.

Короче, все плохие, кроме IBM, которая в Cell'ах примерно так и сделала. Но опять же не понятно, это манакальное желание засунуть всё в один чип. Не, ну да, внешние шины они были долгое время медленными. Но сейчас же есть последовательные — безумно быстрые и энергии жрут мало, да ещё их можно спокойно через оптоволокно пускать.

Вот. Нет, конечно, второму ядру можно найти применение: виртуализация какая-нибудь, или, вот как в нашем случае, запускать все системные процессы на, например, чётных ядрах, а расчётные на нечётных, может будет выигрышь, процентов в 10, что не мало, в принципе, если время расчёта составляет 10 дней. Но всё равно, интуиция протестует против усложнения такой и без того непростой вещи, как процессор. Усложнение это, конечно, всего лишь количественное. Но… Хых. Всё-равно, транзисторы то переключаются, воздух греется, леднки тают, Америку топит, нации эммигрируют, нам на Урале жить становиться тесно: )

P.S. Тут сейчас, наверняка, придут и скажут, что мы сами дураки, что в x86-64 на то и придумано 16 регистров, чтобы разгружать во время вычислений подсистему памяти, и что компилятор надо оптимизирующий и правильный использовать. На что отвечу: использовали рекомендованный компилятор AMD — PGI. Intel'овский тоже пробовали, тщательно наблюдая за тем, чтобы он оптимизировал таки доступы в памяти. Результат одинаковый.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 7: ↑7 and ↓0+7
Comments3

Articles