Интерфейс Compute Express Link ранее упоминался «Компостером» лишь в связи с инициативой компании Insyde Software обеспечить поддержку CXL в своей флагманской прошивке InsydeH2O. Анонс семейства стандартов подтолкнул разобраться в особенностях реализации этого новейшего метода взаимодействия, лежащего в основе шины, совсем не похожей на ранее изученные.
Теоретические сведения
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 submission phase), либо читает из памяти акселератора результаты выполненной обработки (work completion phase).

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

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

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

Симметричная модель: согласованность кэширования обеспечивается как для доступа акселератора к памяти процессора, так и для доступа процессора к памяти акселератора.
CXL device type 3 —
запоминающее устройство

Когерентное кэширование обеспечивается только при доступе центрального процессора к локальной памяти устройства. Заметим, что такое устройство может опционально поддерживать режим bus master (типично для mass storage), но без контроля согласованности доступа к памяти.
Архитектура Type 3 может найти применение в современных устройствах хранения данных, особенно снабженных автономными процессорами, функциональность которых шире, чем у классических процессоров ввода-вывода.
Роли устройств
Все три типа устройств могут выступать как в качестве инициаторов транзакций (initiator), так и адресуемых ресурсов (target). Их отличает подмножество сценариев обмена, для которых поддерживается кэширование с контролем согласованности доступа к данным.
- Для Type 1 реализовано только для варианта initiator.
- Для Type 2 реализовано для обоих вариантов.
- Для 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. Совместимость с этим интерфейсом, который в данном контексте придется определить, как Legacy, оговаривается в пункте 1.4.2 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 регламентируется спецификацией. Читатель, сумевший добраться до этого места, вероятно помнит расположение сигнальных цепей: для передачи тактирования (SMBCLK) и данных (SMBDATA) используются контакты 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 Firmware Interface Extensions). Пункт 9.15 (Manageability Model for CXL Devices) определяет два варианта физической реализации управляющего интерфейса: с использованием сигналов PCI Express (MCTP over PCIe) или SMBus (MCTP over SMBus). Очевидно, для задачи обновления или восстановления UEFI, упомянутой в этом пункте, SMBus под управлением встроенного микроконтроллера выглядит как предпочтительный вариант, поскольку в этом случае больше шансов на запуск процедуры восстановления в условиях, когда один или несколько модулей микрокода повреждены.