Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    [TUTORIAL] Proxmox 8 Mellanox Infiniband и SR-IOV

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    [TUTORIAL] Proxmox 8 Mellanox Infiniband и SR-IOV, Proxmox Виртуальная Среда
     
    jamesthetechie
    Guest
    #1
    0
    30.04.2024 22:00:00
    Вот как мне удалось заставить Proxmox работать с Infiniband и SR-IOV. В качестве железа использовался коммутатор Mellanox (sx6036) и сетевая карта Mellanox Cx-4 100Gbps EDR с двумя (или одним) портами. Убедитесь, что у вас стоит последняя версия прошивки. НАСКОЛЬКО МНЕ ИЗВЕСТНО, ЭТО НЕ РАБОТАЕТ С OPENSM И ДЛЯ SR-IOV НУЖЕН КОММУТАТОР MELLANOX.

    На вашем коммутаторе включите SM и виртуализацию, затем перезапустите службу SM, включив или выключив её, либо перезагрузив коммутатор:
    - ib sm enable  
    - ib sm virt enable  
    - configuration write  

    Когда это настроено, нужно включить IOMMU и активировать SR-IOV на железе. Этот процесс зависит от конкретного оборудования, поэтому он не рассматривается в этом руководстве. Конфигурацию IOMMU в Proxmox можно сделать, следуя инструкции: https://pve.proxmox.com/wiki/PCI(e)_Passthrough

    После этого установите следующие пакеты:
    apt install -y infiniband-diags ibutils rdma-core rdmacm-utils mstflint

    Проверьте линк, узлы и запустите диагностику:
    ibstat — ОБРАТИТЕ ВНИМАНИЕ НА НАЗВАНИЕ HCA  
    ibnodes  
    ibdiagnet  

    Определяем шину карты Mellanox и делаем запрос:
    lspci | grep -i mellanox  
    mstflint -d <здесь bus id>

    Включаем SR-IOV и 4 виртуальных функции (или сколько вам нужно):
    mstconfig -d <здесь bus id> set SRIOV_EN=1 NUM_OF_VFS=4

    Дальше — спасибо Jose-d:  
    vim /etc/systemd/system/mellanox_initvf.service  
    Вставьте следующее, ОБЯЗАТЕЛЬНО ОБНОВИТЕ HCA:

    [Unit]
    After=network.target  

    [Service]
    Type=oneshot  
    # примечание: меняйте под своё железо:  
    ExecStart=/bin/bash -c "/usr/bin/echo 4 > /sys/class/infiniband/<HCA ЗДЕСЬ>/device/sriov_numvfs"  
    ExecStart=/usr/local/bin/initIbGuids.sh  
    StandardOutput=journal  
    TimeoutStartSec=60  
    RestartSec=60  

    [Install]
    WantedBy=multi-user.target  

    Теперь включаем сервис:  
    systemctl enable mellanox_initvf.service  

    Создаём скрипт:  
    vim /usr/local/bin/initIbGuids.sh  
    Вставьте следующее:

    #!/bin/bash

    first_dev=$(ibstat --list_of_cas | head -n 1)

    node_guid=$(ibstat ${first_dev} | grep "Node GUID" | cut -d ':' -f 2 | xargs | cut -d 'x' -f 2)  
    port_guid=$(ibstat ${first_dev} | grep "Port GUID" | cut -d ':' -f 2 | xargs | cut -d 'x' -f 2)

    echo "first dev: $first_dev"  
    echo "node guid: $node_guid"  
    echo "port_guid: $port_guid"

    if ip link show $first_dev &> /dev/null ; then  
     for vf in {0..3}; do  
       vf_guid=$(echo "${port_guid::-5}cafe$((vf+1))" | sed 's/..\B/&:/g')  
       echo "vf_guid для vf $vf — $vf_guid"  
       ip link set dev ${first_dev} vf $vf port_guid ${vf_guid}  
       ip link set dev ${first_dev} vf $vf node_guid ${vf_guid}  
       ip link set dev ${first_dev} vf $vf state auto  
     done  
    fi  

    Не забудьте выставить права для файла:  
    chmod 777 /usr/local/bin/initIbGuids.sh

    Теперь SR-IOV настроен и готов к подключению к виртуальной машине.  

    Из ВМ мы видим полный линк на устройстве SR-IOV, и оно находится в активном состоянии.
     
     
     
    mahagen
    Guest
    #2
    0
    28.05.2024 05:18:00
    Спасибо, у меня это работает с Cx6 200gbps, пара замечаний:  
    - Работает с opensm, сервис нужно лишь перезапустить.  
    - mstconfig -d <bus id here> set SRIOV_EN=1 NUM_OF_VFS=4 (SRIOV_EN=1 не принимается).  

    Кстати, зачем ты создаёшь этот сервис, разве не хватило бы просто добавить echo в ibs4 up в interfaces?
     
     
     
    jamesthetechie
    Guest
    #3
    0
    28.05.2024 05:57:00
    Рад, что служба opensm работает, я не тестировал её раньше, так как у меня уже есть коммутатор, да и в интернете не мог найти подтверждения, работает она или нет. Проверил — всё работает: . Я использую службу, а не запускаю её при поднятии интерфейса, потому что с таким способом были проблемы со стабильностью — примерно каждый четвертый перезапуск просто не срабатывал. А когда сделал её службой, всё всегда работает без сбоев.
     
     
     
    mahagen
    Guest
    #4
    0
    28.05.2024 19:13:00
    Отмена, должно быть, опечатка, SRIOV_EN=1 — всё нормально.....
     
     
     
    Sphinks
    Guest
    #5
    0
    10.03.2025 19:16:00
    Для тех, кому интересно, вот пример скрипта, который делает всё сразу. Я сделал его более гибким, чтобы вы могли задать нужное количество VFs.

    1. Отредактируйте переменную IB_DEVICE_NUM_VFS="8", просто замените число на желаемое.
    2. Запустите скрипт.
    3. Перезагрузитесь.
    4. Запустите скрипт снова.
    5. Всё, готово.

    Причина, почему скрипт нужно запускать дважды — необходимость применения VFs карты Mellanox после перезагрузки перед запуском второй части скрипта. Наслаждайтесь.

    Bash:  
    #!/bin/bash  
    #  
    # Простой скрипт для настройки VFS на сетевой карте Mellanox InfiniBand  

    # Переменная для настройки  
    # Сколько VFS вы хотите, просто измените число.  
    IB_DEVICE_NUM_VFS="8"  

    ################  
    # Скрипт ниже #  
    ################  

    # Установка пакетов IB  
    install_ib_packages() {  
     apt install infiniband-diags ibutils rdma-core rdmacm-utils mstflint  
    }  

    # Включение SRIOV и настройка VFS в прошивке  
    set_srvio_vfs() {  
     # PCI-адрес IB устройства  
     IB_DEVICE_PCI=$(lspci | grep -i mellanox | grep -iv virtual | awk {'print $1'})  

     if mstconfig -d $IB_DEVICE_PCI q SRIOV_EN | grep -i true && [[ $(mstconfig -d $IB_DEVICE_PCI q NUM_OF_VFS | grep NUM_OF_VFS | awk {'print $2'}) == $IB_DEVICE_NUM_VFS ]];
     then  
       continue  
     else  
       mstconfig -d $IB_DEVICE_PCI set SRIOV_EN=1 NUM_OF_VFS=$IB_DEVICE_NUM_VFS  
       echo "Нужно перезагрузиться, затем запустить скрипт снова"  
       exit  
     fi  
    }  

    # Создание скрипта-сервиса  
    create_service_script() {  
     # ID IB устройства  
     IB_DEVICE_ID=$(ibstat --list_of_cas | head -n 1)  

     # Создание сервиса  
     cat <<EOF > /etc/systemd/system/mellanox_initvf.service  
    [Unit]
    After=network.target  
     
    [Service]
    Type=oneshot  
    # измените, если у вас другое оборудование:  
    ExecStart=/bin/bash -c "/usr/bin/echo $IB_DEVICE_NUM_VFS > /sys/class/infiniband/$IB_DEVICE_ID/device/sriov_numvfs"  
    ExecStart=/usr/local/bin/initIbGuids.sh  
    StandardOutput=journal  
    TimeoutStartSec=60  
    RestartSec=60  
     
    [Install]
    WantedBy=multi-user.target  
    EOF  
    }  

    # Включение сервиса  
    enable_service_script() {  
     systemctl enable mellanox_initvf.service  
    }  

    # Создание скрипта инициализации IP и GUID  
    create_ip_link_script() {  
     # Создание init-скрипта  
     cat <<'EOF' > /usr/local/bin/initIbGuids.sh  
    #!/bin/bash  

    first_dev=$(ibstat --list_of_cas | head -n 1)  

    node_guid=$(ibstat ${first_dev} | grep "Node GUID" | cut -d ':' -f 2 | xargs | cut -d 'x' -f 2)  
    port_guid=$(ibstat ${first_dev} | grep "Port GUID" | cut -d ':' -f 2 | xargs | cut -d 'x' -f 2)  

    echo "first dev: $first_dev"  
    echo "node guid: $node_guid"  
    echo "port_guid: $port_guid"  

    if ip link show $first_dev &> /dev/null ; then  
     for vf in $(ip link show $first_dev | grep vf | awk {'print $2'}); do  
       vf_guid=$(echo "${port_guid::-5}cafe$((vf+1))" | sed 's/..\B/&:/g')  
       echo "vf_guid для vf $vf: $vf_guid"  
       ip link set dev ${first_dev} vf $vf port_guid ${vf_guid}  
       ip link set dev ${first_dev} vf $vf node_guid ${vf_guid}  
       ip link set dev ${first_dev} vf $vf state auto  
     done  
    fi  
    EOF  

     # Изменяем права  
     chmod 777 /usr/local/bin/initIbGuids.sh  
    }  

    # Инициализация интерфейсов  
    initialize_interfaces() {  
     /usr/local/bin/initIbGuids.sh  
    }  

    #################  
    # Запуск функций #  
    #################  
    install_ib_packages  
    set_srvio_vfs  
    create_service_script  
    enable_service_script  
    create_ip_link_script  
    initialize_interfaces
     
     
     
    the4amfriend
    Guest
    #6
    0
    11.06.2025 16:31:00
    Привет, у меня проблемы с запуском ROCE, использую карты Cx-4 без коммутаторов. PING работает нормально, но RPING или любые операции на уровне RDMA не работают, выдает ошибку сегментации. root@host02gen10:~# rdma_client: start Segmentation fault root@host02gen10:~# root@host02gen10:~# rdma link show link rocep134s0f0/1 state ACTIVE physical_state LINK_UP netdev ens5f0np0 link rocep134s0f1/1 state ACTIVE physical_state LINK_UP netdev ens5f1np1 link rocep134s0f0v4/1 state DOWN physical_state DISABLED netdev ens5f0v4 link rocep134s0f1v4/1 state DOWN physical_state DISABLED netdev ens5f1v4 root@host02gen10:~# Я настроил по 5 VFs на каждый порт и создал похожий сервис для автозапуска. Одно, что заметил в ВМ — node_guid не заполняется, пробовал прописывать, как выше, но всё равно не появляется. Буду благодарен за любые советы. Спасибо!
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры