RoCE
В данной статье описывается настройка RoCE (RDMA over Converged Ethernet) для c7 и адаптеров ConnectX-3. Но основная последовательность действий в другой среде будет такой же, различия могут быть в именах пакетов и особенностях драйверов.
Подготовка
Базовая подготовка такая же, как для Infiniband и повторяет пункты 1-3([1][2][3]) руководства по Infiniband . Некоторые модули, например, ib_ipoib можно не загружать, но большинство лучше оставить, чтоб работали все утилиты.
Настройка адаптера
Для использования Converged Ethernet если карта VPI и может работать как в режиме ib, так и в режиме eth, может понадобится вручную переключить её в режим eth:
echo eth > /sys/class/infiniband/mlx4_0/device/driver/0000:81:00.0/mlx4_port1
PCI id устройства скорее всего будет другим, но он там должен быть один, всегда можно проверить по lspci. Портов может быть несколько, в режим eth нужно перевести все, что предполагается использовать перед выполнением дальнейших дествий. При использовании etcnet такие команды можно прописать в /etc/net/netup-pre.
Имя интерфейса можно получить из вывода ip link:
ip link | grep portid
в нашем случае это ens3 и ens3d1.
Поднять интерфейс можно стандартным:
ip link set ens3 up
Успешную конфигурацию интерфейса можно с помощью ibv_devinfo:
# ibv_devinfo hca_id: mlx4_0 transport: InfiniBand (0) fw_ver: 2.42.5000 node_guid: 248a:0703:0069:dfa0 sys_image_guid: 248a:0703:0069:dfa3 vendor_id: 0x02c9 vendor_part_id: 4103 hw_ver: 0x0 board_id: MT_1090111019 phys_port_cnt: 2 port: 1 state: PORT_ACTIVE (4) max_mtu: 4096 (5) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet port: 2 state: PORT_DOWN (1) max_mtu: 4096 (5) active_mtu: 1024 (3) sm_lid: 0 port_lid: 0 port_lmc: 0x00 link_layer: Ethernet
Подключенный и активированный порт должен иметь статус PORT_ACTIVE.
Настройка IP сети
Нужно настроить обычную IP сеть между eth-интерфейсами ConnectX-3 со своей подсетью: на первой машине:
ip addr add 192.168.21.1/24 dev enp131s0
и на второй:
ip addr add 192.168.21.2/24 dev ens3
Имена интерфейсов могут отличаться, ip можно выбирать любые из допустимых диапазонов для внутренних сетей. Настройки сети можно по желанию сохранить с помощью etcnet.
Проверка работы RDMA
Проверка отправки потока данных через RDMA
На первой машине (сервер):
rping -s -a 192.168.21.1 -v
На второй машине (клиент):
rping -c -a 192.168.21.1 -v
Будет большое число строк данных вида ротации строк:
ping data: rdma-ping-11278: [\]^_`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN ping data: rdma-ping-11279: \]^_`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO ping data: rdma-ping-11280: ]^_`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP ping data: rdma-ping-11281: ^_`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQ ping data: rdma-ping-11282: _`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQR
убивается по ctrl-c.
Один и тот же ip выше — не ошибка, так и должно быть: для сервера — где слушать, для клиента — куда стучаться.