Существует основное различие между различными методами адресации, которые вы перечисляете:
- Обращение с чистыми глаголами IB
- Адресация с некоторым уровнем абстракции
Когда пакет «вводится» в структуру IB, он маршрутизируется только по LID, который является частью заголовка локальной маршрутизации пакета. LID — это Local ID, 16 бит, назначенный OpenSM (есть еще случай с GID и Global Routing Header, но давайте оставим этот случай в стороне — это не облегчит объяснение, и вам, очевидно, это не нужно на данном этапе). точка).
Это означает, что если вы пишете свое приложение с использованием чистых глаголов IB, вам нужно будет обращаться к конечным точкам по LID. Вы можете получить LID локального порта с помощью ibv_query_port() — это часть полей атрибутов порта.
Но вам не нужно делать всю грязную работу самостоятельно — вы можете использовать библиотеки абстракций, такие как librdmacm (менеджер соединений RDMA), для создания соединения между конечными точками (и под «конечными точками» я подразумеваю QP RC), а затем использовать чистые глаголы для на самом деле отправлять/получать ваши данные.
По сути, если вы не используете IPoIB, как вы конвертируете имена хостов в адреса или что-то подобное? Есть ли файл hosts или что-то подобное?
Вы не можете, и нет :( Если вы пройдете через предыдущий пост в этом блоге, на который вы ссылались, вы видите, что вам необходимо:
- Определите адрес пары очереди.
- Сообщите адрес другому узлу (через какой-то внеполосный механизм).
Ключевым элементом здесь является «вне диапазона». Например, MPI обменивается всеми этими адресами через SSH (который, кстати, также может работать поверх IPoIB), и после обмена этой информацией и подключения всех QP данные начинают передаваться через эти QP RC.
person
kliteyn
schedule
08.12.2012