RoCE: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
(не показано 9 промежуточных версий 1 участника)
Строка 1: Строка 1:
В данной статье описывается настройка RoCE (RDMA over Converged Ethernet) для c7 и адаптеров ConnectX-3. Но основная последовательность действий в другой среде будет такой же, различия могут быть в именах пакетов и особенностях драйверов.
В данной статье описывается настройка RoCE (RDMA over Converged Ethernet) для [[c7]] и адаптеров ConnectX-3. Но основная последовательность действий в другой среде будет такой же, различия могут быть в именах пакетов и особенностях драйверов.


= Подготовка =
= Подготовка =
Базовая подготовка такая же, как для Infiniband и повторяет пункты 1-3 руководства по [[Infiniband]]. Некоторые модули, например, ib_ipoib можно не загружать, но большинство лучше оставить, чтоб работали все утилиты.
Базовая подготовка такая же, как для 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 сети =
Нужно настроить обычную 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 можно выбирать любые из допустимых диапазонов для внутренних сетей.
Настройки сети можно по желанию сохранить с помощью [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.