. У меня есть 10 серверов с двумя процессорами каждый и одна сетевая карта Mellanox 100G Infiniband на каждый процессор. Каждая сетевая карта подключена к одному 36-портовому коммутатору Mellanox 100G IB.
Мое приложение RDMA работает как один процесс на каждом узле NUMA и привязывается к локальной сетевой карте, чтобы избежать межпроцессорного трафика. Каждый узел/процесс должен подключаться к каждому другому узлу, используя режим RC.
Проблема, с которой я столкнулся, заключается в том, что маршрутизация OpenSM по умолчанию вынуждает меня использовать определенную сетевую карту для достижения определенного целевого узла. Поэтому мне пришлось бы использовать обе сетевые карты с обоих узлов NUMA для доступа ко всем остальным узлам. Это означает, что мне также понадобятся два PD, и мне придется дважды регистрировать всю память.
Есть ли способ разрешить одной сетевой карте подключаться к любой другой сетевой карте/порту в сети?
По сути, я хотел бы заставить OpenSM думать, что каждая сетевая карта находится на своем собственном сервере, т.е. делая вид, что трафик QPI невозможен.
См.: https://docs.mellanox.com/display/MLNXOFEDv461000/OpenSM
Когда матрицы MinHop существуют, каждый коммутатор посещается, и для каждого целевого LID принимается решение о том, какой порт должен быть используется, чтобы добраться до этой крышки.
Соответствующий код: https://github.com/linux-rdma/opensm/blob/844ab3b7edaad983449b5d3a4a773088b8daa299/opensm/osm_ucast_mgr.c#L201
https://community.mellanox.com/s/question/0D51T00006RVtlU/rdmacm-connection-setup-issues
К сведению, проблема была в значительной степени решена путем обеспечения работы службы ibacm (Infiniband Assistant Communication Manager)на всех серверах.
Запуск sudo ibacm
на всех серверах решил проблему, не спрашивайте почему...