ODP: пейджинг по требованию
HMM: управление гетерогенной памятью
Явный/неявный ODP
Предварительная выборка 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)
– Обработка сбоя страницы аппаратного обеспечения.
картина 1, мы показали ODP MR из RNIC таблицу страниц и сравнить ее с CPU Поверхность страницы для сравнения. Действительные виртуальные страницы сопоставляются со страницами поверхности физических страниц. Недопустимые виртуальные страницы не будут сопоставлены. v5 существовать CPU Страницаповерхность Умеренно эффективен,носуществовать RNIC Недопустимо в таблице страниц
ODP MR с фиксированным MR В отличие от страницы Воля не существует фиксированной физической памяти, RNIC Таблица страниц сопоставляет некоторые виртуальные страницы с физическими страницами (которые мы называем действительными виртуальными страницами), а остальные страницы остаются несопоставленными, то есть недействительными виртуальными страницами. Поскольку страница больше не фиксируется, ОС Ядро может обмениваться иммигрировать страницы. Приложения могут использовать объем памяти, превышающий физическую. МИСТЕР. Поскольку сопоставление виртуального и физического может измениться, процессор и RNIC Страницаповерхностьпокартинапоказаноизтрииндивидуальныйпроцесссинхронный。
Используется для предварительной загрузки страниц из новых глаголов (глаголов)
• Цель
– Разогрейте новое отображение памяти.
– Оптимизация протокола знакомств 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 исключает регистрацию в памяти
Долженпластырьрядсуществовать 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 Функция
нижепластырьнаборсуществовать 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, неверная поддержка,позволять动态取消Страницалапшакартографирование
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)
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, ¶m) -> 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)
существовать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
блог: 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/Удалить/Сеть,жить储加速/Интересуются такими технологиями, как изоляция безопасностииз Друзья присоединяйтесьТехнология ДПУКоммуникационная группа