А.С. Кожин, д.т.н., проф. Ю.Х. Сахин (ЗАО «МЦСТ», ОАО «ИНЭУМ им. И.С. Брука») A. Kozhin, Y. Sakhin КОММУТАЦИЯ СОЕДИНЕНИЙ ПРОЦЕССОРНЫХ ЯДЕР С ОБЩИМ КЭШЕМ ТРЕТЬЕГО УРОВНЯ МИКРОПРОЦЕССОРА «ЭЛЬБРУС-4С+» SIGNAL COMMUTATION BETWEEN CORES AND SHARED L3 CACHE IN «ELBRUS-4C+» MICROPROCESSOR Описаны структура и характеристики распределенного коммутатора общего кэша третьего уровня микропроцессора «Эльбрус-4С+» – буферизующего двунаправленного кольца, соединяющего процессорные ядра с банками L3-кэша. Рассмотрены оптимизации, примененные для уменьшения времени доступа в кэш и числа конфликтов в кольце. Приведены результаты моделирования различных вариантов топологии коммутатора. Ключевые слова: Эльбрус, архитектура, многоядерность, подсистема памяти, общий кэш третьего уровня, банки кэш-памяти, распределенный коммутатор, кольцевая шина, время доступа, моделирование. This paper describes the structure and technical specifications of distributed switch which is present in shared L3-cache of «Elbrus-4C+» microprocessor. The switch is a buffering bidirectional ring connecting processor cores and L3-cache banks. The optimizations used for reduction of cache latency and amount of ring conflicts are described. The simulation results of different switch topologies are presented. Keywords: Elbrus, architecture, many-core, memory subsystem, shared L3-cache, cache banks, distributed switch, ring bus, latency, simulation. Введение Постоянное усовершенствование технологических норм позволяет размещать всё большее количество транзисторов на одном кристалле микропроцессора при сохранении его площади. Благодаря этому увеличение числа процессорных ядер, размещенных в одном кристалле, остается актуальной тенденцией в наращивании вычислительной мощности современных микропроцессоров. Сегодняшние разработки крупнейших производителей микропроцессоров, таких как IBM, Intel, AMD, Fujitsu и Oracle, объединяют восемь и более вычислительных ядер в одном кристалле [1]. Для оптимизации работы процессорных ядер с общими данными и повышения производительности всей подсистемы памяти в состав большинства современных высокопроизводительных микропроцессоров включается общий кэш второго или третьего уровня, соединенный со всеми ядрами. С усовершенствованием технологических норм межблочные соединения оказывают все большее влияние на характеристики микропроцессора. Большая площадь кристалла и, соответственно, длина соединений, увеличение числа абонентов, требования к пропускной способности и времени доступа в кэш, ограничения на рассеиваемую мощность – делают задачу коммутации соединений между процессорными ядрами и общим кэшем одной из первостепенных при проектировании микропроцессора. На практике используются два подхода к проблеме. Для микропроцессоров с количеством ядер, не большим четырех, обычно применяется централизованная коммутация (рис. 1а). Примером могут служить микропроцессоры Intel Nehalem [2]. Этому решению свойственна плохая масштабируемость при увеличении числа ядер. Если учитывать, что с целью увеличения пропускной способности кэш-памяти в ее состав вводятся несколько независимых банков, количество которых чаще всего равно числу процессорных ядер, то для N-ядерного микропроцессора требуется разработать коммутатор с NN. соединениями. По этой причине для восьми- и 16-ядерных микропроцессоров использование централизованной коммутации ядер и банков общего кэша становится неоправданным из-за значительной задержки распространения сигналов по длинным связям и большой сложности трассировки. 2 Распределенная коммутация соединений имеет бльшую гибкость и масштабируемость. Коммутатор на основе двунаправленной кольцевой шины (рис. 1б) успешно используется в четырех- и восьмиядерных микропроцессорах Intel Sandy Bridge и Intel Itanium (Poulson). В то же время в такой конфигурации не исключена возможность конфликтов и взаимных блокировок при передаче пакетов по разным адресам назначения, которые отрицательно сказываются на пропускной способности коммутатора. Рис. 1. Коммутация соединений процессорных ядер с общим кэшем (а – централизованный коммутатор; б – распределенный коммутатор на основе двунаправленной кольцевой шины) На основании приведенных факторов при проектировании восьмиядерного микропроцессора «Эльбрус-4С+» [3] с общим L3-кэшем, разбитым на восемь одинаковых банков, была принята комбинированная конфигурация, позволившая в существенной степени использовать преимущества и снять проблемы, свойственные обоим решениям. В статье описывается ее реализация, и приводятся результаты моделирования, проведенного в сравнении с другими вариантами коммутации соединений. 3 1. Структурная схема и характеристики коммутатора Как показано на рис. 2, разработанный коммутатор разбит на четыре части (коммутаторы L3 Com 0,1,2,3). К каждому коммутатору L3 Com подключаются два процессорных ядра и два банка L3-кэша. Вместе эти пять блоков образуют «четверть» (Quart); четверти соединяются между собой двунаправленной кольцевой шиной. Таким образом, каждый блок L3 Com является централизованным коммутатором на восемь направлений (два ядра четверти плюс два банка четверти плюс два входа/выхода кольца), а вместе эти блоки объединяются в двунаправленное буферизующее кольцо. Рис. 2. Схема коммутационных соединений процессорных ядер с L3-кэшем в микропроцессоре «Эльбрус-4С+» Используя различные группы сигналов двунаправленной кольцевой шины, действу- 4 ют пять независимых двунаправленных колец передачи информации, соответствующие первичным запросам, снуп-запросам, снуп-ответам, пакетам данных, подтверждениям завершений чтений. Пропускная способность кольца данных составляет 32 байта/такт в каждом направлении. Пакеты данных могут иметь формат 32 байта (половина кэшстроки) и 64 байта (целая кэш-строка), причем во втором случае пакет передается двумя неразрывными посылками по 32 байта. В пакете, независимо от его типа, указывается идентификатор абонента кольца (адрес назначения), которому он посылается. В коммутаторе L3 Com в результате анализа адреса назначения происходит дальнейшая маршрутизация пакета, при этом учитывается только взаимное расположение узла, в котором происходит анализ, и абонента, которому адресуется пакет. Передача пакетов между абонентами четверти может выполняться независимо от транзитного прохождения пакетов по кольцу. На рис. 3 в качестве примера выбрано кольцо первичных запросов коммутатора L3 Com, по которому пакеты передаются от процессорных ядер в банки L3-кэша. В кольце выполняется передача пакетов по часовой стрелке (ClockWise Ring) и против (Counter-Clockwise Ring). Входные пакеты со всех направлений помещаются в отдельные очереди. Размер очередей подбирается таким образом, чтобы он был не меньше двойной задержки передачи между коммутатором и устройством (ядром или соседним коммутатором в рассматриваемом примере). Для контроля заполнения очередей используется кредитный механизм. На передающей стороне устанавливается счетчик, который уменьшает свое значение с каждым отправленным пакетом и увеличивает его по приему подтверждения об освобождении ячейки очереди на приемной стороне. С выхода очередей пакеты маршрутизируются в требуемом направлении демультиплексором demux. На каждом выходном направлении размещаются арбитры с круговым приоритетом arb. Арбитр выбирает только один пакет за такт, пакеты от других абонентов сохраняются в соответствующих очередях. Арбитры кольцевой шины (интерфейсов с соседними коммутаторами) дополнительно анализируют количество свободных позиций в 5 очередях на приемной стороне. Если остается только один кредит, блокируется поступление новых пакетов в кольцо, т.е. выполняются только транзитные передачи по кольцу через коммутатор. Этот механизм гарантирует наличие хотя бы одной свободной позиции во всех очередях кольцевой шины и предотвращает замыкание кольца. Рис. 3. Структурная схема коммутатора L3 Com (ClockWise Ring – кольцо с передачей пакетов по часовой стрелке; Counter-Clockwise Ring – кольцо с передачей пакетов против часовой стрелки; demux – демультиплексор пакетов; arb – выходной арбитр) 2. Оптимизации доступа в кэш Ниже описаны некоторые механизмы оптимизации, разработанные для уменьшения времени доступа в кэш и числа конфликтов в кольце. Очереди с двумя портами чтения 6 При интенсивной нагрузке на кольцо возможна конфликтная ситуация, когда несколько абонентов одновременно пытаются передать пакеты одному и тому же адресату. В этом случае пакеты от всех абонентов, кроме выбранного одного, блокируются. Блокировка может продолжаться несколько тактов в зависимости от степени загруженности кольца. При этом не исключено, что другое направление передачи остается свободным. Для повышения эффективной пропускной способности кольца в качестве входных очередей используются очереди с двумя портами чтения и возможностью внеочередного чтения. Если пакет, находящийся в голове очереди, блокируется выходным арбитром, то пакет со следующей позиции может его обогнать и быть переданным по другому направлению. Пакеты с одинаковыми адресами назначения не могут обгонять друг друга. Определение возможности обгона выполняется в демультиплексоре demux, который анализирует адреса назначения двух пакетов из головы очереди (рис. 3). Влияние этой оптимизации на среднее время прохождение запросов по кольцу иллюстрируют графики на рис. 4 и 5. Широковещательные снуп-запросы и передача данных В многоядерном микропроцессоре даже при использовании локального справочника достаточно часто возникает ситуация, когда надо послать один и тот же снуп-запрос нескольким ядрам. Передача отдельных пакетов для снуп-запроса в каждое ядро увеличивает нагрузку на кольцо и может привести к увеличению времени доступа в кэш. Аналогичная ситуация возникает и при передаче данных по кольцу, т.к. может потребоваться не только передача данных к ядру-запросчику, но и их запись в кэш третьего уровня. Разработанный механизм позволяет в случае возможности передавать одинаковые пакеты разным адресатам как одну посылку. Для снуп-запросов используется вектор ядерадресатов, каждый бит которого указывает о необходимости посылки этого запроса соответствующему ядру. Для данных указываются два адреса назначения: идентификатор ядра 7 и идентификатор банка кэша. В течение всего времени пока маршруты пакетов совпадают, они идут одной посылкой. После разделения маршрутов лишние адреса назначения сбрасываются, и пакеты передаются независимо. Конвейерная передача данных и их адресов назначения В кэше третьего уровня микропроцессора «Эльбрус-4С+» используются раздельные конвейеры тэгов и состояний [3]. Чтение данных из памяти кэша происходит с фиксированной временнй диаграммой после анализа тэгов и состояний в локальном справочнике, по результатам которого становится ясным тип требуемого ответа. При этом ядрузапросчику после приема ответа требуется несколько тактов на его обработку, прежде чем начнется работа с самими данными. Для уменьшения времени доступа по чтению был разработан следующий механизм передачи ответов с данными. Вместе с началом обращения в конвейер данных кэша ядру посылается заголовок ответа, содержащий всю необходимую информацию, включая тип ответа и идентификатор ядра. Через фиксированный временнй интервал вслед за заголовком выдаются сами данные. Заголовки и данные помещаются в разные очереди коммутатора. Арбитры хранят историю прохождения заголовков и в соответствии с ней выполняют считывание из очередей с данными. Такая схема позволяет уменьшить время доступа на задержку, необходимую для подготовки к приему данных в ядро. 3. Результаты моделирования Для оценки влияния принятой схемы коммутации на характеристики подсистемы памяти студентами базовой кафедры МФТИ Д.М. Альфонсо и Р.В. Деменко были разработаны на языке SystemC три потактовые модели коммутатора. Первая из них соответствует разработанному коммутатору – буферизующему двунаправленному кольцу с очередями, имеющими два порта чтения, и возможностью обгона. Вторая модель отличается 8 наличием только одного порта чтения у очередей коммутатора. В третьей модели вместо кольцевого соединения коммутаторов L3 Com применяется соединение «каждый с каждым», т.е. добавляются диагональные связи четвертей. Временне параметры всех трех моделей учитывают физические задержки передач сигналов по кристаллу. Исследовалось прохождение пакетов по кольцу от ядер в банки L3-кэша при интенсивной нагрузке. Адреса назначения пакетов в кольце (номер банка L3-кэша) выбирались случайным образом, каждое ядро формирует пакеты с интервалом от одного до трех тактов. Измерялось среднее время прохождения пакетов через коммутатор для различных конфигураций активных (формирующих пакеты) ядер. Результаты измерений приведены на рис. 4 и 5, значения указываются относительно времени прохождения пакетов через коммутатор с диагональными связями при одинаковых конфигурациях ядер. На рис. 4 ядра включаются последовательно (0-1-2-3-4-5-6-7), на рис. 5 вначале включаются ядра с четными, а затем с нечетными номерами (0-2-4-6-1-3-5-7). Во втором случае активные ядра распределены более равномерно по кольцу, и, как видно из графиков, среднее время прохождения пакетов меньше, чем в первом случае, если количество активных ядер меньше семи. Рис. 4. График зависимости среднего времени прохождения пакетов через коммутатор от 9 количества активных ядер при последовательном включении ядер (а – буферизующее кольцо на очередях с одним портом чтения; б – буферизующее кольцо на очередях с двумя портами чтения) Рис. 5. График зависимости среднего времени прохождения пакетов через коммутатор от количества активных ядер при поочередном включении ядер с четными и нечетными номерами (а – буферизующее кольцо на очередях с одним портом чтения; б – буферизующее кольцо на очередях с двумя портами чтения) Коммутатор с соединением «каждый с каждым» имеет наименьшее среднее время прохождения пакета, но при этом занимает бльшую площадь из-за длинных диагональных связей и дополнительных очередей для них. Удаление диагональных связей при переходе к кольцевой топологии увеличивает число конфликтов в коммутаторе, особенно при активности всех ядер и интенсивной нагрузке. Как показало исследование, использование очередей с двумя портами чтения и возможностью обгона позволяет снизить проигрыш по среднему времени прохождения пакетов примерно на треть при максимальной загружен10 ности коммутатора. При этом площадь коммутатора увеличивается незначительно. Заключение Разработанная комбинированная схема коммутации соединений – буферизующее двунаправленное кольцо, соединяющее распределенные «четверти» коммутатора, – обеспечивает эффективный обмен пакетами между процессорными ядрами и общим кэшем третьего уровня. Реализованные оптимизации уменьшают время доступа в L3-кэш и число конфликтов в кольце, таким образом, повышая эффективную пропускную способность коммутатора. Результаты моделирования разработанной схемы, с учетом топологического проектирования, показывают ее преимущество по сравнению с другими вариантами коммутации соединений. Литература 1. Исаев М.В. Основные тенденции в архитектуре высокопроизводительных многоядерных процессоров. – «Вопросы радиоэлектроники», сер. ЭВТ, 2011, вып. 3. 2. Hill D.L., Bachand D. et al. The Uncore: A Modular Approach to Feeding the Highperformance Cores. – Intel Technology Journal, 2010, vol. 14, no. 3. 3. Кожин А.С., Кожин Е.С., Костенко В.О., Лавров А.В. Кэш третьего уровня и поддержка когерентности микропроцессора «Эльбрус-4С+». – «Вопросы радиоэлектроники», сер. ЭВТ, 2013, вып. 3. 11