English translation is not available yet. Showing Russian content.
Настроить 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-оборудования — симулируем:
- Установите эмулятор InfiniBand-сети — используйте ibsim (InfiniBand Fabric Simulator):
sudo apt-get install ibsim - Создайте конфигурацию топологии — файл 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 - Запустите симулятор:
sudo ibsim -c topology.cfg - Запустите OpenSM поверх симулятора:
sudo opensm -B -F /etc/opensm/opensm.conf - Настройте partition keys через конфигурацию OpenSM (см. Этап 2).
3. Технологический стек
| Компонент | Инструменты | Назначение |
|---|---|---|
| InfiniBand-драйверы | mlx4_core, mlx5_core (Mellanox) или irdma (Intel) | Работа с InfiniBand-адаптерами |
| Subnet Manager | OpenSM | Управление партициями, маршрутизация |
| Утилиты диагностики | 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 минут)
Действия
-
Установите необходимые пакеты на всех хостах:
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)
-
Проверьте, что InfiniBand-адаптеры видны:
ibstat ibstatus ibv_devinfoОжидаемый вывод: отображается хотя бы один InfiniBand-порт (например,
mlx5_0). -
Запустите OpenSM на одном из хостов (или на выделенном узле):
sudo opensm -BПроверьте, что OpenSM запущен:
ps aux | grep opensm -
Проверьте базовую связность между хостами
# На хосте 1 ibping -S -C mlx5_0 -P 1 & # На хосте 2 ibping -c 10 -C mlx5_0 -P 1 <LID_хоста_1>
Ожидаемый результат этапа Все хосты видят InfiniBand-адаптеры, OpenSM запущен, ibping проходит успешно.
Этап 2: Настройка partition keys (1 час)
Действия
-
Остановите OpenSM
sudo opensm -K -
Отредактируйте конфигурационный файл OpenSM
sudo nano /etc/opensm/opensm.confДобавьте или измените следующие параметры:
# Включить поддержку partition keys partition_config_file /etc/opensm/partitions.conf # Включить enforce partition keys (блокировать трафик между partition'ами) enforce_partition_keys TRUE -
Создайте файл 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. -
Перезапустите OpenSM
sudo opensm -B -F /etc/opensm/opensm.conf -
Проверьте, что partition'ы загружены:
sudo opensm -CИли посмотрите логи:
tail -f /var/log/opensm.log | grep -i partition
Ожидаемый результат этапа OpenSM запущен с новой конфигурацией, partition'ы 0x8001 и 0x8002 активны.
Этап 3: Проверка изоляции трафика (30 минут)
Действия
-
Настройте 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 -
Проверьте связность внутри одного 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 проходит успешно.
-
Проверьте изоляцию между 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").
-
Проверьте производительность внутри 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 минут)
Действия
-
Создайте третий partition для tenant'а 3: Добавьте в
/etc/opensm/partitions.conf:partition 0x8003 { membership = full ports = 2:1, 3:1 # host2 port1, host3 port1 }Перезапустите OpenSM.
-
Проверьте, что 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>Ожидаемый результат: ошибка.
-
Проверьте, что 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'ами блокируется).
-
Проверьте, что 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 минут)
Действия
-
Напишите скрипт для автоматической настройки 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 -
Создайте документацию
-
Настройте мониторинг 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 keys | 1 час |
| Этап 3: Проверка изоляции трафика | 30 минут |
| Этап 4: Тестирование multi-tenant | 30 минут |
| Этап 5: Документирование и автоматизация | 30 минут |
| Итого | 3 часа |
Примечание Для первого раза (без опыта работы с InfiniBand) заложите 4-5 часов, включая отладку и изучение документации.
9. Связанные вопросы из базы знаний
| Вопрос | Тема |
|---|---|
| 1 | Основы InfiniBand: архитектура, LID, GID |
| 2 | Настройка Subnet Manager (OpenSM) |
| 3 | Partition keys: принципы и конфигурация |
| 4 | Диагностика InfiniBand-сети (ibstat, ibping) |
| 5 | Производительность InfiniBand (ib_read_bw, ib_write_bw) |
| 6 | Multi-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 и перезапустил его после изменений