RDMA — принцип проектирования подкачки по требованию ODP, преимущества и анализ исходного кода
RDMA — принцип проектирования подкачки по требованию ODP, преимущества и анализ исходного кода

термин

ODP: пейджинг по требованию

HMM: управление гетерогенной памятью

Явный/неявный ODP

  • явный ODPсуществоватьявный ODP , приложение по-прежнему регистрирует буфер памяти для связи, но эта операция используется для определения IO из Контроль доступа вместо фиксированных страниц. ОДП область памяти (MR) существоватьзарегистрироватьсяне обязательно иметь действительныйизкартографирование。(IBV_EXP_ACCESS_ON_DEMAND)
  • Скрытый ODPсуществовать Скрытый ODP приложению предоставляется специальный ключ памяти, который представляет все его адресное пространство. Все ссылки на этот ключ из IO Для доступа не требуется ни один из диапазонов виртуальных адресов (при условии сопоставления ключей и разрешений доступа). (IBV_EXP_IMPLICIT_MR_SIZE)

Предварительная выборка ODP (IBV_EXP_PREFETCH_WRITE_ACCESS): драйвер может предварительно выбрать заданный диапазон страниц и сопоставить их для доступа к HCA. Глаголы предварительной выборки работают только с ODP MR и выполняются максимально эффективно, а ошибки могут игнорироваться.

  • Неверная виртуальная страница: Несопоставлено со страницы, Поскольку страница больше не фиксируется, ОС Ядро может менять местами иммигрировать страницы

Введение

Что такое пейджинг по требованию?

Приложение использует системный вызов (ibv_reg_mr) для RDMA Адаптер регистрирует память, а затем ссылается на соответствующий виртуальный адрес. IO действоватьпрямойопубликовать на оборудовании。Покадля,Это черезсуществоватьзарегистрироваться Во время разговоразакрепленная памятьосознатьиз。Пейджинг по Цель аппаратиз состоит в том, чтобы избежать фиксации, которая была памяти (MR) страница. Это даст пользователям такую ​​же гибкость, как при замене любой другой части адресного пространства своего процесса. Нам не нужно просить обо всем MR адаптированы к размеру физической памяти, но позволяют MR Может быть больше и соответствует только текущему рабочему набору в физической памяти. Это позволяет RDMA Программировать стало проще. Сегодня обрабатывается больше данных, чем физической памяти RAM. Разработчикам необходимо отменять регистрацию и перерегистрировать области памяти на протяжении всего процесса или сохранять одну область памяти и копировать в нее данные. Пейджинг по требованию позволит этим разработчикам зарегистрировать единый MR,И пусть операционная система сама определяет, какие страницы необходимо загрузить в данный момент времени. Волякоме,мы можем быть в состояниидля Каждыйиндивидуальный Процесс предоставленКлюч доступа к единой памяти,ключ Волявсеиндивидуальныйпроцессизадресдляодининдивидуальныйбольшойобласть памятипоставлять,所以开发人员根本Нет需要зарегистрироватьсяобласть памяти

Болевые точки текущей регистрации памяти

• Размер зарегистрированной памяти должен соответствовать размеру физической памяти.

• Приложение должно иметь разрешение на блокировку памяти.

• Непрерывная синхронизация таблиц трансляции между адресными пространствами и HCA затруднена из-за

– Изменения адресного пространства (malloc, mmap, stack)

– NUMA-миграция

– fork()

• Регистрация является дорогостоящей операцией – нет привязки к местности.

Хотя исправлено MR существовать RDMA Он широко используется в приложениях, но имеет несколько ограничений. Воля в физической памяти существует большое количество закрепленных страниц (например, десятки или сотни ГБ), принимая ценные DRAM ресурс. Приложения могут инициализировать только память, размер которой не превышает доступную физическую память. MR。в то же время,оно потеряноЧрезмерное использование, мигрировать страницу, прозрачная большая страницаВ ожидании возможности。лапшаверноэти ограничения,предложенный ODP (пейджинг MR по требованию)

Преимущества ОДП

• Упрощение программирования

– Коллективная связь MPI не требует динамической регистрации памяти

– Нет необходимости управлять выделенным пулом буферов (пулом MR)

• Почти неограниченная регистрация в памяти (например, поддержка MR на уровне ТБ)

- Никаких специальных разрешений не требуется

• Оптимизируйте физическую память для хранения рабочих наборов.

Процесс регистрации в памяти

идеи дизайна

• Только ядро

– Прозрачность для приложений

• Задачи общего кода (ib_core).

– Управление аннулированием страниц

• Зарегистрируйтесь для звонков уведомителей MMU.

• Предоставьте контекст сбоя.

• Определить взаимосвязь между аннулированием страниц и MR.

– Поддержка ошибок страниц (ошибки страниц)

• существуют недействительность и ошибка отсутствия страницы синхронный

• Замените и сопоставьте пользовательские страницы с dma.

• Задачи кода драйвера (mlx4_core/ib).

– Обработка ошибок страницы.

• Фиксировать и классифицировать ошибки аппаратных страниц аппаратного обеспечения.

• Предоставьте контекст ошибки страницы.

– Запрашивающая сторона/ответчик для каждого QP (работа_структура для каждого QP)

– Обработка сбоя страницы аппаратного обеспечения.

структура данных ссылки

Процесс переключения страниц

Страница недействительнассылкапроцесс

Таблица страниц RNIC ODP и таблица страниц ЦП

картина 1, мы показали ODP MR из RNIC таблицу страниц и сравнить ее с CPU Поверхность страницы для сравнения. Действительные виртуальные страницы сопоставляются со страницами поверхности физических страниц. Недопустимые виртуальные страницы не будут сопоставлены. v5 существовать CPU Страницаповерхность Умеренно эффективен,носуществовать RNIC Недопустимо в таблице страниц

Процесс синхронизации таблиц страниц CPU и RNIC

ODP MR с фиксированным MR В отличие от страницы Воля не существует фиксированной физической памяти, RNIC Таблица страниц сопоставляет некоторые виртуальные страницы с физическими страницами (которые мы называем действительными виртуальными страницами), а остальные страницы остаются несопоставленными, то есть недействительными виртуальными страницами. Поскольку страница больше не фиксируется, ОС Ядро может обмениваться иммигрировать страницы. Приложения могут использовать объем памяти, превышающий физическую. МИСТЕР. Поскольку сопоставление виртуального и физического может измениться, процессор и RNIC Страницаповерхностьпокартинапоказаноизтрииндивидуальныйпроцесссинхронный。

  1. Вина. когда RDMA При запросе доступа к данным на недействительной виртуальной странице (1a) RNIC остановится QP и триггер RNIC Ошибка страницы 1 Прерывать. (1b) водительские пропуска hmm_range_fault [2] К OS Ядро запрашивает сопоставление виртуального и физического. ОС Ядро будет запускаться на этих виртуальных страницах CPU Ошибка страницы и существования заполните при необходимости CPU Страницаповерхность。 (1c) Обновления драйверов RNIC Поверхность страницы на карте (1d) восстанавливаться QP。
  2. Неверный. когда OS Когда ядро ​​пытается отменить сопоставление виртуальных страниц в таких сценариях, как существующая подкачка или миграция страниц, (2a) это пройдет mmu_interval_notifier [2] уведомить RNIC Драйвер делает виртуальную страницу недействительной. (2b) RNIC водитель из RNIC Поверхность страницы переведите виртуальную в физическую карту. (2c) драйвер уведомить ядро RNIC Больше не использовать физическую страницу. Затем ОС Модификация ядра CPU Поверхность страницы и повторное использование физических страниц. ОДП MR Положитесь на синхронный поток ошибок и сбоев. CPU и RNIC Страницаповерхность。RNIC Поверхность страницы из Все действительные виртуальные страницы гарантированно существуют. CPU Действительно для поверхности страницы, но не наоборот. Когда ядро ​​Воля заменяет недействительную виртуальную страницу на действительную виртуальную страницу, оно не уведомляет драйвер. Такие как картина 1 Как показано, v5 существовать CPU Страницаповерхность Умеренно эффективен,носуществовать RNIC Поверхность страницы по-прежнему недействительна.
  3. Предлагаемый процесс решает вышеуказанные проблемы. Приложения могут заранее запрашивать RNIC заполнение драйвера RNIC Поверхность страницы в пределах диапазона. РНИК водительские пропуска步骤 (3a) – (3b) Полные предложения, эти шаги и шаги (1b) – (1c) такой же.

Предварительная загрузка страниц и ее преимущества

Используется для предварительной загрузки страниц из новых глаголов (глаголов)

• Цель

– Разогрейте новое отображение памяти.

– Оптимизация протокола знакомств MPI

– Оптимизация ответчика UD

тест

• Поддержка ODP

– для IB и RoCE достиг всего RC транспортный поток

• Не включено SRQ иокно памяти

– IB и RoCE начальствоиз UD

– Необработанный Ethernet QP

• Совместимость

– Бежать не одновременно ODP Задержка приложений практически не изменяется

– Смешанный запросчик/ответчик также работает хорошо

• резидент памяти ODP Страница из нативной производительности

• Производительность пейджинга

– Ошибка страницы 4K занимает около 135 мкс.

– Ошибка страницы 4M занимает около 1 мс

Разбивка по времени выполнения (отправитель запроса)

будущая работа

• Очень большая поддержка MR

• поддерживать TB сортиз MR

• Неявный ODP

– Предварительная регистрация завершена из адресного пространства приложения

– Эффективно устранить регистрацию в памяти

• Размер метаданных должен быть текущей отображенной памятью функции, а не MR размер

– Применяется ко всем структурам данных (IB Ядро, драйвер и оборудование)

• Окнная память (MW) – основной инструмент управления правами доступа.

Обновить доступ PTE/грязный бит на основе доступа к вводу-выводу

• Пакетная обработка недействительных страниц.

– Удаление страницы в свопе

– Процесс миграции NUMA

• Распространение ODP на физический машинный перевод клиентов для виртуализации.

Подвести итог

Производительность RDMA отличная

– но требует тщательного проектирования

• ODP упрощенный RDMA Программирование и развертывание

– Перенести управление памятью в операционную систему

– Удалить фиксированный лимит памяти

• ODP не жертвует производительностью или совместимостью.

• ODP исключает регистрацию в памяти

RDMA SoftRoCE(rxe) поддерживает ODP

Долженпластырьрядсуществовать SoftRoCE(rxe) Пейджинг реализован на драйвере по требованию Функция,Покадля,Должен Функциятолькосуществовать mlx5 Доступно в драйвере. Чтобы внести важное изменение, необходимо преобразовать тройной набор рабочих очередей (запрашивающие, отвечающие и завершающие), поскольку они должны иметь возможность спать, чтобы быть доступными. MR Ошибка страницы была вызвана ранее. По этому поводу было некоторое обсуждение, Боб. Pearson Для переоборудования выпущен комплект изпластырь [2]. Я обнаружил, что это вызывает мягкую блокировку и в 11 луна 18 Доложите ему в тот же день. Однако с тех пор никакого прогресса не произошло. с RFC Эта проблема препятствовала работе набора исправлений с момента его первого выпуска. ODP пластырь СЕТ из прогресса превысил три луна. Благодаря его изпластырю, установленному 13 индивидуальныйпластырькомпозиция,Слишком большой и сложный,Не удалось найти причину мягкой блокировки.,потому что此я准备了одининдивидуальныйпластырь,Преобразование может быть достигнуто без проблем. Я стараюсь минимизировать изменения,Чтобы он мог легко внести те изменения, которые изначально намеревался внести.

[Обзор]

Когда приложение регистрирует область памяти (MR) Когда, РДМА Драйверы обычно страница Воля существуют исправленные MR середина,так чтосуществовать RDMA Физический адрес никогда не меняется во время связи. Это требует MR Адаптация физической памяти неизбежно приведет к нехватке памяти. С другой стороны, пейджинг по требованию (ODP) Разрешить регистрацию приложения MR без закрепления страницы. Они выгружаются, когда они нужны драйверу, и выгружаются, когда операционная система их восстанавливает. Поэтому вы можете зарегистрировать его без адаптации большой физической памяти. MR, не занимая слишком много физической памяти.

[для чего добавить эту функцию? ]

Мы Fujitsu для RDMA внес свой вклад,надеяться Воля Чтоипостоянная памятьодин起использовать。постоянная В памяти может размещаться файловая система, позволяющая приложениям читать/записывать файлы напрямую, без использования страничного кэша. Это называется для FS-DAX(Прямой доступ к файловой системе)модель。житьсуществоватьодининдивидуальныйвопрос,Давать возможность DAX изв файловой системеиз Данные не могутиспользоватьпрограммное обеспечение RAID или другие аппаратные методы копировать. использование имеет высокоскоростное соединение из RDMA Копирование данных — лучший способ решить эту проблему. Однако существует известная проблема, которая не позволяет RDMA и FS-DAX из Совмещено сиспольз. Когда существуют на одном узле в одно и то же время имеют дело свернодокументиз RDMA При работе с обновлением метаданных файла может быть осуществлен несанкционированный доступ к памяти, игнорируя обновление метаданных. Это потому, что для RDMA Операция не проходит через кэш страниц, а напрямую обращается к данным. Была попытка[3] решить эту проблему, но в конечном итоге она была отклонена. Хотя универсального решения не существует, есть использование. ODP Функция решает эту проблему. Это позволяет драйверам ядра существовать дело с RDMA Обновите метаданные перед операцией. Мы улучшили rxe Постоянная скорость памятьизиспользовать。насверно rxe из Вклады включают в себя RDMA Atomic write[4] и RDMA Промывка[5]. С ними и ODP У разработчика Воля есть среда для создания итестирования. FS-DAX из RDMA программное обеспечение. дляиз, занимается разработкой библиотеки (librpma)[6]. Любой может использовать без какого-либо специального оборудования, просто обычный NIC Достаточно обычного компьютера, хотя производительность не так хороша, как аппаратная реализация.

[Соображения дизайна]

ODP толькосуществовать mlx5 доступен в, но Часто используемые функции и структуры данных представлены в ib_uverbs (infiniband/core). Интерфейс во многом зависит от HMM инфраструктуры [7], этот набор патчей использует как можно больше из них. Хотя mlx5 в то же время具有явныйи Скрытый ODP Функцияи предварительная выборка Функция,но此пластырьнабортолько实现了явный ODP функция. Когда ответчик и завершатель спят, потеря пакетов из-за переполнения очереди приема более вероятна. Здесь задействовано несколько очередей, но поскольку SoftRoCE использовать UDP, поэтому самое главное UDP буфер。размер Можетсуществовать net.core.rmem_default и net.core.rmem_max sysconfig настраивается в параметрах. Пользователям следует изменить эти значения в случае потери пакетов, но Ошибка страница обычно не длится достаточно долго, чтобы вызвать проблемы.

[Как работает ODP? ]

“struct ib_umem_odp” Используется для страниц администратора. Каждый из них существует ODP из MR зарегистрироваться когда для было создано из. Эта структура содержит массив (dma_list/pfn_list), используемый в качестве таблицы страниц драйвера. прямой доступ к памяти Адрес и PFN Поверхность страницы драйверов магазина существует. Они обновляются, когда существуют входные данные страницы и выходные данные страницы, оба используют ib_uverbs Общий интерфейс на уровне. Когда запрашивающая сторона, ответчик или исполнитель получает доступ MR обрабатывать RDMA Во время работы может произойти ввод страницы. Если они обнаружат, что страница, к которой осуществляется доступ, не существует в физической памяти или на странице не установлены необходимые разрешения, они выдадут ошибку. страницы, обеспечьте странице соответствующие разрешения, а также обновите поверхность страницы драйвера. После подтверждения того, что страницы сохранены, они выполняют доступ к памяти, например чтение, запись или атомарные операции. Вывод страницы инициируется перезапуском страницы или событиями файловой системы (например, положительное существование используется как MR обновление изфайлаизметаданных). создать включить ODP из MR , водитель зарегистрирует MMU Обратный вызов уведомителя. Когда ядро ​​выдает уведомление о недействительности страницы, запускается обратный вызов для отмены сопоставления. DMA адрес и обновляет таблицу страниц драйверов. После этого ядро ​​освобождает страницу.

[поддерживатьиздействовать]

RC Подключите все традиционные операции по утверждению. новый Atomic write[4] и RDMA Flush[5] Эксплуатация не содержит концентрации данного пластыря. Я Волясуществовать объединил эти наборы пластырей после их публикации. существовать UD Подключено,поддерживать Send、Recv и SRQ-Recv。

[Как протестировать ODP? ]

Для тестирования доступно всего несколько ресурсов. Рекомендуется rdma-core серединаиз pyverbs тествариант использованияи самый совершенный[8]. Кроме того, ibv_rc_pingpong Эту команду также можно использовать для тестирования. Обратите внимание, что вам, возможно, придется построить из исходной версии самый лучший вариант, потому что старая версия для некорректна. дело с ODP Функция. Дерево доступно по адресу URL получать:https://github.com/daimatsuda/linux/tree/odp_v3 [будущая работа] Моя следующая работа — использование. ODP Включить новые из Atomic write[4] и RDMA Flush[5] действовать。после,я Воля实现预取Функция。это позволяет приложениямиспользовать ibv_advise_mr(3) Запуск ошибок страниц для оптимизации производительности。один些现有программное обеспечение(нравиться librpma[6]) используйте эту функцию. Кроме того, я думаю, для нас Воля тоже может добавить Скрытый ODP Функция

MLX5 поддерживает ODP

нижепластырьнаборсуществовать RDMA стек и mlx5_ib Infiniband Пейджинг по требованию реализован в драйвере (ODP) поддерживать。

Как обычно работают ошибки страниц?

использоватьзакрепленная области памяти драйвер сопоставляет виртуальные адреса с адресами шины и передает эти адреса HCA Воля они и новые MR ассоциация。использовать ОДП, водитель сейчас существует может Воля MR Тег для не существует на некоторых страницах в изсуществовать. когда HCA При попытке выполнить операцию связи из доступа к памяти он замечает, что страница не существует, и драйвер выдает ошибку. страница инцидента. Кроме того, ХКА Выполните любые операции, необходимые транспортному протоколу для приостановки связи до тех пор, пока не доставка страниц столь же велика страница После прерывания драйвер сначала должен узнать ошибку появляется страница, на которой существует виртуальный адрес и на которой существует ключ памяти. иметь дело сотправлять/接收действовать时,Эта информация находится в рабочей очереди. Драйвер считывает необходимые элементы рабочей очереди,并解析它们以收набор Адрес и内жить密钥。верно于Что他 RDMA Операции, HCA 生成из事件только包含虚拟Адрес и rkey, поскольку для не включает элементы рабочей очереди. Понятно rkey, водитель может найти соответствующую область в своей структуре данных. памяти и вычислите фактическое количество страниц, необходимых для завершения операции. Затем его использовать get_user_pages Воля Требуемая страница извлекается обратно в память и получается dma карту и передать адрес ХКА. Наконец, водитель уведомляет HCA Это может продолжаться страницаизочередь Верно работать. get_user_pages Возврат на страницу немедленно открепляет ее, освобождая ссылку.

Как бороться с неудачами?

Патч добавляет инфраструктуру для RDMA Подписка на стекдля mmu Клиент уведомления [1]。Каждыйиндивидуальныйиспользовать ODP изпроцесс зарегистрирует Клиента уведомления。получать Страница недействительноуведомить будет ли Воля, что они будут переданы mlx5_ib Драйвер, драйвер будет использовать новое, не существующее обновление сопоставления. HCA。толькосуществовать刷新 HCA Программа не вернется до тех пор, пока страница не будет кэширована, что позволит ядру освободить страницу.

поддерживать Какие операции?

В настоящее время R.C. Соглашение только подтверждает отправку, получение и RDMA Операция записи, UD Протокол также поддерживает операции отправки. Мы надеемся, что Воля сможет осуществить верно другие переводы и операции и зподдержку.

пластырьSETиз СТРУКТУРА

Во-первых, патч применяется к roland/infiniband.git в дереве for-next Ветка с примененным подписанным патчем [2] также применил рефакторинг umem 以использовать Линейный SG поверхность [3] изпластырь。

пластырь 1-5:第один组пластырьдля IB Ошибка добавлена ​​в основной слой страницыподдерживать,позволятьзарегистрироваться MR без закрепления его страницы. В первый пластырь добавлен бит функции, параметры конфигурации и метод запроса функции подкачки из пользовательского пространства. Следующий издвух пластырей (2-3) верно ib_umem Тип претерпел некоторые необходимые изменения. пластырь 4 и 5 Добавлена ​​нумерация страниц соответственно.

пластырь 6-9: Следующая группа пластырей содержит верно mlx5 Драйвер из Некоторые мелкие исправления. пластырь 6-7 Исправлены две ошибки, которые могли повлиять на код нумерации страниц: пластырь. 8-9 Добавить код для сохранения недостающей информации о Воля существует mlx5 структуру, которая необходима для правильной работы кода пагинации.

пластырь 10-16:Эта группапластырьдля mlx5 Драйвер добавил небольшой размер из новой функции и встроил поддержку пейджинга. пластырь 10-11 верно UMR Механизм (mlx5 用于возобновлять设备Страницалапшакартографированиеизвнутренний механизм)Внесенные изменения。пластырь 12 для mlx5_core Добавлен модуль страницыиметь дело сизинфраструктураподдерживать。пластырь 13 для Функция страницы конфигурации устройства, пластырь 15 Добавлена ​​функция частичного обновления поверхности страницы устройства. Наконец, пластырь 16 Добавлены вспомогательные функции.,Используется для чтения информации из контекста драйвера и рабочей очереди пользовательского пространства.

пластырь 17-20: Четвертая часть пластырного эпизода наконец-то вышла. mlx5 Драйвер добавил пейджинговое подтверждение. пластырь 17 существовать mlx5_ib Инфраструктура добавлена ​​в работе от mlx5_core из Ошибка страницы。пластырь 18 Добавлена ​​обработка UD Отправить ошибку страницыи RC Отправить и получить ошибку страницыизкод。пластырь 19 Добавил правда автор RDMA Операции записи вызывают из Ошибку страницыизподдерживать,добавлен драйвер пластырь 20 для mlx5, неверная поддержка,позволять动态取消Страницалапшакартографирование

Анализ кода ODP

IBV_ACCESS_ON_DEMAND Бит флага ODP

rdma-core

Язык кода:javascript
копировать
rc_pingpong.c
...
pp_init_ctx
    if (use_odp)
        const uint32_t rc_caps_mask = IBV_ODP_SUPPORT_SEND | IBV_ODP_SUPPORT_RECV
        ibv_query_device_ex(ctx->context, NULL, &attrx)
        if (!(attrx.odp_caps.general_caps & IBV_ODP_SUPPORT) ||
        attrx.odp_caps.general_caps & IBV_ODP_SUPPORT_IMPLICIT
        access_flags |= IBV_ACCESS_ON_DEMAND

linux-kernel(ссылкаmlx5)

Язык кода:javascript
копировать
kernel, drivers/infiniband/hw/mlx5/odp.c
​
module_init(mlx5_ib_init);
    mlx5_ib_odp_init -> IB/mlx5:добавить в Скрытый MR поддерживать,добавить в Скрытый MR, охватывает все адресное пространство пользователя. МИСТЕР Достичь по 1GB прямой MR Композиция из косвенных KSM MR。Страницалапшаипрямой MR Зависит от ODP добавить/удалить в MR
    mlx5_imr_ksm_entries = BIT_ULL(get_order(TASK_SIZE) - MLX5_IMR_MTT_BITS)
​
ibv_reg_mr -> зарегистрироваться с отметкой ODP при наличии памяти
.reg_user_mr = mlx5_ib_reg_user_mr
    if (access_flags & IB_ACCESS_ON_DEMAND)
        return create_user_odp_mr(pd, start, length, iova, access_flags, udata)
            struct ib_umem_odp *odp
            if (!IS_ENABLED(CONFIG_INFINIBAND_ON_DEMAND_PAGING))
            mlx5r_odp_create_eq(dev, &dev->odp_pf_eq)
                INIT_WORK(&eq->work, mlx5_ib_eq_pf_action)
                    mempool_refill
                        mempool_free(mempool_alloc(pool, GFP_KERNEL), pool)
                    mlx5_ib_eq_pf_process
                eq->pool = mempool_create_kmalloc_pool(MLX5_IB_NUM_PF_DRAIN, sizeof(struct mlx5_pagefault))
                eq->wq = alloc_workqueue("mlx5_ib_page_fault", WQ_HIGHPRI | WQ_UNBOUND | WQ_MEM_RECLAIM, MLX5_NUM_CMD_EQE)
                eq->irq_nb.notifier_call = mlx5_ib_eq_pf_int
                    mlx5_ib_eq_pf_int -> net/mlx5:Волясередина断иметь дело с Программные изменения для звонков, связанных между собой, уведомить программы, множественные EQ могут существовать в последующих пластырях IRQ。EQ Воля Зарегистрироваться на формулу атомной цепи узнать программу,вместопрямойвызов IRQ иметь дело спрограмма。Нетиспользовать Linux Встроенный обмен IRQ, потому что для этого вызывающий абонент будет звонить free_irq() Ранее отключено IRQ и очистите ассоциацию. Этот пластырь - разлука IRQ и EQ Логика первого шага
                        mlx5_ib_eq_pf_process
                            INIT_WORK(&pfault->work, mlx5_ib_eqe_pf_action)
                                mlx5_ib_pfault
                                    mlx5_ib_page_fault_resume
                                        MLX5_SET(page_fault_resume_in, in, opcode, MLX5_CMD_OP_PAGE_FAULT_RESUME)
                eq->core = mlx5_eq_create_generic(dev->mdev, &param) -> net/mlx5:Воля IRQ запрос/выпуск EQ жизненный цикл отдельный, больше не существует EQ Запрос на создание IRQ,Скореесуществовать EQ поверхность Запросите перед созданием IRQ。Нет再существовать EQ Выпуск после уничтожения IRQ,Скореесуществовать eq поверхность Выпуск после уничтожения IRQ
                    create_async_eq(dev, eq, param)
                        struct mlx5_eq_table *eq_table
                        create_map_eq(dev, eq, param)
                            u8 log_eq_size = order_base_2(param->nent + MLX5_NUM_SPARE_EQE)
                            INIT_RADIX_TREE(&cq_table->tree, GFP_ATOMIC)
                            mlx5_frag_buf_alloc_node(dev, wq_get_byte_sz(log_eq_size, log_eq_stride), &eq->frag_buf, dev->priv.numa_node) -> net/mlx5e: реализовать фрагментированную рабочую очередь. (WQ), добавить новый тип из struct mlx5_frag_buf, используется для выделения буферов фрагментов вместо смежных буферов и создания очереди завершения. (CQ) используйте его, потому что они большие (Striding RQ в каждом CQ из Значение по умолчаниюдля 2MB)
                            mlx5_init_fbc
                            init_eq_buf
                            mlx5_irq_get_index
                            mlx5_fill_page_frag_array
                            MLX5_SET(create_eq_in, in, opcode, MLX5_CMD_OP_CREATE_EQ)
                            mlx5_cmd_exec(dev, in, inlen, out, sizeof(out))
                            mlx5_debug_eq_add(dev, eq)
                mlx5_eq_enable(dev->mdev, eq->core, &eq->irq_nb)
            if (!start && length == U64_MAX) -> start = 0 and max len
                mlx5_ib_alloc_implicit_mr(to_mpd(pd), access_flags)
                    ib_init_umem_odp
                        mmu_interval_notifier_insert -> Первыйзарегистрироваться, пройти еще раз hmm_range_fault наполнение, ссылка Управление гетерогенной памятью HMM: https://blog.csdn.net/Rong_Toa/article/details/117910321
            if (!mlx5r_umr_can_load_pas(dev, length))
            odp = ib_umem_odp_get(&dev->ib_dev, start, length, access_flags, &mlx5_mn_ops)
                ib_init_umem_odp(umem_odp, ops)
            mr = alloc_cacheable_mr(pd, &odp->umem, iova, access_flags)
                page_size = mlx5_umem_dmabuf_default_pgsz(umem, iova)
                or mlx5_umem_find_best_pgsz
                    ib_umem_find_best_pgsz
                rb_key.ats = mlx5_umem_needs_ats(dev, umem, access_flags)
                ent = mkey_cache_ent_from_rb_key(dev, rb_key) -> RDMA/mlx5: представлено mlx5r_cache_rb_key,отиспользовать mkey Переключите заказ на использование новой структуры для записи в кэше. RB Дерево из ключа. Ключ UMR Операция не может изменить все mkey свойство. использовать Этот ключ определяет записи кэша и поиск и создает кэш. mkey
                mr = reg_create(pd, umem, iova, access_flags, page_size, false) -> no cache
                    mr = kzalloc(sizeof(*mr), GFP_KERNEL)
                    mr->page_shift = order_base_2(page_size)
                    mlx5_ib_create_mkey(dev, &mr->mmkey, in, inlen)
                        mlx5_core_create_mkey
                            MLX5_SET(create_mkey_in, in, opcode, MLX5_CMD_OP_CREATE_MKEY)
                    set_mr_fields(dev, mr, umem->length, access_flags, iova)
                mr = _mlx5_mr_cache_alloc(dev, ent, access_flags)
                    if (!ent->mkeys_queue.ci)
                        create_cache_mkey(ent, &mr->mmkey.key)
                            mlx5_core_create_mkey -> Создать кэш
                    else
                        mr->mmkey.key = pop_mkey_locked(ent) -> Получить из кеша
                            last_page = list_last_entry(&ent->mkeys_queue.pages_list, struct mlx5_mkeys_page, list)
                            ent->mkeys_queue.ci--
                        queue_adjust_cache_locked
                set_mr_fields(dev, mr, umem->length, access_flags, iova)
            xa_init(&mr->implicit_children)
            mlx5r_store_odp_mkey(dev, &mr->mmkey) -> RDMA/mlx5: из ODP ясно в потоке sync_srcu(), из ODP ясно в потоке synchronize_srcu(),потому чтодляделатьдля dereg_mr Изчасти выяснилось, что это отнимает очень много времени. Например, выход из системы 10000 индивидуальный ODP MR,Каждыйиндивидуальный MR изразмердля 2M Большая страница, отнимает много времени 19.6 секунд, напротив, такое же количество выходов из системы ODP MR кропотливый 172 миллисекунда. Новинка из схемы блокировкииспользовать wait_event() механизм, который следует MR изиспользоватьсчитать,вместоиспользовать sync_srcu(). С этим изменением время, необходимое для вышеупомянутого теста для 95 миллисекунд, что даже быстрее, чем не- ODP Поток лучше. Как только ты полностью сдашься srcu использовать, вы должны использовать блокировку для защиты XA доступ. Поскольку дляиспользовать часть механизма, упомянутого выше, мы также можем очистить num_deferred_work Содержимое и изменения для FollowUser count
                xa_store(&dev->odp_mkeys, mlx5_base_mkey(mmkey->key), mmkey, GFP_KERNEL)
            mlx5_ib_init_odp_mr(mr)
                pagefault_real_mr(mr, to_ib_umem_odp(mr->umem), mr->umem->address, mr->umem->length, NULL, MLX5_PF_FLAGS_SNAPSHOT | MLX5_PF_FLAGS_ENABLE) -> RDMA/mlx5: из pagefault_mr середина分离Скрытыйиметь дело с,одининдивидуальныйрутинасуществоватьиметь дело с Скрытый父сорт时,前进到下одининдивидуальныйребенок MR Схема очень запутанная. Эта программа может существовать только дело с Скрытый父сорт时использовать,существоватьиметь дело с Нормальный MR 时Нет得触发。проходить Воля所有одининдивидуальный MR содержаниепрямой放入одининдивидуальныйобъединение функцийсуществовать Скрытый情况下循环вызов它来重新安排事物。简化新 pagefault_real_mr() из некоторых ошибокиметь дело с удалить ненужное из goto
                    ib_umem_odp_map_dma_and_lock -> DMA картографирование ODP MR серединаиз用户空间内жить并锁定它。Воля参数середина传递изобъемкартографирование到 DMA адрес。картографирование Страницалапшаиз DMA адрессуществовать umem_odp->dma_list Обновлено. После успеха ОДП МР Воля заблокирован,以让вызов者完成Что设备Страницаповерхностьвозобновлять。Возврат от успехакартографированиеиз Страницалапша数,失败时返回负错误код
                        current_seq = range.notifier_seq = mmu_interval_read_begin(&umem_odp->notifier)
                        hmm_range_fault(&range) -> 设备заполнение драйвера Серия виртуальных адресов
                        mmu_interval_read_retry
                        hmm_order = hmm_pfn_to_map_order(range.hmm_pfns[pfn_index])
                        ib_umem_odp_map_dma_single_page(umem_odp, dma_index, hmm_pfn_to_page(range.hmm_pfns[pfn_index]),access_mask)
                            *dma_addr = ib_dma_map_page(dev, page, 0, 1 << umem_odp->page_shift, DMA_BIDIRECTIONAL)
                                dma_map_page(dev->dma_device, page, offset, size, direction)
                    mlx5r_umr_update_xlt
                        mlx5r_umr_create_xlt
                            mlx5r_umr_alloc_xlt
                            dma = dma_map_single(ddev, xlt, sg->length, DMA_TO_DEVICE)
                        mlx5r_umr_set_update_xlt_ctrl_seg
                        mlx5r_umr_set_update_xlt_mkey_seg
                        mlx5r_umr_set_update_xlt_data_seg
                    return np << (page_shift - PAGE_SHIFT)
            return &mr->ibmr
​
const struct mmu_interval_notifier_ops mlx5_mn_ops = {
  .invalidate = mlx5_ib_invalidate_range,
};
​
​
mlx5_ib_eq_pf_process
    switch (eqe->sub_type)
    ...
    INIT_WORK(&pfault->work, mlx5_ib_eqe_pf_action)
    cc = mlx5_eq_update_cc(eq->core, ++cc)
    mlx5_eq_update_ci(eq->core, cc, 1)

Подвести итог

  • ODP требует общего проектирования программного и аппаратного обеспечения. иметь дело с好缺Страница异常/Неверный/состояниевосстанавливаться Жду логики
  • MLX5 использует mkey в сочетании с красно-черными деревьями для кэширования, а очередь событий EQ используется для асинхронной обработки логики, такой как ошибки страниц.
  • полагаться Ядро Поддержка API управления гетерогенной памятью Linux (HMM)

ссылка

существоватьSoftRoCEначальствоподдерживатьODP: https://lwn.net/Articles/918463/

MLX5 поддерживает ODP: https://www.spinics.net/lists/linux-rdma/msg18906.html#google_vignette

MLX5поддержка Скрытая запись подачи ODP: https://github.com/ssbandjl/linux/commit/81713d3788d2e6bc005f15ee1c59d0eb06050a6b

Nvidia RDMA оптимизирует доступ к памяти: https://docs.nvidia.com/networking/display/mlnxofedv492240/optimized+memory+access

ODP SSDСопутствующие документы(TeRM:использовать SSD Расширять RDMA Подключенная память): https://www.usenix.org/system/files/fast24-yang-zhe.pdf

OFA ODP (Сеть уровня пользователя из Пейджинг по требованию): https://openfabrics.org/images/eventpresos/workshops2013/2013_Workshop_Tues_0930_liss_odp.pdf

rdma-core Записи о предоставлении ODP, ibv_query_device_ex Отчет Пейджинг по требованию Функцияиз Функция。 Пластырь также добавил IBV_ACCESS_ON_DEMAND Флаг доступа для разрешения регистрации включить Пейджинг по требованиюизобласть памяти: https://patchwork.kernel.org/project/linux-rdma/patch/1441292199-8371-3-git-send-email-haggaie@mellanox.com/

Управление гетерогенной памятью ядра Linux-HMM: https://docs.kernel.org/translations/zh_CN/mm/hmm.html

Сяобин (ssbandjl)

блог: https://cloud.tencent.com/developer/user/5060293/articles | https://logread.cn | https://blog.csdn.net/ssbandjl | https://www.zhihu.com/people/ssbandjl/posts | https://chattoyou.cn

столбец ДПУ

https://cloud.tencent.com/developer/column/101987

Технические друзья: Добро пожаловатьверноDPU/SmartNIC/Удалить/Сеть,жить储加速/Интересуются такими технологиями, как изоляция безопасностииз Друзья присоединяйтесьТехнология ДПУКоммуникационная группа

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода