Настроить InfiniBand partition keys

ТЕХНИЧЕСКОЕ ЗАДАНИЕ: Настроить InfiniBand partition keys

1. Цель задачи

Научиться настраивать изоляцию трафика между различными workloads в InfiniBand-сети с помощью partition keys (PKeys). Вы сконфигурируете partition-таблицы на Subnet Manager (OpenSM) и проверите, что трафик между хостами из разных partition'ов блокируется, а внутри одного partition'а — разрешён.

Ключевой результат Рабочая конфигурация InfiniBand-сети с двумя изолированными partition'ами, подтверждённая тестами ibping и ib_read_bw.


2. Исходные данные

Что нужноОткуда взять
Кластер из 2+ InfiniBand-хостов (физических или виртуальных)Физический кластер или эмуляция (см. ниже)
InfiniBand-коммутатор (управляемый OpenSM)Физический коммутатор или эмуляция (см. ниже)
OpenSM (Subnet Manager)Установить на одном из хостов или выделенном узле
InfiniBand-драйверы и утилиты (ibverbs-utils, perftest, infiniband-diags)Установить на всех хостах
Доступ root или sudo на всех узлахСистемный администратор или собственный кластер

Если нет реального InfiniBand-оборудования — симулируем:

  1. Установите эмулятор InfiniBand-сети — используйте ibsim (InfiniBand Fabric Simulator):
    sudo apt-get install ibsim
    
  2. Создайте конфигурацию топологии — файл topology.cfg с 2 хостами и 1 коммутатором:
    # topology.cfg
    node 1 "host1" 1 1
    node 2 "host2" 1 1
    switch 3 "switch1" 1 1
    link 1 3 1 1
    link 2 3 1 1
    
  3. Запустите симулятор:
    sudo ibsim -c topology.cfg
    
  4. Запустите OpenSM поверх симулятора:
    sudo opensm -B -F /etc/opensm/opensm.conf
    
  5. Настройте partition keys через конфигурацию OpenSM (см. Этап 2).

3. Технологический стек

КомпонентИнструментыНазначение
InfiniBand-драйверыmlx4_core, mlx5_core (Mellanox) или irdma (Intel)Работа с InfiniBand-адаптерами
Subnet ManagerOpenSMУправление партициями, маршрутизация
Утилиты диагностикиibstat, ibstatus, ibv_devinfoПроверка состояния InfiniBand-устройств
Утилиты тестированияibping, ib_read_bw, ib_write_bwПроверка связности и производительности
Эмулятор (опционально)ibsimСимуляция InfiniBand-фабрики
Конфигурация OpenSM/etc/opensm/opensm.confНастройка partition keys
Логи OpenSM/var/log/opensm.logДиагностика ошибок

4. Этапы выполнения

Этап 1: Установка и проверка InfiniBand-стека (30 минут)

Действия

  1. Установите необходимые пакеты на всех хостах:

    sudo apt-get update
    sudo apt-get install -y infiniband-diags ibverbs-utils perftest opensm
    

    (Для RHEL/CentOS: yum install -y infiniband-diags libibverbs-utils perftest opensm)

  2. Проверьте, что InfiniBand-адаптеры видны:

    ibstat
    ibstatus
    ibv_devinfo
    

    Ожидаемый вывод: отображается хотя бы один InfiniBand-порт (например, mlx5_0).

  3. Запустите OpenSM на одном из хостов (или на выделенном узле):

    sudo opensm -B
    

    Проверьте, что OpenSM запущен:

    ps aux | grep opensm
    
  4. Проверьте базовую связность между хостами

    # На хосте 1
    ibping -S -C mlx5_0 -P 1 &
    # На хосте 2
    ibping -c 10 -C mlx5_0 -P 1 <LID_хоста_1>
    

    LID можно узнать через ibstat на каждом хосте.

Ожидаемый результат этапа Все хосты видят InfiniBand-адаптеры, OpenSM запущен, ibping проходит успешно.


Этап 2: Настройка partition keys (1 час)

Действия

  1. Остановите OpenSM

    sudo opensm -K
    
  2. Отредактируйте конфигурационный файл OpenSM

    sudo nano /etc/opensm/opensm.conf
    

    Добавьте или измените следующие параметры:

    # Включить поддержку partition keys
    partition_config_file /etc/opensm/partitions.conf
    # Включить enforce partition keys (блокировать трафик между partition'ами)
    enforce_partition_keys TRUE
    
  3. Создайте файл partition'ов

    sudo nano /etc/opensm/partitions.conf
    

    Содержимое:

    # Partition 1: workload1 (PKey 0x8001)
    partition 0x8001 {
        membership = full
        ports = 1:1, 2:1  # host1 port1, host2 port1
    }
    # Partition 2: workload2 (PKey 0x8002)
    partition 0x8002 {
        membership = full
        ports = 1:1, 3:1  # host1 port1, host3 port1 (если есть третий хост)
    }
    # Default partition (все хосты)
    partition 0x7fff {
        membership = limited
        ports = ALL
    }
    

    Важно Замените 1:1, 2:1 и т.д. на реальные номера портов вашей топологии. Номер порта = LID:порт_на_коммутаторе. Узнать LID можно через ibstat.

  4. Перезапустите OpenSM

    sudo opensm -B -F /etc/opensm/opensm.conf
    
  5. Проверьте, что partition'ы загружены:

    sudo opensm -C
    

    Или посмотрите логи:

    tail -f /var/log/opensm.log | grep -i partition
    

Ожидаемый результат этапа OpenSM запущен с новой конфигурацией, partition'ы 0x8001 и 0x8002 активны.


Этап 3: Проверка изоляции трафика (30 минут)

Действия

  1. Настройте PKey на каждом хосте На хосте 1 (должен быть в обоих partition'ах):

    sudo modprobe ib_umad
    sudo ibv_devinfo -v | grep pkey
    

    Если PKey не установлен автоматически, добавьте его вручную через ibv_set_pkey (утилита из infiniband-diags):

    sudo ibv_set_pkey mlx5_0 0 0x8001  # Установить PKey 0x8001 на порт 0
    sudo ibv_set_pkey mlx5_0 1 0x8002  # Установить PKey 0x8002 на порт 1
    
  2. Проверьте связность внутри одного partition

    # На хосте 1 (partition 0x8001)
    ibping -S -C mlx5_0 -P 0 &
    # На хосте 2 (partition 0x8001)
    ibping -c 10 -C mlx5_0 -P 0 <LID_хоста_1>
    

    Ожидаемый результат: ibping проходит успешно.

  3. Проверьте изоляцию между partition'ами

    # На хосте 1 (partition 0x8001)
    ibping -S -C mlx5_0 -P 0 &
    # На хосте 3 (partition 0x8002)
    ibping -c 10 -C mlx5_0 -P  perm 0x8002 <LID_хоста_1>
    

    Ожидаемый результат: ibping завершается с ошибкой (timeout или "No route to host").

  4. Проверьте производительность внутри partition

    # На хосте 1 (сервер)
    ib_read_bw -d mlx5_0 -p 0
    # На хосте 2 (клиент)
    ib_read_bw -d mlx5_0 -p 0 <LID_хоста_1>
    

    Ожидаемый результат: пропускная способность > 90% от максимальной (например, > 50 Gbps для HDR100).

Ожидаемый результат этапа Трафик внутри partition'а работает, между partition'ами — блокируется.


Этап 4: Тестирование сценариев multi-tenant (30 минут)

Действия

  1. Создайте третий partition для tenant'а 3: Добавьте в /etc/opensm/partitions.conf:

    partition 0x8003 {
        membership = full
        ports = 2:1, 3:1  # host2 port1, host3 port1
    }
    

    Перезапустите OpenSM.

  2. Проверьте, что tenant 1 и tenant 2 не видят друг друга:

    # На хосте 1 (partition 0x8001)
    ibping -S -C mlx5_0 -P 0 &
    # На хосте 2 (partition 0x8003)
    ibping -c 10 -C mlx5_0 -P 0 <LID_хоста_1>
    

    Ожидаемый результат: ошибка.

  3. Проверьте, что tenant 1 и tenant 3 (через общий хост) изолированы:

    # На хосте 1 (partition 0x8001)
    ibping -S -C mlx5_0 -P 0 &
    # На хосте 3 (partition 0x8003)
    ibping -c 10 -C mlx5_0 -P 0 <LID_хоста_1>
    

    Ожидаемый результат: ошибка (даже если хост 1 имеет доступ к обоим partition'ам, трафик между partition'ами блокируется).

  4. Проверьте, что default partition (0x7fff) работает для всех:

    # На хосте 1 (default partition)
    ibping -S -C mlx5_0 -P 0 &
    # На хосте 2 (default partition)
    ibping -c 10 -C mlx5_0 -P 0 <LID_хоста_1>
    

    Ожидаемый результат: успех (если все хосты имеют limited membership в default partition).

Ожидаемый результат этапа Multi-tenant изоляция работает корректно.


Этап 5: Документирование и автоматизация (30 минут)

Действия

  1. Напишите скрипт для автоматической настройки partition'ов:

    #!/bin/bash
    # setup_partitions.sh
    # Устанавливает partition keys на всех хостах
    HOSTS=("host1" "host2" "host3")
    PKEYS=("0x8001" "0x8002" "0x8003")
    for host in "${HOSTS[@]}"; do
        ssh $host "sudo ibv_set_pkey mlx5_0 0 ${PKEYS[$i]}"
        i=$((i+1))
    done
    
  2. Создайте документацию

    • Опишите topology сети (LID, порты)
    • Задокументируйте partition'ы и их membership
    • Добавьте команды для проверки изоляции
  3. Настройте мониторинг partition'ов

    # Проверка статуса partition'ов через OpenSM
    sudo opensm -C | grep -E "partition|PKey"
    

Ожидаемый результат этапа Скрипт автоматизации и документация.


5. Критерии приемки (Definition of Done)

  • InfiniBand-стек установлен и работает на всех хостах (проверено ibstat и ibping)
  • OpenSM запущен с конфигурацией partition keys (enforce_partition_keys TRUE)
  • Созданы минимум 2 partition'а (0x8001 и 0x8002) с разными workloads
  • Трафик внутри одного partition'а проходит успешно (проверено ibping)
  • Трафик между разными partition'ами блокируется (ошибка ibping)
  • Производительность внутри partition'а > 90% от baseline (проверено ib_read_bw)
  • Default partition (0x7fff) работает для всех хостов с limited membership
  • Сценарий multi-tenant проверен: tenant 1 и tenant 2 изолированы
  • Написан скрипт автоматизации настройки partition'ов
  • Создана документация с topology и командами проверки

6. Ожидаемый результат

Основной артефакт Рабочая конфигурация InfiniBand-сети с partition keys, обеспечивающая изоляцию трафика между workloads.

Содержание

  • Файл /etc/opensm/opensm.conf с включённым enforce_partition_keys
  • Файл /etc/opensm/partitions.conf с определёнными partition'ами
  • Скрипт setup_partitions.sh для автоматической настройки PKey на хостах
  • Документация (README.md) с описанием topology и команд проверки

Дополнительные результаты

  • Логи OpenSM с подтверждением загрузки partition'ов
  • Результаты тестов ibping и ib_read_bw (внутри и между partition'ами)

7. Возможные сложности и их решение

СложностьРешение
OpenSM не запускается с конфигурациейПроверьте синтаксис partitions.conf (пробелы, точки с запятой). Используйте opensm -C для проверки.
PKey не применяется на хостеУбедитесь, что ib_umad модуль загружен (sudo modprobe ib_umad). Проверьте права на /dev/infiniband/umad*.
ibping не видит хост из другого partitionЭто ожидаемое поведение. Проверьте, что хост находится в том же partition'е.
Производительность низкаяПроверьте, что partition key установлен на правильный порт (ibv_devinfo -v). Убедитесь, что enforce_partition_keys не блокирует трафик внутри partition'а.
Эмулятор ibsim не работаетПроверьте, что ibsim установлен и запущен с правами root. Убедитесь, что topology.cfg корректен.
OpenSM не применяет изменения после перезапускаОчистите кэш OpenSM: sudo rm -rf /var/cache/opensm/* и перезапустите.

8. Бюджет времени (оценка)

ЭтапВремя
Этап 1: Установка и проверка InfiniBand-стека30 минут
Этап 2: Настройка partition keys1 час
Этап 3: Проверка изоляции трафика30 минут
Этап 4: Тестирование multi-tenant30 минут
Этап 5: Документирование и автоматизация30 минут
Итого3 часа

Примечание Для первого раза (без опыта работы с InfiniBand) заложите 4-5 часов, включая отладку и изучение документации.


9. Связанные вопросы из базы знаний

ВопросТема
1Основы InfiniBand: архитектура, LID, GID
2Настройка Subnet Manager (OpenSM)
3Partition keys: принципы и конфигурация
4Диагностика InfiniBand-сети (ibstat, ibping)
5Производительность InfiniBand (ib_read_bw, ib_write_bw)
6Multi-tenant изоляция в InfiniBand
7Эмуляция InfiniBand-фабрики (ibsim)
8Безопасность InfiniBand: enforce partition keys
9Автоматизация настройки InfiniBand
10Мониторинг InfiniBand-сети

10. Чек-лист самопроверки

  • Я установил InfiniBand-драйверы и утилиты на всех хостах
  • Я запустил OpenSM и проверил, что он видит все хосты
  • Я создал файл partition'ов с корректными LID и портами
  • Я проверил, что ibping проходит внутри partition'а и блокируется между partition'ами
  • Я написал скрипт автоматизации и документацию
  • Я протестировал multi-tenant сценарий с тремя partition'ами
  • Я проверил производительность внутри partition'а с помощью ib_read_bw
  • Я убедился, что default partition работает для всех хостов
  • Я задокументировал topology и команды проверки
  • Я очистил кэш OpenSM и перезапустил его после изменений