Bug 41801 - [e2k] проблема настройки iSER/RoCE на Mellanox ConnectX-4 Lx
Summary: [e2k] проблема настройки iSER/RoCE на Mellanox ConnectX-4 Lx
Status: CLOSED FIXED
Alias: None
Product: Альт Сервер
Classification: Distributions
Component: Ошибки работы (show other bugs)
Version: 9.0
Hardware: e2k Linux
: P5 normal
Assignee: Michael Shigorin
QA Contact: qa-p8@altlinux.org
URL:
Keywords:
Depends on: 41955
Blocks:
  Show dependency tree
 
Reported: 2022-01-25 21:40 MSK by svmoskalen
Modified: 2023-06-14 13:19 MSK (History)
6 users (show)

See Also:


Attachments
rdma-core-e2k.patch (1.30 KB, patch)
2022-02-17 15:14 MSK, Michael Shigorin
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description svmoskalen 2022-01-25 21:40:25 MSK
Сетевая карта Mellanox MT27710 (ConnectX-4 Lx):
# ibstatus
"Infiniband device 'mlx5_0' port 1 status:
        default gid:     fe80:0000:0000:0000:063f:72ff:fed8:5ba0
        base lid:        0x0
        sm lid:          0x0
        state:           4: ACTIVE
        phys state:      5: LinkUp
        rate:            10 Gb/sec (1X QDR)
        link_layer:      Ethernet

Infiniband device 'mlx5_1' port 1 status:
        default gid:     fe80:0000:0000:0000:063f:72ff:fed8:5ba1
        base lid:        0x0
        sm lid:          0x0
        state:           1: DOWN
        phys state:      3: Disabled
        rate:            40 Gb/sec (4X QDR)
        link_layer:      Ethernet"
Следующая команда выдает пустой ответ
# ibv_devices
    device                 node GUID
    ------              ----------------
А ожидается что то вроде:
# ibv_devices
 device                 node GUID
    ------              ----------------
    mlx5_1              0c42a1030016a955
    mlx5_0              0c42a1030016a954
Настройка производилась по следующему сценарию:
https://www.altlinux.org/Infiniband
до этапа Загрузка модулей ядра включительно
в списке включенных модулей ядра не хватает модуля ib_ucm, его нет в дистрибутиве. 
Каким образом его установить?
Материнская плата на основе Elbrus 8C2
Alt Linux 9
Comment 1 Michael Shigorin 2022-01-26 17:02:26 MSK
(Ответ для svmoskalen на комментарий #0)
> в списке включенных модулей ядра не хватает модуля ib_ucm,
> его нет в дистрибутиве. 

Мы работаем в т.ч. с ConnectX-3/4, но как Ethernet, а не Infiniband-интерфейсами (сейчас под рукой и свича-то такого нет для проверки).

Модуль ib_ucm был удалён ещё из ядра Linux 5.3 (поправил вики):
http://kernelnewbies.org/Linux_5.3
http://git.kernel.org/linus/a1a8e4a85cf7daff8b26c7b8698442ef677b4f97

В Альт 9.0 для Эльбрус применяется ядро 4.9, в 9.2 -- 5.4; хорошо бы уточнить на всякий `uname -r` и/или версию дистрибутива, на которую оформлена эта бага.

В любом случае посмотрел и ib_ucm.ko в ядрах под e2k у нас был, но в 3.14.79-elbrus-8c-alt13.72.9 из p8_e2k; состав infiniband/core/ в 4.9 и 5.4 уже одинаковый.

Антон, Андрей, есть какие соображения по состоянию поддержки IB у нас сейчас?
Comment 2 Andrew Savchenko 2022-01-26 23:07:54 MSK
(In reply to Michael Shigorin from comment #1)
> Антон, Андрей, есть какие соображения по состоянию поддержки IB у нас сейчас?

Я не слежу за этим вопросом. Могу только сказать, что была серьёзная переработка фабрик и многое сейчас живёт в rdma-core. Возможно, на стороне ядра тоже были изменения.

Если очень нужно, могу заняться этим вопросом, но нужен стенд с оборудованием.
Comment 3 Andrew Savchenko 2022-01-26 23:11:23 MSK
В Эльбрусовых ядрах 5.4 все фичи по IB включены (кроме отладочной CONFIG_INFINIBAND_IPOIB_DEBUG_DATA, которая лупит по производительности даже будучи деактивированной).
Comment 4 Anton V. Boyarshinov 2022-01-27 09:01:06 MSK
> Антон, Андрей, есть какие соображения по состоянию поддержки IB у нас сейчас?

По идее всё должно быть хорошо, но в стендартный цикл тестирования наших ядер, насколько я знаю, проверка infinibend не входит, так что не знаю.
Comment 5 svmoskalen 2022-01-27 14:39:43 MSK
Скорее всего я чрезмерно конкретно вопрос задал, Infiniband не нужен, перефразирую:
Целевая задача такая: 
настроить следующую цепочку протоколов
FS -> Ethernet -> iSER -> Ethernet -> RoCE -> RAID Controller
с одного сервера на другой:
сервер1 Elbrus 8c2(AltLinux 9.0 MLX5) -> сервер2 Elbrus 8c(ElbrusLinux 6.0 MLX4 LSI Logic/Symbios Logic MegaRAID SAS-3)
Иду по инструкции https://www.altlinux.org/RoCE#Подготовка
в которой есть ссылка уже на страницу https://www.altlinux.org/Infiniband, про которую я писал ранее.
Базовые вопросы какие пакеты ставить?(не все команды далее по инструкции работают)
Какие модули ядра подключать?(С этим вроде бы уже разобрались)
Нужно ли переконфигурировать ядро?
Например в пункте 1: ядро, собранной с поддержкой нужных IB устройств (в нашем случаеmlx4_core, mlx4_ib)
mlx4_ib нет в настройках ядра, нужно ли его добавлять и переконфигурировать ядро
Да и для mlx5 в инструкции нужно уже предусмотреть вариант настройки.
Вторым шагом будет использование altLinux в качестве target iSER
В итоге хотелось бы получить обновленную рабочую инструкцию в стиле от А до Я такого решения.

P.S. возможно bug tracker не место для такого обсуждения, тогда просьба направить на правильный ресурс.
Comment 6 Andrew Savchenko 2022-01-27 15:13:19 MSK
(In reply to svmoskalen from comment #5)
> Скорее всего я чрезмерно конкретно вопрос задал, Infiniband не нужен,
> перефразирую:
> Целевая задача такая: 
> настроить следующую цепочку протоколов
> FS -> Ethernet -> iSER -> Ethernet -> RoCE -> RAID Controller
> с одного сервера на другой:
> сервер1 Elbrus 8c2(AltLinux 9.0 MLX5) -> сервер2 Elbrus 8c(ElbrusLinux 6.0
> MLX4 LSI Logic/Symbios Logic MegaRAID SAS-3)
> Иду по инструкции https://www.altlinux.org/RoCE#Подготовка
> в которой есть ссылка уже на страницу https://www.altlinux.org/Infiniband,
> про которую я писал ранее.
> Базовые вопросы какие пакеты ставить?(не все команды далее по инструкции
> работают)

Инструкция писалась для c7 и ConnextX-3. Общие принципы остались те же, конкретные команды могли измениться. Я не могу обновить пошаговую инструкцию без стенда.

> Какие модули ядра подключать?(С этим вроде бы уже разобрались)
> Нужно ли переконфигурировать ядро?

Думаю, что нет.

> Например в пункте 1: ядро, собранной с поддержкой нужных IB устройств (в
> нашем случаеmlx4_core, mlx4_ib)
> mlx4_ib нет в настройках ядра, нужно ли его добавлять и переконфигурировать
> ядро

Что за ядро у вас? Задавали же уже вопрос. Приведите вывод `uname -a`.
Для справки: в ядре 5.4.163-elbrus-* модуль mlx4-ib есть. В сильно старых ядрах не все карты mellanox поддерживались на Эльбрусе из-за ошибок сборки модулей.

> Да и для mlx5 в инструкции нужно уже предусмотреть вариант настройки.
> Вторым шагом будет использование altLinux в качестве target iSER
> В итоге хотелось бы получить обновленную рабочую инструкцию в стиле от А до
> Я такого решения.

Для этого нужен стенд и выделенное время (замечу, что я НЕ сотрудник техподдержки и у меня другие задачи; инструкцию по IB писал просто потому, что есть практический опыт работы с IB). В общих чертах поднятие iSER target не отличается от других дистрибутивов (в ядре поддержка есть, targetcli для Эльбрусов собран).
Comment 7 svmoskalen 2022-01-27 16:43:17 MSK
информацию о ядре сообщу чуть позже, в данный момент стенд мне не доступен
Comment 8 Michael Shigorin 2022-01-27 23:18:26 MSK
(Ответ для svmoskalen на комментарий #5)
> Целевая задача такая: 
Спасибо, что сформулировали -- порой до этого шага трудно добраться "назад".

> (не все команды далее по инструкции работают)
В таких случаях для ускорения разбора бывает полезно пошагово перечислить:
"делаю 1, 2, 3, дальше написано 4, а выходит IV": мы-то сможем воспроизвести, когда сделаем стенд с вами или с коллегами из Mellanox.

> Нужно ли переконфигурировать ядро?
Не стоит, но и впрямь надо понять его версию.  Из того, что наблюдали:
на 804 машине и 10GE с i82599ES под ядром 5.4-1.9 порой теряются пакеты;
под 5.4-2.12 интерфейс не работает вообще; под 5.4-2.20 работает отлично.

> Да и для mlx5 в инструкции нужно уже предусмотреть вариант настройки.
Кстати, Вы тоже так можете по результатам проверки :) (довольно многие инженеры участвуют в улучшении нашей вики -- точечно или целыми страницами -- чтобы затем иметь под рукой заведомо актуальную документацию для себя же)

> Вторым шагом будет использование altLinux в качестве target iSER
> В итоге хотелось бы получить обновленную рабочую инструкцию в стиле
> от А до Я такого решения.
Инструкциями всё-таки скорее поддержка занимается по соответствующим контрактам, ну или профильные интеграторы -- но как минимум бага на вики-страничку уже принята и частично исправлена, осталось добиться собственно работы.

> P.S. возможно bug tracker не место для такого обсуждения, тогда просьба
> направить на правильный ресурс.
Это через ваших закупщиков и наших продажников (переслал на всякий), а тут интерфейс "инженер-инженер".  Обычно эти механизмы друг друга дополняют.
Comment 9 svmoskalen 2022-02-15 13:16:19 MSK
Для решения описанной мной задачи нужен пакет tgt для архитектуры e2k(для x86 он есть)
в Эльбрус Linux он также присутствует
Есть возможность его добавить?
Comment 10 svmoskalen 2022-02-15 17:42:36 MSK
с tgt все получилось:
"Следующие дополнительные пакеты будут установлены:
  perl-Config-General scsitarget-utils"

Теперь не стартует сервис tgt с драйвером iser: 
Что из нижеперечисленного я делаю не правильно?
Делаю так(при чем в Elbrus Linux это работает):
добавляю конфиг:
#vim /etc/tgt/conf.d/test.conf
<target iqn.2022-01.com.example:yakhont.target01>
    driver iser
    direct-store /dev/sdb
    incominguser логин пароль
</target>

далее старт сервиса - неуспешный
Лог(sudo journalctl -r -u tgt):
-- Logs begin at Fri 2022-02-11 10:15:02 MSK, end at Tue 2022-02-15 17:34:59 MSK. --
фев 15 16:11:09 test1alt10 systemd[1]: Failed to start tgtd iSCSI target daemon.
фев 15 16:11:09 test1alt10 systemd[1]: tgt.service: Failed with result 'exit-code'.
фев 15 16:11:09 test1alt10 systemd[1]: tgt.service: Main process exited, code=killed, status=9/KILL
фев 15 16:11:09 test1alt10 systemd[1]: tgt.service: Killing process 7742 (tgtd) with signal SIGKILL.
фев 15 16:11:09 test1alt10 systemd[1]: tgt.service: State 'stop-sigterm' timed out. Killing.
фев 15 16:09:39 test1alt10 systemd[1]: tgt.service: Control process exited, code=exited, status=22/n/a
фев 15 16:09:39 test1alt10 tgt-admin[7746]: exited with code: 22.
фев 15 16:09:39 test1alt10 tgt-admin[7746]:         tgtadm -C 0 --lld iser --op new --mode target --tid 1 -T >
фев 15 16:09:39 test1alt10 tgt-admin[7746]: Command:
фев 15 16:09:39 test1alt10 tgt-admin[7751]: tgtadm: can't find the driver
фев 15 16:09:39 test1alt10 tgtd[7742]: tgtd: mtask_execute(496) driver iser is in state: error
фев 15 16:09:34 test1alt10 tgtd[7742]: tgtd: bs_init(393) use pthread notification
фев 15 16:09:34 test1alt10 tgtd[7742]: tgtd: work_timer_start(146) use timer_fd based scheduler
фев 15 16:09:34 test1alt10 tgtd[7742]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel module>
фев 15 16:09:34 test1alt10 systemd[1]: Starting tgtd iSCSI target daemon...
фев 15 16:01:26 test1alt10 systemd[1]: Failed to start tgtd iSCSI target daemon.
фев 15 16:01:26 test1alt10 systemd[1]: tgt.service: Failed with result 'exit-code'.
фев 15 16:01:26 test1alt10 systemd[1]: tgt.service: Main process exited, code=killed, status=9/KILL
фев 15 16:01:26 test1alt10 systemd[1]: tgt.service: Killing process 5759 (tgtd) with signal SIGKILL.
фев 15 16:01:26 test1alt10 systemd[1]: tgt.service: State 'stop-sigterm' timed out. Killing.
фев 15 15:59:56 test1alt10 systemd[1]: tgt.service: Control process exited, code=exited, status=22/n/a
фев 15 15:59:56 test1alt10 tgt-admin[6087]: exited with code: 22.
фев 15 15:59:56 test1alt10 tgt-admin[6087]:         tgtadm -C 0 --lld iser --op new --mode target --tid 1 -T >
фев 15 15:59:56 test1alt10 tgt-admin[6087]: Command:
фев 15 15:59:56 test1alt10 tgt-admin[6193]: tgtadm: can't find the driver
фев 15 15:59:56 test1alt10 tgtd[5759]: tgtd: mtask_execute(496) driver iser is in state: error
фев 15 15:59:51 test1alt10 tgtd[5759]: tgtd: bs_init(393) use pthread notification
фев 15 15:59:51 test1alt10 tgtd[5759]: tgtd: work_timer_start(146) use timer_fd based scheduler
фев 15 15:59:50 test1alt10 tgtd[5759]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel module>
фев 15 15:59:48 test1alt10 systemd[1]: Starting tgtd iSCSI target daemon...
-- Reboot --


список загруженных модулей ядра, не меньше чем в Elbrus Linux
# lsmod | grep '\(ib_\|rdma\|mlx\|scsi\|iser\)'
ВК1:
mlx5_ib               802816  0
mlx5_core            2703360  1 mlx5_ib
tls                   176128  1 mlx5_core
mlxfw                  49152  1 mlx5_core
rdma_ucm               69632  0
ib_uverbs             315392  2 rdma_ucm,mlx5_ib
iscsi_tcp              36864  0
libiscsi_tcp           49152  1 iscsi_tcp
ib_umad                61440  0
ib_iser               106496  0
libiscsi              147456  3 libiscsi_tcp,iscsi_tcp,ib_iser
scsi_transport_iscsi   167936  4 libiscsi_tcp,iscsi_tcp,ib_iser,libiscsi
rdma_cm               167936  2 ib_iser,rdma_ucm
configfs              110592  2 rdma_cm
iw_cm                 102400  1 rdma_cm
ib_cm                 212992  1 rdma_cm
ib_core               794624  8 rdma_cm,iw_cm,ib_iser,ib_umad,rdma_ucm,ib_uverbs,mlx5_ib,ib_cm
ipv6                 1527808  54 rdma_cm,ib_core

Из того что заметил:
нет пакета libmlx5/libmlx4 - в отличие от Elbrus Linux
Comment 11 svmoskalen 2022-02-15 18:13:34 MSK
P.S если указать драйвер iscsi - сервис стартует нормально
Comment 12 svmoskalen 2022-02-15 18:28:35 MSK
Прочитал здесь: https://github.com/fujita/tgt/blob/master/doc/README.iser

To run iser, you'lll need the binary form of these libraries,
libibverbs.so and librdmacm.so along with device specific user
space library such as libmlx4 for Mellanox ConnectX HCAs.

в моем случае это libmlx5 а не libmlx4.
А ее нет, банальное копирование этой библиотеки из Elbrus Linux не спасает.
Comment 13 Michael Shigorin 2022-02-15 18:53:41 MSK
(Ответ для svmoskalen на комментарий #10)
> с tgt все получилось:
В смысле достаточно scsitarget-utils?

> Теперь не стартует сервис tgt с драйвером iser: 
> Что из нижеперечисленного я делаю не правильно?
Не в курсе, поскольку не сталкивался с iSCSI или вообще, или давно.

Валера, там часом нет чего очевидного тебе?

> Из того что заметил:
> нет пакета libmlx5/libmlx4 - в отличие от Elbrus Linux

Посмотрел -- на x86 входит в собранные из rdma-core бинарные пакеты
(PS re comment 12 -- там же и libmlx5):

contents_index.x86_64:/usr/lib64/libmlx4.so     rdma-core-devel
contents_index.x86_64:/usr/lib64/libmlx4.so.1   libibverbs
contents_index.x86_64:/usr/lib64/libmlx4.so.1.0.38.0    libibverbs

В версии 28, которая сейчас в p10_e2k, их там ещё не было.

В версии 34 уже появились, но от предшествующих ей не получалось малой кровью оторвать хотелку pandoc (это haskell, который на e2k уже одним человеком забустраплен, но нигде ещё не собран штатным порядком).
Попытаемся забороть обновку, раз такое дело.
Comment 14 Michael Shigorin 2022-02-15 19:04:28 MSK
Валера, в comment 10 часом нет чего очевидного тебе?
Comment 15 Michael Shigorin 2022-02-17 12:26:59 MSK
(Ответ для Michael Shigorin на комментарий #13)
> > нет пакета libmlx5/libmlx4 - в отличие от Elbrus Linux
> contents_index.x86_64:/usr/lib64/libmlx4.so.1   libibverbs
Дело не в версии, а в util/udma_barrier.h; смотрим.
Comment 16 Michael Shigorin 2022-02-17 15:14:15 MSK
Created attachment 10314 [details]
rdma-core-e2k.patch

Илья сделал следующий патч для rdma-utils 38.0:
http://git.altlinux.org/gears/r/rdma-core.git?p=rdma-core.git;a=commitdiff;h=1c714832512108e90614088aa678d00acfdedc69

Надо сверить с тем, что сделали в МЦСТ для сборки этих providers; запросил.
Comment 17 Michael Shigorin 2023-06-14 13:19:13 MSK
В bug 46468 comment 0 сообщают, что эта проблема решена.