Как запустить ВМ с VF из пула SRIOV, если это не удается из-за настройки MAC?

Вопрос или проблема

Я пытаюсь запустить виртуальную машину KVM/QEMU под RHEL9, которая использует виртуализированную карту Infiniband (VF) через SR-IOV из пула VFs. Я могу указать определенное устройство PCI VF с помощью hostdev, и это работает нормально, однако это требует жесткой привязки PCI шины/слота и т.д. в XML файл ВМ. Это будет проблемой при миграции ВМ на другой сервер. Поэтому я предпочел бы определить сетевой пул VFs, как описано в этом документе RH, который автоматически назначит свободный VF вновь запущенной ВМ.

Я сделал все, как описано в документации, и сетевой пул из 8 VFs с одной IB карты работает, как и должно:

# virsh net-dumpxml IB-passthrough
<network>
  <name>IB-passthrough</name>
  <uuid>8dce28fa-97ea-43d4-a82b-5923fa1a2a4f</uuid>
  <forward mode="hostdev" managed='yes'>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x1'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x2'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x3'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x4'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x5'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x6'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x00" function='0x7'/>
    <address type="pci" domain='0x0000' bus="0xc1" slot="0x01" function='0x0'/>
  </forward>
</network>

Я записываю следующую запись в XML ВМ:

<interface type="network">
  <source network='IB-passthrough'/>
</interface>

Но после закрытия редактора XML запись автоматически дополняется записями mac и address:

<interface type="network">
  <mac address="52:54:00:44:db:0d"/>
  <source network='IB-passthrough'/>
  <address type="pci" domain='0x0000' bus="0x07" slot="0x00" function='0x0'/>
</interface> 

Потом ВМ не может быть запущена, поскольку MAC не может быть установлен:

# virsh start rhel9.2-testvm
    error: Не удалось запустить домен 'rhel9.2-testvm'
    error: Невозможно установить MAC интерфейса на 52:54:00:05:72:5c для ifname ibp193s0 vf 0: Операция не поддерживается

Существует ли способ избежать этого автоматического MAC? Или изменения MAC интерфейса? Или есть еще одна проблема, которую я упускаю?

Ответ или решение

Вступление: Современные технологии виртуализации, такие как KVM и QEMU, обеспечивают возможность использования виртуализированных функций (VF) через SR-IOV (Single Root I/O Virtualization). Проблемы, связанные с настройкой виртуальных машин и их миграцией между серверами, могут привести к неэффективности работы и потере времени. Рассмотрим решение проблемы, с которой вы столкнулись, связанной с автоматическим добавлением MAC-адреса и ошибок, возникающих при попытке запустить виртуальную машину (VM).

Шаг 1: Понимание проблемы

Вы настроили пул виртуализированных функций (VF) для использования в качестве сетевых интерфейсов в ваших виртуальных машинах, однако автоматически генерируемый MAC-адрес приводит к ошибкам при запуске VM. Причина кроется в том, что SR-IOV требует определенных настроек на уровне сети, и наличие статического MAC-адреса может конфликтовать с этими требованиями.

Шаг 2: Проверка параметров сети

Первое, что вам нужно сделать, это убедиться, что IP-адресация и сетевые настройки соответствуют требованиям вашей виртуализированной сети. Убедитесь, что пул виртуализированных функций настроен правильно и что каждая VF доступна в пуле для ассоциации с виртуальными машинами. Это можно сделать с помощью команды:

# lspci | grep -i eth

Шаг 3: Манипуляции с XML-конфигурацией

Для обхода автоматического добавления MAC-адреса при конфигурировании виртуальной машины, вам нужно внести изменения в XML конфигурацию VM. Прежде всего, используйте ключ --mac с пустым значением при добавлении интерфейса:

<interface type="network">
  <mac address=""/>
  <source network='IB-passthrough'/>
</interface>

Таким образом, вы отключите автоматическую настройку MAC-адреса.

Шаг 4: Использование пользовательского MAC-адреса

Если необходимо, вы можете установить собственный MAC-адрес для каждого VF. Например, вы можете создать скрипт, который будет автоматически генерировать уникальные MAC-адреса при создании каждой VM. Однако учтите, что MAC-адреса должны быть уникальными на уровне сети.

Шаг 5: Тестирование и запуск VM

После внесения изменений в конфигурацию попробуйте снова запустить виртуальную машину:

# virsh start rhel9.2-testvm

Если все сделано правильно, VM должна запуститься без каких-либо ошибок.

Заключение

Проблемы с запуском VM, связанные с автоматическим добавлением MAC-адресов, могут быть решены различными способами, включая модификацию настроек в XML-конфигурации или использование пользовательских MAC-адресов. Эти шаги помогут обеспечить более плавный процесс миграции и управление вашими виртуальными машинами. Если возникают дополнительные трудности, стоит углубиться в логи (например, используя journalctl -xe) для выявления других возможных причин ошибки.

Оцените материал
Добавить комментарий

Капча загружается...