RoCE: различия между версиями
Bircoph (обсуждение | вклад) Нет описания правки |
Yaleks (обсуждение | вклад) Нет описания правки |
||
(не показано 7 промежуточных версий 1 участника) | |||
Строка 1: | Строка 1: | ||
В данной статье описывается настройка RoCE (RDMA over Converged Ethernet) для c7 и адаптеров ConnectX-3. Но основная последовательность действий в другой среде будет такой же, различия могут быть в именах пакетов и особенностях драйверов. | В данной статье описывается настройка RoCE (RDMA over Converged Ethernet) для [[c7]] и адаптеров ConnectX-3. Но основная последовательность действий в другой среде будет такой же, различия могут быть в именах пакетов и особенностях драйверов. | ||
= Подготовка = | = Подготовка = | ||
Базовая подготовка такая же, как для Infiniband и повторяет пункты 1-3([ | Базовая подготовка такая же, как для Infiniband и повторяет пункты 1-3([[Infiniband#.D0.A1.D0.BF.D0.B8.D1.81.D0.BE.D0.BA_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.BE.D0.B2_.D0.B4.D0.BB.D1.8F_.D1.83.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B8|1]], [[Infiniband#.D0.A0.D0.B0.D0.B7.D0.BC.D0.B5.D1.80_MTT_.D1.82.D0.B0.D0.B1.D0.BB.D0.B8.D1.86.D1.8B|2]], [[Infiniband#.D0.97.D0.B0.D0.B3.D1.80.D1.83.D0.B7.D0.BA.D0.B0_.D0.BC.D0.BE.D0.B4.D1.83.D0.BB.D0.B5.D0.B9_.D1.8F.D0.B4.D1.80.D0.B0|3]]) руководства по [[Infiniband]] . Некоторые модули, например, ib_ipoib можно не загружать, но большинство лучше оставить, чтоб работали все утилиты. | ||
= Настройка адаптера = | = Настройка адаптера = | ||
Строка 51: | Строка 51: | ||
</pre> | </pre> | ||
Подключенный и активированный порт должен иметь статус PORT_ACTIVE. | Подключенный и активированный порт должен иметь статус '''PORT_ACTIVE''' и link_layer: Ethernet. | ||
= Настройка IP сети = | = Настройка IP сети = | ||
Строка 61: | Строка 61: | ||
Имена интерфейсов могут отличаться, ip можно выбирать любые из допустимых диапазонов для внутренних сетей. | Имена интерфейсов могут отличаться, ip можно выбирать любые из допустимых диапазонов для внутренних сетей. | ||
Настройки сети можно по желанию сохранить с помощью [https://www.altlinux.org/Etcnet#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_Infiniband etcnet]. | Настройки сети можно по желанию сохранить с помощью [https://www.altlinux.org/Etcnet#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_Infiniband etcnet]. | ||
= Проверка работы RDMA = | |||
== Проверка отправки потока данных через RDMA == | |||
На первой машине (сервер): | |||
rping -s -a 192.168.21.1 -v | |||
На второй машине (клиент): | |||
rping -c -a 192.168.21.1 -v | |||
Будет большое число строк данных вида ротации строк: | |||
<pre> | |||
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 | |||
</pre> | |||
убивается по ctrl-c. | |||
Один и тот же ip выше — не ошибка, так и должно быть: для сервера — где слушать, для клиента — куда стучаться. | |||
== Тестирование RDMA CM == | |||
Тестирование RDMA Communication Manager: | |||
На первой машине (сервер): | |||
<pre> | |||
# ucmatose -c 10 -C 1000 -S 10000 | |||
cmatose: starting server | |||
initiating data transfers | |||
completing sends | |||
receiving data transfers | |||
data transfers complete | |||
cmatose: disconnecting | |||
disconnected | |||
test complete | |||
return status 0 | |||
</pre> | |||
На второй машине (клиент): | |||
<pre> | |||
# ucmatose -c 10 -C 1000 -S 10000 -s 192.168.21.1 | |||
cmatose: starting client | |||
cmatose: connecting | |||
receiving data transfers | |||
sending replies | |||
data transfers complete | |||
test complete | |||
return status 0 | |||
</pre> | |||
== Тестирование RDMA latency == | |||
Сервер: | |||
<pre> | |||
rdma_lat -c | |||
3452: Local address: LID 0000, QPN 000000, PSN 0xbaafb4 RKey 0x28010704 VAddr 0x0000000060d001 | |||
3452: Remote address: LID 0000, QPN 000000, PSN 0x52545e, RKey 0xf0010703 VAddr 0x0000000060d001 | |||
Conflicting CPU frequency values detected: 1201.429000 != 1200.199000 | |||
Latency typical: inf usec | |||
Latency best : inf usec | |||
Latency worst : inf usec | |||
</pre> | |||
Клиент: | |||
<pre> | |||
rdma_lat -c 192.168.21.1 | |||
11505: Local address: LID 0000, QPN 000000, PSN 0x52545e RKey 0xf0010703 VAddr 0x0000000060d001 | |||
11505: Remote address: LID 0000, QPN 000000, PSN 0xbaafb4, RKey 0x28010704 VAddr 0x0000000060d001 | |||
Conflicting CPU frequency values detected: 1199.085000 != 1200.117000 | |||
Latency typical: inf usec | |||
Latency best : inf usec | |||
Latency worst : inf usec | |||
</pre> | |||
На имеющемся оборудовании разные CPU, поэтому не удалось точно выровнять их частоту и провести тест до конца. Но важно обратить вниманием на опцию '''-c''': она указывает на необходимость использования RDMA CM, без него настройка QP (queue pair) на RoCE невозможна. | |||
== Тестирование базового клиент-серверного приложения == | |||
Сервер: | |||
<pre> | |||
rdma_server | |||
rdma_server: start | |||
rdma_server: end 0 | |||
</pre> | |||
Клиент: | |||
<pre> | |||
rdma_client -s 192.168.21.1 | |||
rdma_client: start | |||
rdma_client: end 0 | |||
</pre> | |||
= Ограничения RoCE = | |||
Важно понимать, что RoCE (RDMA over Converged Ethernet) — это не Infiniband поверх Ethernet, а RDMA поверх Ethernet и есть отличия в работе RoCE от классического RDMA поверх Infiniband. | |||
В частности, вся настройка QP (queue pair) должна выполняться только через CM (communication manager), иные способы работать не будет. Кроме того, не все возможности RDMA+IB поддерживаются в RoCE, в частности, нет поддержки APM (automatic path migration). | |||
Это следует учитывать при использовании RDMA-приложений, которые может понадобится перенастроить или переписать. | |||
Также следует понимать, что latency RoCE будет в несколько раз хуже latency IB при прочих равных условиях. | |||
= Настройка оборудования RoCE узлов = | |||
Применимы все [[Infiniband#.D0.9D.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0_.D0.BE.D0.B1.D0.BE.D1.80.D1.83.D0.B4.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_IB_.D1.83.D0.B7.D0.BB.D0.BE.D0.B2|рекомендации для Infiniband]]. | |||
[[Категория:Admin]] | [[Категория:Admin]] |
Текущая версия от 15:48, 26 июля 2018
В данной статье описывается настройка 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 и link_layer: Ethernet.
Настройка 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 выше — не ошибка, так и должно быть: для сервера — где слушать, для клиента — куда стучаться.
Тестирование RDMA CM
Тестирование RDMA Communication Manager:
На первой машине (сервер):
# ucmatose -c 10 -C 1000 -S 10000 cmatose: starting server initiating data transfers completing sends receiving data transfers data transfers complete cmatose: disconnecting disconnected test complete return status 0
На второй машине (клиент):
# ucmatose -c 10 -C 1000 -S 10000 -s 192.168.21.1 cmatose: starting client cmatose: connecting receiving data transfers sending replies data transfers complete test complete return status 0
Тестирование RDMA latency
Сервер:
rdma_lat -c 3452: Local address: LID 0000, QPN 000000, PSN 0xbaafb4 RKey 0x28010704 VAddr 0x0000000060d001 3452: Remote address: LID 0000, QPN 000000, PSN 0x52545e, RKey 0xf0010703 VAddr 0x0000000060d001 Conflicting CPU frequency values detected: 1201.429000 != 1200.199000 Latency typical: inf usec Latency best : inf usec Latency worst : inf usec
Клиент:
rdma_lat -c 192.168.21.1 11505: Local address: LID 0000, QPN 000000, PSN 0x52545e RKey 0xf0010703 VAddr 0x0000000060d001 11505: Remote address: LID 0000, QPN 000000, PSN 0xbaafb4, RKey 0x28010704 VAddr 0x0000000060d001 Conflicting CPU frequency values detected: 1199.085000 != 1200.117000 Latency typical: inf usec Latency best : inf usec Latency worst : inf usec
На имеющемся оборудовании разные CPU, поэтому не удалось точно выровнять их частоту и провести тест до конца. Но важно обратить вниманием на опцию -c: она указывает на необходимость использования RDMA CM, без него настройка QP (queue pair) на RoCE невозможна.
Тестирование базового клиент-серверного приложения
Сервер:
rdma_server rdma_server: start rdma_server: end 0
Клиент:
rdma_client -s 192.168.21.1 rdma_client: start rdma_client: end 0
Ограничения RoCE
Важно понимать, что RoCE (RDMA over Converged Ethernet) — это не Infiniband поверх Ethernet, а RDMA поверх Ethernet и есть отличия в работе RoCE от классического RDMA поверх Infiniband.
В частности, вся настройка QP (queue pair) должна выполняться только через CM (communication manager), иные способы работать не будет. Кроме того, не все возможности RDMA+IB поддерживаются в RoCE, в частности, нет поддержки APM (automatic path migration).
Это следует учитывать при использовании RDMA-приложений, которые может понадобится перенастроить или переписать.
Также следует понимать, что latency RoCE будет в несколько раз хуже latency IB при прочих равных условиях.
Настройка оборудования RoCE узлов
Применимы все рекомендации для Infiniband.