Compute Express Link как преемник PCI Express

Интерфейс Compute Express Link ра­нее упо­ми­нал­ся «Ком­пос­те­ром» лишь в свя­зи с ини­ци­а­ти­вой ком­па­нии In­syde Soft­ware обес­пе­чить под­держ­ку CXL в сво­ей флаг­ман­ской про­шив­ке Insyde­H2O. Анонс се­мей­ст­ва стан­дар­тов под­толк­нул раз­об­рать­ся в осо­бен­но­с­тях ре­а­ли­за­ции это­го но­вей­ше­го ме­то­да вза­и­мо­дей­ст­вия, ле­жа­ще­го в ос­но­ве ши­ны, сов­сем не по­хо­жей на ра­нее из­учен­ные.

Теоретические сведения

CXL определяет модель передачи ин­фор­ма­ции, при­зван­ную совместить преимущества когерентного и не­ко­ге­рент­но­го подключений. В качестве примера рассмотрим взаимодействие группы устройств (процессоров), раз­де­ля­ю­щих об­щее ад­рес­ное про­ст­ран­ст­во, каждый из которых располагает собственной кэш-памятью. При до­сту­пе к информации, рас­по­ло­жен­ной в общей оперативной памяти, каждый из участников обмена кэ­ши­ру­ет прочитанные данные и при по­сле­ду­ю­щем до­сту­пе к ним будет читать собственную кэш-копию этих дан­ных, не обращаясь к оперативной памяти. Ес­ли не при­нять спе­ци­аль­ных мер, изменение информации, вы­пол­нен­ное одним из участников в оперативной памяти не бу­дет за­ме­че­но остальными участниками, про­дол­жа­ю­щи­ми работать с устаревшими копиями данных из соб­ст­вен­ной кэш-па­мя­ти. Ана­ло­гич­ным об­ра­зом, при ис­поль­зо­ва­нии дисциплины отложенной записи (writeback cache), об­нов­ле­ние информации, про­изо­шед­шее в пре­де­лах кэш-памяти одного из процессоров и не достигнувшее ОЗУ, будет «не ви­ди­мым» для ос­таль­ных участ­ни­ков обмена.

Когерентное подключение

Когерентное подключение, примерами ре­а­ли­за­ции которого могут служить соединения между процессорами муль­ти­со­кет­ных плат­форм, такие как Intel QPI, AMD Infinity Fabric, AMD Hyper Transport (в варианте для ко­ге­рент­ной меж­про­цес­сор­ной свя­зи) решает две вы­ше­ука­зан­ные проблемы на аппаратном уровне, в теории про­зрач­но для про­грам­мно­го обес­пе­че­ния. Хотя здесь уместно небольшое буквоедство: при спекулятивном из­ме­не­нии порядка мо­ди­фи­ка­ции не­сколь­ких пе­ре­мен­ных в па­мя­ти, проведенном в одном из выполняемых по­то­ков, другой поток может «увидеть» не­кон­сис­тент­ное состояние переменных. Имеется в виду ситуация, при которой в программе модификация переменной Y следует после мо­ди­фи­ка­ции переменной X, тем не ме­нее существует интервал времени, в течение которого есть ве­ро­ят­ность в па­рал­лель­но выполняемом по­то­ке прочитать X в еще не модифицированном состоянии, а Y — в уже мо­ди­фи­ци­ро­ван­ном. Спе­ци­аль­ные ин­ст­рук­ции семейства Memory Fence обеспечивают программное ис­прав­ле­ние де­ли­кат­ной про­­бле­­мы, ре­шать ко­то­рую на ап­па­рат­ном уровне было бы слишком накладно.

Некогерентное подключение

При доступе центрального про­цес­сора к памяти, ре­а­ли­зо­ван­ной в составе пе­ри­фе­рий­ного PCIe-устройства, ко­ге­рент­ность кэ­ши­ро­ва­ния на аппаратном уровне не обеспечивается. Более того, в типовом случае доступ является не­кэ­ши­ру­е­мым, а из спе­ку­ля­тив­ных операций применяется только объединение нескольких по­сле­до­ва­тель­ных за­пи­сей ма­лой раз­ряд­но­с­ти в об­щий шин­ный цикл сум­мар­ной раз­ряд­но­с­ти — write combining. Ти­по­вой при­мер — вза­и­мо­дей­ст­вие CPU с памятью видео адаптера.

Во избежание недоразумений заметим, что речь о сценарии программного обмена (PIO mode), при котором ини­ци­а­то­ром до­сту­па является центральный процессор, адресуемым устройством — видео память. В другом типе об­ме­на, при ко­то­ром гра­фи­че­ский процессор в режиме bus master взаимодействует с системной па­мятью, ко­ге­рент­ность в рам­ках про­то­ко­лов PCIe и AGP опционально реализуема.

Промежуточные итоги

Преимущества когерентного подключения — аппаратное обеспечение согласованности содержимого со­вмест­но ис­поль­зу­е­мой па­мя­ти. Недостаток — снижение производительности, связанное с обеспечением это­го условия: каж­дое из под­клю­чен­ных уст­ройств должно сообщать о своих операциях чтения и записи всем ос­таль­ным, что порождает так на­зы­ва­е­мый snoop traffic. Наличие такого трафика, распространяемого на все уст­рой­ст­ва, независимо от участия в об­ме­не, по­вы­ша­ет энер­го­по­треб­ле­ние плат­фор­мы. Очевидно, набор пре­и­му­ществ и не­до­стат­ков не­ко­ге­рент­но­го под­клю­че­ния об­рат­ный: здесь отсутствуют дополнительные виды тра­фи­ка, но при этом забота о со­гла­со­ван­но­с­ти со­дер­жи­мо­го данных в памяти перекладывается на раз­ра­бот­чи­ков программного обеспечения.

Протокол CXL определяет
Bias Based Coherency Model

Принцип нетрудно понять, обратившись к пункту 2.2.1 Bias Based Coherency Model спе­ци­фи­ка­ции CXL. Раз­ра­бот­чи­ки оп­ре­де­ля­ют по­ня­тие Host Managed Device Memory (HDM). Это память, физически расположенная на пе­ри­фе­рий­ном уст­рой­ст­ве (например, видео адаптере или вычислительном акселераторе), находящаяся под уп­рав­ле­ни­ем цен­т­раль­но­го про­цес­со­ра, либо другого системного компонента, выступающего в роли хост уст­рой­ст­ва. Для уп­ро­ще­ния, бу­дем ис­поль­зо­вать тер­ми­ны «процессор» и «акселератор». Стандарт определяет два опе­ра­ци­он­ных состояния.

1) Состояние Host Bias (п. 2.2.1.1) устанавливается на время обмена между процессором и акселератором. Это мо­гут быть ин­тер­ва­лы времени, когда процессор записывает в память акселератора данные, требующие об­ра­бот­ки (work sub­mission phase), ли­бо читает из памяти акселератора результаты выполненной обработки (work completion phase).

Состояние Host Bias: память акселератора (CXL Device) находится под удаленным контролем процессора (Host), зеленая стрелка символизирует snoop трафик (акселератор вынужден запрашивать разрешение у процессора на доступ к собственной памяти), синяя — доступ процессора к памяти акселератора, скорость которого в этом состоянии оптимальна

 

Это режим когерентного доступа, в котором все операции над памятью акселератора находятся под конт­ро­лем про­цес­со­ра. Не­ми­ну­е­мой расплатой за это является снижение пропускной способности и рост ла­тент­но­с­ти при до­сту­пе ак­се­ле­ра­то­ра к собственной памяти.

2) Состояние Device Bias (п. 2.2.1.2) устанавливается на время автономного выполнения акселератором вы­чис­ли­тель­ной за­да­чи, ко­гда обмен с процессором не требуется, а производительность акселератора должна быть мак­си­маль­на.

Состояние Device Bias: память акселератора (CXL Device) находится в его полном распоряжении, красная стрелка показывает быстрый доступ акселератора к собственной памяти, доступ процессора к памяти акселератора (синяя стрелка) также возможен, но для этого требуется получение разрешения от акселератора (зеленая стрелка)

 

Временное снятие требования когерентности и как следствие, отключение управляющего трафика между про­цес­со­ром и ак­се­ле­ра­то­ром позволяют последнему работать с локальной памятью на максимальной ско­рос­ти. До­пол­ни­тель­ным фактором гибкости является выбор статуса Host/Device Bias индивидуально на уров­не стра­ниц па­мя­ти. Это по­зво­ля­ет со­вмес­тить во времени операции обмена информацией акселератора с хостом и вычисления, вы­пол­ня­е­мые ак­се­ле­ра­то­ром в мак­си­маль­ном тем­пе доступа к собственной памяти. Для двух этих операций можно ди­на­ми­че­ски вы­де­лять раз­дель­ные бло­ки па­мя­ти ак­се­ле­ра­то­ра. Согласно спе­ци­фи­ка­ции, для такого управления мо­жет быть ис­поль­зо­ва­на спе­ци­аль­ная таблица (Bias table), а также ме­ха­низ­мы кэширования ее содержимого (Bias cache), по фун­к­ци­о­наль­но­с­ти на­по­ми­на­ю­щие TLB.

Классификация типов устройств

Чтобы пояснить термин Type 2 Device придется перечислить все три типа CXL устройств.

CXL device type 1 —
устройство с кэш-памятью

CXL device type 1 — устройство с кэш-памятью

Устройство содержит внутреннюю кэш-память. Для информации, передаваемой в режиме bus master доступа к сис­тем­ной па­мя­ти, обес­пе­чи­ва­ет­ся ко­ге­рент­ное кэ­ши­ро­ва­ние. Опционально, может содержать и локальную па­мять, но про­то­кол ее ра­бо­ты не нор­ми­ру­ет­ся спе­ци­фи­ка­ци­ей CXL. При наличии опциональной внутренней па­мя­ти, такое уст­рой­ст­во напоминает видео адаптер на шине PCIe.

CXL device type 2 —
устройство с локальной когерентной памятью

CXL device type 2 — устройство с локальной когерентной памятью

Симметричная модель: согласованность кэширования обеспечивается как для доступа акселератора к па­мя­ти про­цес­со­ра, так и для до­сту­па процессора к памяти акселератора.

CXL device type 3 —
запоминающее устройство

CXL device type 3 — запоминающее устройство

Когерентное кэширование обеспечивается только при доступе центрального процессора к локальной памяти уст­рой­ст­ва. За­ме­тим, что та­кое устройство может опционально поддерживать режим bus master (типично для mass storage), но без кон­т­ро­ля со­гла­со­ван­нос­ти доступа к памяти.

Архитектура Type 3 может найти применение в современных устройствах хранения данных, особенно снаб­жен­ных ав­то­ном­ны­ми про­цес­со­ра­ми, функциональность которых шире, чем у классических процессоров ввода-вы­вода.

Роли устройств

Все три типа устройств могут выступать как в качестве инициаторов транзакций (initiator), так и адресуемых ре­сур­сов (target). Их отличает подмножество сценариев обмена, для которых поддерживается кэширование с конт­ро­лем со­гла­со­ван­но­с­ти доступа к данным.

  1. Для Type 1 реализовано только для варианта initiator.
  2. Для Type 2 реализовано для обоих вариантов.
  3. Для Type 3 реализовано только для варианта target.

В несколько вольной трактовке, три перечисленных типа CXL устройств могут быть обозначены как «legacy-ак­се­ле­ра­тор», «про­дви­ну­тый ак­се­ле­ра­тор» и «устройство хранения на шине CXL» соответственно.

CXL и Optane memory

Персистентные запоминающие устройства на основе высокопроизводительной памяти Intel Optane остро нуж­да­ют­ся в об­нов­ле­нии ин­тер­фей­са. Нетрудно заметить, что существующий стандарт NVDIMM далек от со­вер­шен­ст­ва и про­ти­во­ре­чив по оп­ре­де­ле­нию, так как предусматривает подключение энергонезависимых за­по­ми­на­ю­щих уст­ройств к ши­не опе­ра­тив­ной памяти, принцип работы и набор сигналов которой оп­ти­ми­зи­ро­ва­ны для подключения DRAM (но не NAND или Optane memory).

Концепция computational storage devices предусматривает размещение на плате запоминающего устройства до­ста­точ­но про­из­во­ди­тель­ных про­цес­со­ров, способных выполнять такие операции, как архивирование и шиф­ро­ва­ние дан­ных. Если информация, хранимая mass storage устройством доступна в адресном про­ст­ран­ст­ве платформы (на­при­мер, при ре­а­ли­за­ции ар­хи­тек­ту­ры DAX) и при этом ее модификация воз­мож­на не толь­ко со стороны CPU, но и ав­то­ном­но­го про­це­с­со­ра на­ко­пи­те­ля, вопросы арбитража и со­гла­со­ван­но­го до­сту­па к памяти актуальны.

Flex Bus и интеграция в платформы

С точки зрения количественных характеристик, спецификацию CXL 2.0 можно условно соотнести с версией 5.0 ин­тер­фей­са PCI Express. Совместимость с этим интерфейсом, который в данном контексте придется оп­ре­де­лить, как Le­ga­cy, ого­ва­ри­ва­ет­ся в пункте 1.4.2 Flex Bus.

Реализация Flex Bus

 

Если верить иллюстрации, дизайн Flex Bus определяет универсальный хост-контроллер шины (в данном при­ме­ре в составе микросхемы CPU), опциональное наличие до двух ретаймеров и, собственно, разъем PCIe, в ко­то­рый может быть установлено устройство CXL или PCIe. Тип подключения, также как ширина и по­ло­са про­пус­ка­ния определяется автоматически при старте платформы средствами процедуры Link Training.

Отдельно изображается устройство, расположенное на системной плате. Увидим ли мы столь адаптивный ди­зайн в ре­аль­ных плат­фор­мах? Воздержимся от прогнозов. Практикующим исследователям рекомендуем оз­на­ко­мив­шись с пунк­том 8.1.1 спе­ци­фи­ка­ции (PCI Express Designated Vendor-Specific Extended Capability (DVSEC) ID Assignment), на­чать поиск структуры с кодом Vendor ID = 1E98h, в регистровых полях ис­сле­ду­е­мых платформ.

Управляющая шина на основе I3C

Наличие сигналов управляющей шины на разъеме PCI Express регламентируется спецификацией. Читатель, сумев­ший до­брать­ся до это­го места, вероятно помнит расположение сигнальных цепей: для передачи так­ти­ро­ва­ния (SMB­CLK) и дан­ных (SMB­DATA) используются контакты B5 и B6 соответственно.

Интерфейс SMBus консервативен, поскольку его применения традиционно ограничиваются ини­ци­а­ли­за­ци­он­ны­ми про­це­ду­ра­ми при стар­те плат­фор­мы, а также функциями мониторинга. В домашних платформах, не­смот­ря на на­ли­чие штат­но­го кон­т­рол­ле­ра SMBus в составе системной логики, указанные линии на PCIe-разъ­еме ис­поль­зу­ют­ся не часто.

Иная ситуация в серверах и рабочих станциях. Управляющий интерфейс, обслуживаемый автономными мик­ро­кон­т­рол­ле­ра­ми и со­хра­ня­ю­щий фун­к­ци­о­наль­ность независимо от центрального процессора, в том числе в ре­жи­ме «де­жур­но­го пи­та­ния» кри­ти­че­ски важен, в частности для обеспечения удаленного мониторинга и уп­рав­ле­ния.

Переход от I2C к I3C начавшийся с управляющей шины оперативной памяти получил логическое про­дол­же­ние в рам­ках под­го­тов­ки новых спецификаций PCIe и CXL. Увеличение скорости обмена с 1 до 12.5 Mbps, а так­же под­держ­ка ге­не­ра­ции за­про­сов на прерывание при асинхронных событиях приобрели актуальность.

  • Документ Management Component Transport Protocol (MCTP) Base Specifications определяет ад­ре­са­цию, фор­ма­ты со­об­ще­ний, протоколы взаимодействия между управляющими мик­ро­конт­рол­ле­ра­ми, а также мик­ро­кон­т­рол­ле­ра­ми и ресурсами платформы, как объектами мониторинга и управления. Эта спе­ци­фи­ка­ция мак­си­маль­но аб­стра­ги­ро­ва­на от физических свойств сервисного ин­тер­фей­са, что упрощает его модернизацию.
  • Документ CXL Fabric Manager API over MCTP Binding Specification, датированный маем сего года на­хо­дит­ся в со­сто­я­нии раз­ра­бот­ки. Судя по доступным сведениям, создаваемая спецификация долж­на стать одним из уровней стека протоколов — надстройкой над MCTP, наличие которой обо­сно­ва­но в силу со­об­ра­же­ний ин­кап­су­ля­ции низ­ко­у­ров­не­вых под­роб­но­стей и унификации уп­рав­ля­ю­щей шины для CXL.
  • Документ Management Component Transport Protocol (MCTP) I3C Transport Binding Specification, да­ти­ро­ван­ный ию­нем се­го го­да также находится в состоянии разработки. Эта спецификация при­зва­на обес­пе­чить фи­зи­че­скую ре­а­ли­за­цию управляющей шины на основе I3C.
Пример топологии управляющей шины

 

В примере на иллюстрации системой управляет один микроконтроллер (I3C Master). Slave-устройства рас­по­ло­же­ны на сис­тем­ной плате, платах расширения, присутствует и отдельное шасси, снабженное собственным ис­точ­ни­ком пи­та­ния. Для сиг­на­ли­за­ции об асинхронных событиях, устройства, имеющие статус Slave также могут ини­ци­иро­ва­ть опе­ра­ции на ши­не. Это ак­ту­аль­но для передачи запросов на прерывание, например, при фиксации критического значения датчиком температуры.

Практические выводы

На практике, поиск поддержки интерфейса CXL со стороны UEFI BIOS платформы разумно начинать с ACPI-таб­ли­цы с сиг­на­ту­рой CEDT — это CXL Early Discovery Table, формат которой описан в пункте 9.14 спе­ци­фи­ка­ции CXL 2.0 (CXL OS Firm­ware Inter­face Ex­tensions). Пункт 9.15 (Manageability Model for CXL Devices) оп­ре­де­ля­ет два варианта физической реализации управляющего интерфейса: с использованием сигналов PCI Express (MCTP over PCIe) или SMBus (MCTP over SMBus). Очевидно, для задачи обновления или вос­ста­нов­ле­ния UEFI, упомянутой в этом пункте, SMBus под уп­рав­ле­ни­ем встро­ен­ного мик­ро­конт­рол­ле­ра вы­гля­дит как пред­поч­ти­тель­ный вариант, поскольку в этом случае боль­ше шан­сов на за­пуск про­це­ду­ры вос­ста­нов­ле­ния в ус­ло­ви­ях, когда один или несколько модулей микрокода по­вреж­де­ны.