- PVSM.RU - https://www.pvsm.ru -

Привет! На связи Максим Башмаков, руководитель отдела тестирования оборудования в Selectel [1]. В своей лаборатории мы активно исследуем новейшие технологии и внедряем лучшее. Сегодня я хочу рассказать про CXL (Compute Express Link).
На Хабре уже есть несколько статей об этом интерконнекте. Однако конкретной информации про использование CXL в реальных кейсах мы не нашли. Обычному пользователю наверняка будет интересно: как устройство выглядит в стойке и непосредственно в сервере.
Я не буду вдаваться в подробности истории CXL, в интернете и так достаточно информации о его развитии. Много сведений можно найти на сайте одноименного консорциума [2]. Напомню только ключевые факты.

Поддержка CXL 1.1 в Linux появилась, начиная с ядра 5.16. Иллюстрация отражает постепенное внедрение функций.
Было разработано несколько спецификаций:

Compute Express Link (CXL) — высокоскоростной интерконнект, разработанный для расширения возможностей шины PCIe. Он функционирует как дополнительный уровень (слой) и обеспечивает эффективную связь между процессором и различными устройствами, такими как GPU, RAM и сетевые адаптеры.
Преимущество CXL — способность поддерживать когерентность кэша между процессором и подключенными устройствами. Иными словами: данные в кэше процессора и устройства всегда синхронизированы — нет необходимости в механизмах согласования, что и повышает производительность.
CXL также поддерживает различные режимы работы. Например, CXL.io обеспечивает высокоскоростную связь между процессором и дополнительным устройством, а CXL.mem предназначен для совместного использования памяти.

На схеме изображена многоуровневая архитектура CXL, которая отвечает за взаимодействие и обмен данными между компонентами. Рассмотрим уровни чуть подробнее.
CXL Transaction Layer (уровень транзакций) — обеспечивает обработку команд и данных, включает в себя:
CXL Link Layer (уровень канала) — управляет обменом данных и обеспечивает надежность соединения, состоит из:
Flex Bus Physical Layer (физический уровень) — обеспечивает непосредственный обмен данных по шинам и содержит:
CXL ARB/MUX (арбитраж/мультиплексирование) — управляет совместным использованием интерфейса PCIe и CXL и распределяет между ними ресурсы.
Рассмотрим подробнее, какие случаи использования можно найти в реальных устройствах. Один из примеров — CXL-экспандер, то есть расширитель оперативной памяти. Это PCIe-плата, на которой работает чип CXL. С помощью ее мы можем подключить дополнительный пул оперативной памяти.

На снимке выше — CXL‑экспандер с двумя DIMM‑слотами, поддерживающий ECC‑модули RAM объемом до 128 ГБ и работающий по интерфейсу PCIe Gen 5 x8. При этом не только увеличивается объем оперативной памяти сервера, но появляются и другие преимущества.

Три CLX‑экспандера в одной серверной платформе с суммарным объемом оперативной памяти 768 ГБ.
Экспандеры — это только вершина айсберга. Есть много периферийных устройств, которые позволяют использовать CXL, в том числе и для отладки.
Уже началась интеграция чипов CXL в крупные проекты. Например, Lenovo SR860 V3 в сотрудничестве с компанией ASTERA LABS разработали платформу, способную вместить 96 модулей DIMM до 512 ГБ каждый, что в сумме дает почти 50 ТБ оперативной памяти! Однако главное — это даже не объем. Платформа может делиться этой памятью с другими серверами посредством CXL в пределах одного дата-центра.
Посмотрите на CXL в видео [3].
Ниже — список основного ПО, которое потребуется для взаимодействия с CXL.
Системное администрирование:
Fabric Management:
Memory Tiering (уровневая память):
Телеметрия:
Эмуляция:
Доставать образцы экспандеров нам было тяжело, поэтому как только они к нам попадали, мы сразу же приступали к тестированию.
В эксперименте участвовала серверная платформа с модулями DIMM Samsung 4800 DDR5 M321R4GA0BB0-CQKET. Конфигурация включала в себя восемь модулей RAM объемом 32 ГБ на каждый и два CXL-экспандера по 256 ГБ. Таким образом, с помощью CXL-экспандеров к платформе добавлялось 512 ГБ оперативной памяти сверх штатного объема.
Тестирование предусматривало три итерации, использовались следующие инструменты:
Выполнялось три теста:

Каждый из трех графиков выше представляет один из режимов тестирования. В данном тесте мы смотрим на задержки и пропускную способность, измеренную с помощью MLC Intel — график показывает ее зависимость от Delay Injection.
Тест синтетический и не предназначен для объективного суждения. Наша цель — определить, насколько медленнее работает память по CXL (PCIe) в сравнении с обычной.
На первый взгляд может показаться, что память, расположенная рядом с CPU (штатная память без CXL), значительно быстрее. Однако не все так просто. Ситуация меняется при учете задержки инъекции. При Delay Injection равной нулю мы действительно наблюдаем максимальную производительность. Однако серверные приложения, такие как базы данных, веб-серверы и другие, не могут работать с нулевой задержкой — из-за накладных расходов на обращение к кэшу CPU и RAM. В этом контексте мы не рассматриваем показатель возможной пропускной способности как объективный для приложений.
Данные из открытых источников [1 [4], 2 [5]] показывают, что приблизительные значения задержки инъекции для PostgreSQL, MySQL и Nginx колеблются от 150 до 300 нс.

Источник [6].
Картина становится интереснее. Получается, совместное использование RAM+CXL в режиме numactl --interleave демонстрирует пропускную способность, аналогичную штатной памяти, расположенной непосредственно у CPU. Осталось только удостовериться в правильности полученных результатов с помощью бенчмарков приложений.
Для приложений PostgreSQL, MySQL и Nginx мы провели бенчмарки, алгоритмы которых разработали сами. Результаты объединили и получили общую картину, выраженную в процентном соотношении. Выходит, что совместная работа (CXL+RAM) отнимает примерно 2% производительности. Такой небольшой показатель вообще можно считать погрешностью. Использование исключительно CXL дает снижение быстродействия на 7% по сравнению со штатной памятью сервера.

На графике — данные по сумме транзакций в секунду за цикл тестов.
Немного подробнее рассмотрели, как отражается использование разной памяти на задержки при работе с БД.

Как и в предыдущем случае, при использовании CXL+RAM не наблюдается разница в задержках по сравнению с обращением только к штатной RAM. Нагрузка на БД была максимально высокой — с задействованием huge_page и других настроек производительности, о которых я рассказывал в статье про тестирование БД [7].
График также показывает, что при использовании исключительно CXL средние задержки на один запрос начинают расти с увеличением числа потоков. В дальнейшем мы подробнее изучим эту зависимость, а пока зафиксируем полученные результаты.
Мы продолжаем активно тестировать CXL. Следующим этапом планируем провести аналогичный эксперимент, но уже с памятью, расположенной на другом удаленном сервере. Тщательно измерим все показатели. Пока не видится никаких препятствий для интеграции этой технологии в нашу инфраструктуру.
Пример того, как расширители выглядят в реальности, — перед вами:

Фото с выставки SC24, на которой представлены отладочные платы для PCIe 6 с использованием CXL Memory Poling.
Результаты первичных тестов нас устраивают. Мы активно продолжаем изучение технологии и проверку ее на реальных кейсах. Данные экспандеры, и не только, скоро можно будет взять в бесплатный тест у нас в Selectel-LAB [1]. Следите за обновлениями!
Наш сервер Selectel [8] использует самые новые процессоры Xeon 6 и уже поддерживает CXL 1.1 и 2.0. Все описанные в статье тесты, мы осуществляли на нем. Сервер уже доступен для клиентов, и каждый при желании может присоединиться к эксперименту [9].
Уже сейчас можно увеличивать предельно допустимый объем памяти в рамках одного выделенного сервера. На очереди — исследование Memory Poling для внешних серверов. Но это уже другая история.
Слышали ли вы про CXL? Как считаете, есть ли перспективы у данной технологии? Поделитесь мнением в комментариях!
Автор: Maksvelis
Источник [10]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/selectel/415125
Ссылки в тексте:
[1] отдела тестирования оборудования в Selectel: https://selectel.ru/lab/?utm_source=habr.com&utm_medium=referral&utm_campaign=lab_article_cxl_290325_content
[2] на сайте одноименного консорциума: https://computeexpresslink.org/
[3] в видео: https://www.youtube.com/shorts/mhrvTTmgNBA
[4] 1: https://www.alibabacloud.com/blog/the-mechanism-behind-measuring-cache-access-latency_599384
[5] 2: https://dl.acm.org/doi/10.1145/3695794.3695806
[6] Источник: https://cs.brown.edu/courses/csci1310/2020/assign/labs/lab4.html?spm=a2c65.11461447.0.0.47497f65s66OXH
[7] в статье про тестирование БД: https://selectel.ru/blog/postgresql-testing/
[8] сервер Selectel: https://pro.selectel.ru/selectel-serv/?utm_source=habr.com&utm_medium=referral&utm_campaign=lab_article_cxl_290325_content
[9] присоединиться к эксперименту: https://selectel.ru/lab/server-selectel/?utm_source=habr.com&utm_medium=referral&utm_campaign=lab_article_cxl_290325_content
[10] Источник: https://habr.com/ru/companies/selectel/articles/895416/?utm_campaign=895416&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.