Я только начал знакомиться с Infiniband, и я хочу понять методы, которые вы можете использовать для обращения к узлам InfinBand.
На основе кода приведен пример из: RDMA читать и писать с глаголами IB
Я могу адресовать отдельные узлы по IP или имени хоста, используя IPoIB.
Другой способ — использовать адрес GUID порта напрямую. Но, похоже, вам придется их искать, и это больше похоже на адресацию Ethernet для Mac.
Затем то, что называется LID-адресом, 16-битным локальным адресом, назначенным диспетчером структуры. Как использовать и определить во время выполнения LID-адрес? например, я запускаю ibaddr и получаю GID fe80 :: 1a: 4bff: ff0c: 34e5 начало LID 0x6 конец 0x6
По сути, если вы не используете IPoIB, как вы конвертируете имена хостов в адреса или тому подобное? Есть ли файл hosts или какой-то эквивалент?
Существует основное различие между различными методами адресации, которые вы перечисляете:
Когда пакет «внедряется» в матрицу IB, он маршрутизируется только по LID, который является частью заголовка локальной маршрутизации пакета. LID — это локальный идентификатор, 16 бит, назначенный OpenSM (есть также случай GID и заголовок глобальной маршрутизации, но давайте оставим этот случай в стороне — это не облегчит объяснение, и вам это явно не нужно точка).
Это означает, что если вы пишете свое приложение, используя чистые глаголы IB, вам нужно будет обращаться к конечным точкам с помощью LID.
Вы можете получить LID локального порта с помощью ibv_query_port () — это часть полей атрибута порта.
Но вам не нужно делать всю грязную работу самостоятельно — вы можете использовать библиотеки абстракций, такие как librdmacm (RDMA Connection Manager), чтобы создать соединение между конечными точками (и под «конечными точками» я имею в виду RC QP), а затем использовать чистые глаголы для на самом деле отправлять / получать ваши данные.
По сути, если вы не используете IPoIB, как вы конвертируете имена хостов в
адреса или похожие? Есть ли файл hosts или какой-то эквивалент?
Вы не можете, и нет 🙁
Если вы пройдете через предыдущий пост в том блоге, на который вы ссылаетесь, вы видите, что вам нужно:
Ключевой пункт здесь — «вне группы».
Например, MPI обменивается всеми этими адресами по SSH (который, кстати, также может работать поверх IPoIB), и как только эта информация обменивается и все QP соединены, данные начинают передаваться через эти RC QP.
Других решений пока нет …