Управление виртуальными машинами#

Одним из наиболее эффективных способов управления функциональностью, возможностями и производительностью ВМ является настройка ее виртуальных устройств.

Принцип работы виртуальных устройств#

Как и физические машины, ВМ требуют наличия специализированных устройств для обеспечения системных функций, таких как вычислительная мощность, память, хранение или сеть. Физические машины используют для этого аппаратные устройства, ВМ – программные абстракции таких устройств или виртуальные устройства.

Виртуальные устройства, присоединенные к ВМ, можно настроить при создании ВМ, а управлять ими на существующей ВМ. Виртуальные устройства могут быть подключены или отсоединены от ВМ только тогда, когда она выключена, но некоторые могут быть добавлены или удалены и во время работы ВМ. Такая функция называется «горячим подключением» и «горячим отключением» виртуальных устройств.

При создании новой ВМ libvirt автоматически создает и настраивает набор основных виртуальных устройств по умолчанию, если не указано иное. Набор этих устройств основан на архитектуре хост-системы и типе машины.

Перечень виртуальных устройств по умолчанию:

  • процессор;

  • память;

  • клавиатура;

  • контроллер сетевого интерфейса (NIC);

  • контроллеры различных устройств;

  • видеокарта;

  • звуковая карта.

Для управления виртуальными устройствами после создания ВМ используйте интерфейс командной строки (CLI).

Физическое хранилище, используемое для виртуальных дисков, может быть представлено файлами в различных форматах, таких как qcow2 или raw, и реализовано в ВМ с помощью контроллеров, таких как:

  • эмуляторы контроллеров;

  • virtio-scsi;

  • virtio-blk.

Эмуляторы контроллеров медленнее контроллеров virtio, которые разработан специально для целей виртуализации. С другой стороны эмуляторы контроллеров позволяют запускать операционные системы, которые не имеют драйверов для устройств virtio. Аналогичным образом, virtio-scsi предлагает более полную поддержку команд SCSI и позволяет подключать большее количество дисков к ВМ, а virtio-blk обеспечивает лучшую производительность, чем virtio-scsi и эмуляторы контроллеров, но более ограничен в диапазоне вариантов использования. Например, подключение физического диска в качестве LUN-устройства к ВМ невозможно при использовании virtio-blk.

Типы виртуальных устройств#

Типы виртуальных устройств, которые можно подключить к ВМ, представлены в таблице:

Тип устройств

Описание

Поддерживаемые типы устройств

Эмулируемые устройства

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

Поддерживаются следующие типы эмулируемых устройств:

- Виртуальные процессоры (vCPU) с большим выбором доступных моделей процессоров. Влияние эмуляции на производительность в значительной степени зависит от различий между CPU хоста и эмулируемым vCPU.
- Эмулируемые компоненты системы, такие как контроллеры шины PCI.
- Эмулируемые контроллеры системы хранения, такие как SATA, SCSI или даже IDE.
- Эмулируемые звуковые устройства, такие как ICH9, ICH6 или AC97.
- Эмулируемые видеокарты, такие как VGA-карты.
- Эмулируемые сетевые устройства, такие как rtl8139

Паравиртуальные устройства

Паравиртуализация обеспечивает быстрый и эффективный метод предоставления виртуальных устройств для ВМ. Паравиртуальные устройства предоставляют интерфейсы, которые разработаны специально для использования в ВМ, и, таким образом, значительно повышают производительность устройств. В SberLinux OS Server предоставляются паравиртуальные устройства для ВМ с использованием virtio API в качестве промежуточного слоя между гипервизором и ВМ. Недостаток этого подхода заключается в том, что для него требуется конкретный драйвер устройства в гостевой ОС. Паравиртуальные устройства рекомендуется использовать вместо эмулируемых устройств, когда это возможно, особенно если на них работают приложения с интенсивным вводом-выводом. Паравиртуальные устройства уменьшают задержку и увеличивают пропускную способность ввода-вывода, в некоторых случаях приближая их к производительности физических устройств. Другие паравиртуальные устройства также добавляют функциональность ВМ, которая в противном случае недоступна

Поддерживаются следующие типы паравиртуальных устройств:

- Паравиртуальное сетевое устройство (virtio-net).
- Паравиртуальные контроллеры хранения: virtio-blk (обеспечивает эмуляцию блочного устройства) и virtio-scsi(обеспечивает более полную эмуляцию SCSI).
- Паравиртуальные часы.
- Паравиртуальное последовательное устройство (virtio-serial).
- Устройство balloon device (virtio-balloon), используемое для динамического распределения памяти между виртуальной машиной и ее хостом.
- Паравиртуальный генератор случайных чисел (virtio-rng)

Физические общие устройства

Некоторые аппаратные платформы позволяют ВМ напрямую получать доступ к различным аппаратным устройствам и компонентам. Этот процесс называется назначением устройства или «пробросом». При таком подключении некоторые свойства физического устройства становятся доступными для ВМ так, как если бы это происходило на физической машине. Это обеспечивает превосходную производительность устройства при использовании в ВМ, но устройства, физически подключенные к ВМ, становятся недоступными для хоста и не могут быть перенесены. Тем не менее некоторые устройства могут быть общими для нескольких ВМ. Например, одно физическое устройство может в определенных случаях предоставлять несколько опосредованных устройств, которые затем могут быть назначены отдельным ВМ

Поддерживаются следующие типы «пробрасываемых» устройств:

- USB, PCI и SCSI «проброс» — предоставляет общие стандартные отраслевые шины ВМ, чтобы сделать их специфические функции доступными для гостевого (далее – ПО).
- Виртуализация ввода-вывода с одним корнем (SR-IOV) - спецификация, которая обеспечивает аппаратную изоляцию ресурсов PCI Express. Это делает безопасным и эффективным разделение одного физического ресурса PCI на функции виртуальных PCI. Обычно используется для контроллера сетевого интерфейса (NIC).
- Виртуализация N_Port ID (NPIV) - технология Fibre Channel для совместного использования одного физического адаптера шины хоста (HBA) с несколькими виртуальными портами.
- GPU и vGPU - ускорители для определенных видов графических или вычислительных рабочих нагрузок. Некоторые графические процессоры могут быть подключены непосредственно к виртуальной машине, в то же время некоторые типы также предлагают возможность создавать виртуальные графические процессоры (vGPU), которые совместно используют базовое физическое оборудование.

Управление устройствами, присоединенными к виртуальной машине, через интерфейс командной строки#

С помощью интерфейса командной строки (CLI) можно осуществлять:

  • подключение устройства;

  • изменение устройства;

  • удаление устройства.

Подключение устройств к виртуальной машине#

Подключение нового виртуального устройства расширяет функциональность ВМ. Например, можно увеличить емкость хранилища ВМ, подключив к ней новое виртуальное дисковое устройство. Такой процесс называется «горячим подключением» памяти.

Важно

Удаление устройства памяти из ВМ, также известного как «горячее отключение» памяти, не поддерживается. Использовать его не рекомендуется.

Предварительные условия#

Перед подключением виртуального устройства ознакомьтесь с опциями, необходимыми для устройства, которое нужно подключить к ВМ. Чтобы увидеть доступные опции для конкретного устройства, используйте команду virt-xml --device=?:

virt-xml --network=?

Пример вывода команды:

--network options:
[...]
address.unit
boot_order
clearxml
driver_name
[...]

Сценарий#

Чтобы подключить устройство к виртуальной машине, используется команда virt-xml --add-device, включая определение устройства и необходимые параметры для соответствующего пользовательского сценария.

Примеры некоторых пользовательских сценариев:

  • Для создания образа диска формата qcow2 объемом 20 ГБ и именем <disk-name> в каталоге /var/lib/libvirt/images/ и прикрепления его в качестве виртуального диска к запущенной ВМ <example-vm> при ее следующем запуске используйте команду virt-xml --add-device со следующими опциями:

    virt-xml <example-vm> --add-device --disk /var/lib/libvirt/images/<disk-name>.qcow2,format=qcow2,size=20
    

    Пример вывода команды:

    Domain '<example-vm>' defined successfully.
    Changes will take effect after the domain is fully powered off.
    
  • Для подключения USB-устройства флеш-памяти, подключенного на хосте как устройство 004 на шине 002, к ВМ <example-vm> во время работы ВМ используйте команду virt-xml --add-device со следующим набором опций:

    virt-xml <example-vm> --add-device --update --hostdev 002.004
    

    Пример вывода команды:

    Device hotplug successful.
    Domain '<example-vm>' defined successfully.
    

    Примечание

    Комбинация шина-устройство для определения USB может быть получена с помощью команды lsusb.

Проверка#

Чтобы убедиться, что устройство было добавлено, выполните любое из следующие действия:

  • Запустите ВМ и проверьте, присутствует ли новое подключенное устройство и работает ли оно должным образом.

  • Используйте команду virsh dumpxml и посмотрите, было ли XML-определение устройства добавлено в раздел <devices> в XML-конфигурации ВМ:

    virsh dumpxml <example-vm>
    

    Пример вывода команды:

    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x4146'/>
        <product id='0x902e'/>
        <address bus='2' device='4'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
    

    Вывод команды показывает конфигурацию виртуальной машины <example-vm> и подтверждает, что USB-устройство флеш-памяти 002.004 было добавлено.

Изменение устройств, присоединенных к виртуальной машине#

Функциональность ВМ можно изменить, отредактировав конфигурацию подключенных виртуальных устройств. Например, если нужно оптимизировать производительность ВМ, можно изменить модели их виртуальных процессоров, чтобы они лучше соответствовали процессорам хостов.

Предварительные условия#

Перед изменением конфигурации убедитесь, что:

  • получены необходимые опции для устройства, которое необходимо подключить к ВМ.

    Чтобы увидеть доступные опции для конкретного устройства, используйте команду virt-xml --device=?. Пример использования команды:

    virt-xml --network=?
    
    --network options:
    [...]
    address.unit
    boot_order
    clearxml
    driver_name
    [...]
    
  • не обязательно: сделана резервная копия XML конфигурации ВМ с помощью virsh dumpxml vm-name, выходные данные сохранены в файл.

    В примере ниже создается резервная копия конфигурационного файла XML ВМ <example-vm> в файл <filename>.xml:

    virsh dumpxml <example-vm> > <filename>.xml
    

    Просмотреть <filename>.xml можно с помощью команды:

    cat <filename>.xml
    

    Пример содержимого файла:

    <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
      <name><example-vm></name>
      <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
      [...]
    </domain>
    

Сценарий#

Для изменения конфигурации используйте команду virt-xml --edit с указанием необходимых опций.

Например, команда, приведенная ниже, очищает значение параметра \<cpu\> в конфигурации выключенной ВМ <example-vm> и устанавливает для него новое значение host-model:

virt-xml <example-vm> --edit --cpu host-model,clearxml=yes

Пример вывода команды:

Domain '<example-vm>' defined successfully.

Проверка#

Чтобы убедиться, что устройство было изменено, выполните любое из следующих действий:

  • Запустите ВМ и проверьте, присутствует ли устройство и отражены ли изменения.

  • Используйте команду virsh dumpxml и посмотрите, было ли изменено определение XML-устройства в XML-конфигурации ВМ.

    Например, следующий вывод показывает конфигурацию виртуальной машины <example-vm> и подтверждает, что режим процессора был настроен как host-model.

    virsh dumpxml <example-vm>
    

    Пример вывода команды

    [...]
    <cpu mode='host-model' check='partial'>
      <model fallback='allow'/>
    </cpu>
    [...]
    

Устранение неполадок#

Если изменение устройства приводит к тому, что ВМ не загружается, используйте утилиту virsh define для восстановления конфигурации XML путем перезаписи файла конфигурации резервной копией:

virsh define testguest.xml

Примечание

Для небольших изменений в XML-конфигурации ВМ можно использовать команду virsh edit (подробнее см. описание работы команды в разделе «Инструменты виртуализации» -> «Утилита virsh edit»). Не используйте этот метод для более глобальных изменений в конфигурации, так как он с большей вероятностью может нарушить конфигурацию и помешать загрузке ВМ.

Удаление устройств виртуальной машины#

Удалить виртуальное дисковое устройство из ВМ можно с помощью команды virt-xml --remove-device.

Предварительные условия#

Перед удалением виртуального устройства рекомендуется сделать резервную копию XML конфигурации ВМ с помощью команды virsh dumpxml <vm-name> и сохранить выходные данные в файл.

Пример использования команды:

virsh dumpxml <example-vm> > <example-vm>.xml

Пример содержимого файла <example-vm>.xml, просматриваемого с помощью команды cat <example-vm>.xml:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
   <name><example-vm></name>
   <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
   [...]
</domain>

Сценарий#

Примеры некоторых пользовательских сценариев:

  • Для удаления устройства хранения <storage-device> из работающей ВМ <example-vm> после ее выключения, используйте команду virt-xml --remove-device со следующими опциями:

    virt-xml <example-vm> --remove-device --disk target=<storage-device>
    

    Пример вывода команды:

    Domain '<example-vm>' defined successfully.
    Changes will take effect after the domain is fully powered off.
    
  • Для немедленного удаления USB-устройства флеш-памяти из запущенной ВМ <example-vm> используйте команду virt-xml --remove-device со следующими опциями:

    virt-xml <example-vm> --remove-device --update --hostdev type=usb
    

    Пример вывода команды:

    Device hotunplug successful.
    Domain '<example-vm>' defined successfully.
    

Устранение неполадок#

Для восстановления XML-конфигурации используется утилита virsh define. Это может потребоваться, когда удаление устройства приводит к тому, что ВМ не загружается. Восстановление XML-конфигурации происходит путем перезаписи файла конфигурации той копией, которая была ранее сделана как резервная.

Пример:

virsh define <filename>.xml

Где <filename>.xml - имя файла с резервной копией XML-конфигурации ВМ.

Управление виртуальными USB устройствами#

При использовании ВМ существует возможность получить доступ и управлять USB-устройствами, подключенными к хосту, например, такими как флеш-накопитель или веб-камера. В этом сценарии хост передает управление устройством ВМ. Такой процесс также носит название USB-проброс.

Подключение USB-устройства к виртуальной машине#

Чтобы подключить USB-устройство к ВМ с помощью командной строки, нужно внести информацию об USB-устройстве в XML-файл конфигурации ВМ.

Предварительные условия#

Убедитесь, что устройство, которое вы хотите пробросить к ВМ, подключено к хосту.

Сценарий#

Для проброса USB-устройства выполните следующие шаги:

  1. Найдите номера шины и USB-устройства, которое нужно подключить к ВМ с помощью команды, отображающей список USB-устройств, подключенных к хосту:

    lsusb
    

    Пример вывода команды:

    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    

    В примере выше USB-устройство 005 подключено к шине 001.

  2. Подключите USB-устройство к ВМ <example-vm>:

    virt-xml <example-vm> --add-device --hostdev 001.005
    

    Пример вывода команды:

    Domain '<example-vm>' defined successfully.
    

Примечание

Чтобы подключить USB-устройство к работающей ВМ, добавьте опцию --update к предыдущей команде.

Проверка#

Для проверки выполните любое из следующих действий:

  • Запустите ВМ и проверьте, присутствует ли устройство, правильно ли оно работает.

  • Определите, была ли добавлена XML-конфигурация USB-устройства в раздел \<devices>\ соответствующего файла ВМ с помощью команды virsh dumpxml:

    virsh dumpxml <example-vm>
    

    Пример вывода команды:

    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0407'/>
        <product id='0x6252'/>
        <address bus='1' device='5'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
    

    В примере выше присутствует запись о подключенном USB-устройстве.

Удаление USB устройств виртуальной машины#

Чтобы удалить USB-устройство из ВМ, удалите информацию о USB-устройстве из ее XML-конфигурации.

Сценарий#

Для удаления USB-устройства выполните следующие шаги:

  1. Найдите номера шины и USB-устройства, которое требуется удалить с помощью команды lsusb.

    Пример вывода команды:

    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
    

    В примере USB-устройство 005 подключено к хосту на шине 001.

  2. Удалите USB-устройство с помощью утилиты virt-xml с опцией --remove-device:

    virt-xml <example-vm> --remove-device --hostdev 001.005
    

    Команда удаляет USB-устройство 005 из ВМ <example-vm>.

    Пример вывода команды:

    Domain 'example-VM-1' defined successfully.
    

Примечание

Чтобы удалить USB-устройство из работающей ВМ, добавьте опцию --update к предыдущей команде.

Примечание

Для проверки запустите ВМ и проверьте, что устройство удалено из списка устройств

Управление виртуальными оптическими устройствами#

При использовании ВМ можно получить доступ к информации, хранящейся в ISO-образе на хосте. Для этого требуется подключить ISO-образ к ВМ в виде виртуального оптического привода, такого как CD-привод или DVD-привод.

Подключение оптических приводов к виртуальным машинам#

Чтобы подключить ISO-образ в качестве виртуального оптического привода, отредактируйте файл XML-конфигурации ВМ и добавьте новый диск.

Предварительные условия#

Пути к ISO-образу на хост-компьютере записаны или сохранены.

Сценарий#

Для подключения оптического привода используйте утилиту virt-xml с опцией --add-device:

virt-xml <example-vm> --add-device --disk <path-to-ISO>,device=cdrom

Где <path-to-ISO> – путь к ISO-образу.

Пример вывода команды:

Domain '<example-vm>' defined successfully.

Примечание

Для проверки запустите ВМ и проверьте, присутствует ли ISO-образ и работает ли он должным образом.

Замена ISO-образа в виртуальном оптическом приводе#

Чтобы заменить ISO-образ, подключенный в качестве виртуального оптического привода к ВМ, необходимо отредактировать XML-файл конфигурации и указать ISO-образ для замены.

Предварительные условия#

Перед заменой ISO-образа убедитесь, что:

  • ISO-образ должен находиться на хосте;

  • известен путь к ISO-образу.

Сценарий#

Для замены ISO-образа выполните следующие шаги:

  1. Определите целевое устройство, через которое CD-ROM подключен к ВМ, файле XML-конфигурации ВМ:

    virsh dumpxml <example-vm>
    

    Пример вывода команды:

    ...
    <disk>
      ...
      <source file='$(<path-to-ISO>.iso)'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    

    Пример выше отображает целевое устройство <sda> для CD-ROM в XML-конфигурации ВМ <example-vm>.

  2. Замените ISO-образ с помощью утилиты virt-xml с опцией --edit:

    virt-xml <example-vm> --edit target=sda --disk <path-to-ISO-2>.iso
    

    Команда заменяет ISO-образ, прикрепленный к виртуальной машине <example-vm> через устройство sda, на образ ISO <path-to-ISO-2>.

    Пример вывода команды:

    Domain 'example-VM-name' defined successfully.
    

Примечание

Для проверки запустите ВМ и проверьте, что устройство заменено и функционирует надлежащим образом.

Удаление ISO-образа из виртуальной машины#

Чтобы удалить ISO-образ из виртуального оптического привода, подключенного к ВМ, необходимо отредактировать XML-файл ее конфигурации.

Сценарий#

  1. В файле XML-конфигурации ВМ определите целевое устройство, через которое CD-ROM подключен к виртуальной машине:

    virsh dumpxml <example-vm>
    

    Команда отображает XML-конфигурацию <example-vm>, где целевым устройством для CD-ROM является sda.

    Пример вывода команды:

    ...
    <disk>
      ...
      <source file='$(<path-to-ISO>.iso)'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    
  2. Удалите ISO-образ с использованием утилиты virt-xml с опцией --edit:

    virt-xml <example-vm> --edit target=sda --disk path=
    

    Пример вывода команды:

    Domain '<example-vm>' defined successfully.
    

    Команда удаляет ISO-образ <path-to-ISO>.iso с CD-привода, подключенного к ВМ <example-vm>.

Примечание

Для проверки запустите ВМ и убедитесь что ISO-образ больше недоступен.

Удаление оптического привода из виртуальной машины#

Чтобы удалить оптический привод, подключенный к ВМ, нужно отредактировать файл ее XML-конфигурации.

Сценарий#

  1. Определите целевое устройство, через которое CD-ROM подключен к ВМ, в файле XML-конфигурации:

    virsh dumpxml <example-vm>
    

    Пример вывода команды:

    ...
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
    

    В примере выше в XML-конфигурации <example-vm> целевым устройством для CD-ROM является sda.

  2. Удалите оптический привод, подключенный в качестве устройства sda, с помощью утилиты virt-xml с опцией --remove-device.

    virt-xml <example-vm> --remove-device --disk target=sda
    

    Пример вывода команды:

    Domain '<example-vm>' defined successfully.
    

Примечание

Для проверки корректности удаления убедитесь, что устройство больше не присутствует в файле XML-конфигурации ВМ.

Управление устройствами SR-IOV#

Single Root I/O Virtualization (SR-IOV) – это функция для повышения производительности эмулируемых виртуальных устройств. Такие устройства обычно потребляют больше процессорных ресурсов и памяти, чем аппаратные, что может привести к ограничению производительности ВМ. SR-IOV можно использовать как для повышения производительности эмулируемых виртуальных устройств, так и для повышения общей производительности ВМ.

Принцип работы SR-IOV#

Виртуализация ввода-вывода с единым корнем (SR-IOV) - это спецификация, которая позволяет одному устройству PCI Express (PCIe) представлять хосту несколько отдельных устройств PCI, называемых виртуальными функциями.

Каждое из этих устройств:

  • может предоставить ту же или аналогичную функциональность, что и оригинальное устройство PCIe;

  • располагает отличающимся адресом на PCI-шине хоста;

  • может быть назначено различным ВМ с помощью назначения VFIO.

Например, сетевое устройство, поддерживающее SR-IOV, может представлять виртуальные функции нескольким ВМ. В то же время все виртуальные функции используют одну и ту же физическую карту, одно и то же сетевое подключение и один и тот же сетевой кабель. Каждая из ВМ напрямую управляет своим аппаратным сетевым устройством и не использует никаких дополнительных ресурсов хоста.

Функциональность SR-IOV реализуется с помощью следующих функций PCIe:

  • Физические функции (physical functions – PF) – функция PCIe, которая предоставляет хосту функциональность своего устройства (например, сетевую), но также может создавать и управлять набором VF. Каждое устройство, поддерживающее SR-IOV, имеет одну или несколько PF.

  • Виртуальные функции (virtual functions – VF) - облегченные функции PCIe, которые ведут себя как независимые устройства. Каждая VF является производной от PF. Максимальное количество VF, которое может иметь устройство, зависит от аппаратного обеспечения. Каждая VF может быть назначена только одной ВМ за раз, но на ВМ может быть назначено несколько VF.

ВМ распознают VF как виртуальные устройства. Например, VF, созданная сетевым устройством SR-IOV, отображается как сетевая карта на ВМ, которой она назначена, так же как физическая сетевая карта отображается на хосте.

Архитектура SR-IOV

Основными преимуществами использования SR-IOV VF, а не эмулируемых устройств являются:

  • улучшенная производительность;

  • снижение использования ресурсов процессора и памяти хоста.

VF, подключенная к виртуальной машине в качестве Virtual Network Interface Controller (vNIC), работает почти на том же уровне, что и физическая NIC, и намного лучше, чем паравиртуализированные или эмулированные NIC. Например, когда несколько VF используются одновременно на одном хосте, может быть значительно увеличена производительность.

Недостатки:

  • Для изменения конфигурации PF, сначала нужно обнулить количество VF, обеспечиваемых этой PF, а именно удалить устройства, предоставляемые этими VF, из ВМ, которой они назначены.

  • ВМ с подключенными устройствами, назначенными VFIO, включая VF SR-IOV, не может быть перенесена на другой хост. В некоторых случаях можно обойти это ограничение, соединив назначенное устройство с эмулированным устройством. Например, можно связать назначенную сетевую VF с эмулированным vNIC и удалить VF перед миграцией.

Подключение сетевых устройств SR-IOV к виртуальным машинам#

Чтобы подключить сетевое устройство SR-IOV к ВМ на хосте Intel или AMD, необходимо создать виртуальную функцию (VF) из сетевого интерфейса с поддержкой SR-IOV на хосте и назначить VF в качестве устройства выбранной ВМ.

Предварительные условия#

Перед подключением убедитесь, что:

  • процессор и прошивка вашего хоста поддерживают блок управления памятью ввода-вывода (IOMMU):

    • процессор Intel должен поддерживать технологию виртуализации Intel для направленного ввода-вывода (VT-d);

    • процессор AMD должен поддерживать функцию AMD-Vi;

  • хост использует службу контроля доступа (ACS) для обеспечения изоляции прямого доступа к памяти (DMA) для топологии PCIe;

  • физическое сетевое устройство поддерживает SR-IOV. Чтобы проверить, поддерживают ли какие-либо сетевые устройства в вашей системе SR-IOV, используйте следующую команду:

    lspci -v
    

    Пример вывода команды:

    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
       Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
       Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
       Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
       Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
       Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
       Kernel driver in use: igb
       Kernel modules: igb
    [...]
    

    В выводе должна содержаться информация – Single Root I/O Virtualization (SR-IOV).

  • запущен сетевой интерфейс хоста, предназначенный для создания VF.

    Активировать сетевой интерфейс, например, с именем eth1, и убедиться, что он запущен можно с помощью следующих команд:

    ip link set eth1 up
    

    Команда выше активирует интерфейс. Следующая команда позволяет просмотреть информацию о его состоянии:

    ip link show eth1
    

    Пример вывода:

    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
    
  • функция IOMMU должна быть включена в BIOS хоста и в ядре. Это необходимо, чтобы назначение устройства SR-IOV работало. Для этого:

    • на хосте Intel включите VT-d:

      1. Восстановите конфигурацию GRUB с помощью параметров intel_iommu=on и iommu=pt:

        grubby --args="intel_iommu=on iommu=pt" --update-kernel=ALL
        
      2. Перезагрузите хост.

    • на хосте AMD включите AMD-Vi:

      1. Восстановите конфигурацию GRUB с помощью параметра iommu=pt:

        grubby --args="iommu=pt" --update-kernel=ALL
        
      2. Перезагрузите хост.

Сценарий#

  1. Необязательно: подтвердите максимальное количество VF, которое может использовать сетевое устройство. Для этого используйте следующую команду, где <network-interface> – сетевое устройство, совместимое с SR-IOV:

    cat /sys/class/net/<network-interface>/device/sriov_totalvfs
    

    Пример вывода команды:

    7
    
  2. Создайте виртуальную функцию (VF) с помощью следующей команды:

    echo <VF-number> > /sys/class/net/<network-interface>/device/sriov_numvfs
    

    Где:

    • <VF-number> – количество VF, которые требуется создать на PF.

    • <network-interface> – имя сетевого интерфейса, для которого будут созданы VF.

  3. Убедитесь, что VF были добавлены:

    lspci | grep Ethernet
    

    Пример вывода команды:

    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    
  4. Сделайте VF постоянными, создав правило udev для сетевого интерфейса, который использовался для создания VF. Для интерфейса <network-interface> создайте файл /etc/udev/rules.d/<network-interface>.rules и добавьте следующую строку:

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"
    

    Правило выше гарантирует, что два VF, использующих драйвер ixgbe, будут автоматически доступны для интерфейса <network-interface> при запуске хоста. Если постоянные устройства SR-IOV не нужны, пропустите этот шаг.

    Внимание

    В настоящее время описанная выше настройка не работает правильно при попытке сделать VF постоянными на адаптерах Broadcom NetXtreme II BCM57810. Кроме того, подключение VF на основе этих адаптеров к виртуальным машинам Windows в настоящее время ненадежно.

  5. Подключите одно из недавно добавленных устройств интерфейса VF к запущенной ВМ:

    virsh attach-interface <example-vm> hostdev 0000:82:10.0 --managed --live --config
    

Примечание

Если процедура прошла успешно, гостевая ОС обнаружит новую карту сетевого интерфейса.

Поддерживаемые устройства для назначения SR-IOV#

Функция SR-IOV доступна не на всех сетевых устройствах.

Перечень устройств, поддерживающих SR-IOV, на Sberlinux OS Server:

  • Intel 82599ES 10 Gigabit Ethernet Controller - использует драйвер ixgbe;

  • Intel Ethernet Controller XL710 Series - использует драйвер i40e;

  • Mellanox ConnectX-5 Ethernet Adapter Cards - использует драйвер mlx5_core;

  • Intel Ethernet Network Adapter XXV710 - использует драйвер i40e;

  • Intel 82576 Gigabit Ethernet Controller - использует драйвер igb;

  • Broadcom NetXtreme II BCM57810 - использует драйвер bnx2x.