У меня есть 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 принимается решение о том, какой порт следует использовать для доступа к этому LID.
Соответствующий код: https://github.com/linux-rdma/opensm/blob/844ab3b7edaad983449b5d3a4a773088b8daa299/opensm/osm_ucast_mgr.c#L201