Ключ раздела RDMA (P_key) ключ раздела
Ключ раздела RDMA (P_key) ключ раздела

Иногда в сети InfiniBand Fabric (т. е. наборе конечных узлов, физически подключенных к коммутаторам и маршрутизаторам с помощью кабелей) необходимо обеспечить изоляцию между конкретными узлами и создать «виртуальную фабрику», с которой могут взаимодействовать только они. В Ethernet это называется виртуальной локальной сетью (VLAN), которая определяет широковещательный домен. Однако InfiniBand не поддерживает широковещательные рассылки, поэтому обеспечивает лишь виртуальную изоляцию. Это называется разделением. И это немного мощнее, чем VLAN

Разделы представляются (и реализуются) с помощью ключа раздела (P_Key), который представляет собой 16-битное значение, состоящее из двух частей:

  • старший бит — бит членства (членство bit), Определите уровни членства
    • 0 означает ограниченное членство (ограниченное)
    • 1 Указывает на полное членство
  • Младшие 15 бит являются ключом к определению значения раздела.

Взаимодействовать могут только QP, настроенные для нахождения в одном разделе, и по крайней мере один из QP должен быть полноправным членом раздела. Мы обсудим это подробно ниже

Зонирование обеспечивает изоляцию между фабриками InfiniBand и не зависит от границ подсети.

Таблица P_Key таблица ключей раздела

Таблица P_Key — это таблица P_Key, которая существует в каждом порту конечного узла. Размер таблицы является атрибутом порта и его можно найти в port_attr.pkey_tbl_len. Эта таблица настраивается диспетчером разделов (PM), который обычно является частью диспетчера подсети (SM). В таблице имеется по крайней мере один действительный P_Key (P_Key, часть ключа которого (младшие 15 бит) не равна нулю). P_Key по умолчанию равен 0xFFFF.

Таблица P_Key может содержать несколько значений, то есть быть членом нескольких разделов, в некоторых из которых она может быть полным членом, а в некоторых — частичным членом. Он может даже быть полным и частичным членом одного и того же раздела.

Каждый QP настроен с использованием индекса в таблице P_Key. Вызов ibv_modify_qp() во время установления соединения может установить индекс в таблице P_Key порта, связанного с QP. Значения в таблице P_Key не постоянны, они могут меняться, поэтому приложение должно быть к этому готово.

Отправить P_Key в очередь

Публикация SR в QP инициирует отправку пакета. Каждый пакет несет значение P_Key. При отправке пакета данных этот QP проверит P_Key сообщения.

Получить P_Key в очереди

Значение P_Key любого входящего пакета будет сравниваться со значением P_Key, настроенным в QP получателя. Будут проведены следующие проверки:

  • Проверяет, равны ли ключевые части двух P_Key, т. е. они оба являются членами одного и того же раздела.
  • Проверьте их, хотя бы одно значение P_Key является полноправным членом.

Если хотя бы одна из вышеперечисленных проверок не пройдена, пакет будет считаться нарушением P_Key и пакет будет автоматически отброшен. Если устройство поддерживает его (атрибут IBV_DEVICE_BAD_PKEY_CNTR, установленный в dev_cap.device_cap_flags), счетчик плохих ключей раздела port_attr.bad_pkey_cntr будет увеличивать. Но статус QP получателя не изменится

Важны значения P_Key, а не их положение в таблице P_Key. Определенное значение P_Key может быть найдено по другому индексу на другом порту в подсети.

Как видно из приведенного выше теста, участники с ограниченной ответственностью не могут принимать трафик от других участников с ограниченной ответственностью, и связь разрешена между всеми другими комбинациями типов участников, т. е. хотя бы одна сторона должна быть полноправным участником.

Например, каждая из следующих пар очередей A, B, C и D связана с P_Key.

  • QPA is associated with the P_Key value 0x8001(1000000000000001)
  • QPB is associated with the P_Key value 0x0001(000000000000001)
  • QPC is associated with the P_Key value 0x0001(000000000000001)
  • QPD is associated with the P_Key value 0x8002(1000000000000010)

QPA и QPB могут взаимодействовать (поскольку они оба являются членами раздела 0x0001, а QPA является полноправным членом)

QPA и QPC могут взаимодействовать (поскольку они оба являются членами раздела 0x0001, а QPA является полноправным членом)

QPB и QPC не могут обмениваться данными (поскольку они оба являются членами раздела 0x0001, но не являются полноправными членами).

QPD в примере и любой другой QP не могут взаимодействовать (поскольку они не являются членами одного и того же раздела).

Значение ключа раздела P_Key

P_Key по умолчанию — это специальное значение (0xFFFF), которое обеспечивает полное членство в разделе по умолчанию.

Неверный ключ раздела: это специальное значение, указывающее, что запись таблицы ключей раздела не содержит допустимого ключа.

Можно ли кэшировать ключи разделов?

Таблица P_Key настраивается SM, и SM может ее изменить, но в большинстве случаев не может. Если вы кэшируете значения таблицы P_Key, вам следует обновить значения при возникновении события IBV_EVENT_PKEY_CHANGE.

Автор: Дотан Барак, 30 апреля 2014 г., 13 октября 2018 г.

Другие связанные темы

ibv_query_pkey()July 27, 2012In "General"

Working with IPoIBApril 21, 2015In "General"

IP over InfiniBand (IPoIB) architectureFebruary 16, 2015In "General"

ссылка

RDMAmojo Ключ раздела: https://www.rdmamojo.com/2014/04/30/partition-key-p_key/

Ключ запроса раздела: https://www.rdmamojo.com/2012/07/27/ibv_query_pkey/

Сяобин (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://cloud.tencent.com/developer/column/101987

Технические переговоры Сяобина (сериал)

https://cloud.tencent.com/developer/user/5060293/video

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose