среда, 31 марта 2021 г.

Руководство администратора Proxmox VE R 6.3 Глава 10.9

Proxmox VE Administration Guide

Виртуальные машины Qemu/KVM

  1. Эмулированные устройства и паравиртуализированные устройства
  2. Параметры Виртуальных Машин
  3. Миграция
  4. Копии и клоны
  5. Шаблоны виртуальных машин
  6. Generation ID виртуальной машины
  7. Импорт ВМ и образов дисков
  8. Поддержка Cloud-Init
  9. Проброс PCI(e)
  10. Hookscripts
  11. Гибернация
  12. Управление VM с помощью qm
  13. Конфигурация
  14. Блокировки
  1. Проброс PCI(e)

    Проброс PCI(e) - это механизм, позволяющий виртуальной машине управлять устройством PCI(e) хоста. Это может иметь некоторые преимущества перед использованием виртуализированного оборудования, например, меньшая задержка, более высокая производительность,или другие функции (например, разгрузка).
    Но если вы передадите устройство на виртуальную машину, вы больше не сможете использовать это устройство на хосте или в любой другой ВМ.
    1. Общие требования

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

      Аппаратное обеспечение
      Ваше "железо" должно поддержать IOMMU (I/O Memory Management Unit) прерывания переназначения, это касается CPU и материнской платы.
      Как правило, его поддерживают системы Intel с VT-d и системы AMD с AMD-Vi. Но не гарантируется, что все будет работать из коробки из-за плохой аппаратной реализации и отсутствия или низкого качества драйверов.
      Кроме того, оборудование серверного уровня часто имеет лучшую поддержку, чем оборудование потребительского уровня, но даже в этом случае, многие современные системы могут его поддерживать.
      Обратитесь к поставщику оборудования, чтобы проверить, поддерживается ли этот функционал в Linux для вашей конкретной сборки.

      Конфигурация
      Убедившись, что ваше оборудование поддерживает проброс, вам нужно будет выполнить некоторую настройку, чтобы включить проброс PCI(e).

      IOMMU
      IOMMU необходимо активировать в командной строке ядра, раздел 3.11.5.
      Параметры командной строки:
      для процессоров Intel:
      intel_iommu=on
      для процессоров AMD:
      amd_iommu=on
      Модули ядра
      Вы должны убедиться, что следующие модули загружены. Этого можно добиться, добавив их в "etc/modules"
      vfio
      vfio_iommu_type1
      vfio_pci
      vfio_virqfd
      После изменения всего, что связано с модулями, вам необходимо обновить файл initramfs . На Proxmox VE это можно сделать, выполнив:
      # update-initramfs -u -k all
      Завершение настройки
      Перезагрузитесь, чтобы изменения вступили в силу, и убедитесь, что проброс действительно включен.
      # dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
      должен отображать, что IOMMU, Directed I/O или Interrupt Remapping включены, в зависимости от аппаратного обеспечения и ядра точное сообщение может отличаться.
      Также важно, чтобы устройства, которые вы хотите пробросить, находились в отдельной группе IOMMU . Это может быть проверено с помощью:
      # find /sys/kernel/iommu_groups/ -type l
      Это нормально, если устройство находится в группе IOMMU вместе со своими функциями (например, графический процессор с HDMI Audioустройство) или вместе с его корневым портом или мостом PCI(e).
      Слоты PCI (e)
      Некоторые платформы по-разному обрабатывают свои физические слоты PCI (e). Так что иногда бывает полезно вставить карту в другой слот PCI (e), если вы не получите желаемое разделение групп IOMMU.


      Небезопасные прерывания
      Для некоторых платформ может потребоваться разрешить небезопасные прерывания. Для этого добавьте следующую строку в файл с расширением '.conf' в каталоге /etc/modprobe.d/:
      options vfio_iommu_type1 allow_unsafe_interrupts=1
      Имейте в виду, что эта опция может сделать вашу систему нестабильной.

      Примечание к пробросу GPU
      Невозможно отобразить буфер фрейм графического процессора через NoVNC или SPICE в веб интерфейсе Proxmox VE.
      Если вы пробрасываете GPU или vGPU и вам желателен графический вывод, необходимо физически подключить монитор к карте или настроить программное обеспечение удаленного рабочего стола (например, VNC или RDP) внутри гостевой системы.
      Если вы хотите использовать графический процессор в качестве аппаратного ускорителя, например, для программ, использующих OpenCL или CUDA, в этом нет необходимости.
    2. Проброс устройств хост системы

      Наиболее часто используемый вариант проброса PCI(e) - это проброс всей карты PCI(e), например, GPU или сетевой карты.

      Настройка хоста
      В этом случае хост не должен использовать карту. Для этого есть два метода:
      • передать идентификаторы устройств в параметры модулей vfio-pci, добавив
        options vfio-pci ids=1234:5678,4321:8765
        в файл .conf в /etc/modprobe.d/, где 1234:5678 и 4321:8765 - идентификаторы поставщика и устройства, полученные:
        # lspci -nn
      • полностью занести драйвер в черный список на хосте, гарантируя, что он может быть свободно проброшен, с помощью:
        blacklist DRIVERNAME
        в файле .conf в /etc/modprobe.d/.
      Для обоих методов вам необходимо снова обновить initramfs, как было описано выше, и после этого перезагрузиться.

      Проверка конфигурации
      Чтобы проверить, были ли ваши изменения успешными, вы можете использовать
      # lspci -nnk
      и проверьте запись вашего устройства. Если вывод сообщает:
      Kernel driver in use: vfio-pci
      или строка 'in use' полностью отсутствует, устройство готово к использованию для проброса.

      Настройка ВМ
      Для проброса устройства вам необходимо установить опцию hostpciX в конфигурации виртуальной машины, например, выполнив:
      # qm set VMID -hostpci0 00:02.0
      Если ваше устройство имеет несколько функций (например, '00:02.0' и '00:02.1'), вы можете передавать их все вместе с сокращенным синтаксисом '00:02'

      В зависимости от устройства и гостевой ОС могут потребоваться некоторые параметры:
      • x-vga=on|off отмечает устройство PCI(e) как основной графический процессор виртуальной машины. Если он включен, vga-configuration параметр будет проигнорирован
      • pcie=on|off указывает Proxmox VE использовать порт PCIe или PCI. Некоторым комбинациям гостей/устройств требуется PCIe а не PCI. PCIe доступен только для машин типа q35.
      • rombar=on|off делает ПЗУ прошивку устройства видимой для гостя. По умолчанию включено. Некоторым устройствам PCI(e) требуется его отключение.
      • romfile=<path> это необязательный путь к файлу ROM, который будет использовать устройство. Используется относительный путь от /usr/share/kvm/.
      Пример
      Пример проброса PCIe в качестве основного GPU
      # qm set VMID -hostpci0 02:00,pcie=on,x-vga=on
      Прочие соображения
      При пробросе GPU наилучшая совместимость достигается при использовании q35 в качестве типа машины, OVMF(EFI для виртуальных машин) вместо SeaBIOS и PCIe вместо PCI. Обратите внимание: если вы хотите использовать OVMF для проброса GPU, GPU должен иметь ПЗУ с поддержкой EFI, в противном случае вместо этого используйте SeaBIOS.
    3. SR-IOV

      Другим вариантом проброса устройств PCI(e) - использование функций аппаратной виртуализации вашего устройства, если таковые имеются.

      SR-IOV (Single-Root Input/Output Virtualization) позволяет использовать одно устройство для предоставления нескольких VF (Virtual Functions) в системе. Каждый из этих VF может использоваться в другой виртуальной машине с полным набором аппаратных функций и так же улучшая производительность и уменьшая задержки, по сравнению с виртуализированными устройствами.

      В настоящее время наиболее распространенным примером использования этого являются сетевые адаптеры (Network Interface Card) с поддержкой SR-IOV, которые могут предоставлять несколько VF на физический порт. Это позволяет использовать такие функции, как выгрузка контрольной суммы и т.д., для использоваться внутри виртуальной машины, уменьшая накладные расходы CPU (хоста).

      Настройка хост системы
      Как правило, существует два метода включения виртуальных функций на устройстве.
      • иногда есть опция для модуля драйвера, например, для некоторых устройств Intel
        max_vfs=4
        который может быть помещен в файл с расширением .conf, находящийся в /etc/modprobe.d/. (Не забудьте обновить initramfs после того)

        Пожалуйста, обратитесь к документации вашего модуля драйвера для получения точных параметров и опций.
      • Второй, более общий подход - использование sysfs. Если устройство и драйвер это поддерживают, вы можете изменять количество VF на лету. Например, чтобы настроить 4 VF на устройстве 0000:01:00.0, выполните:
        # echo 4 > /sys/bus/pci/devices/0000:01:00.0/sriov_numvfs
        Чтобы сделать это изменение постоянным, вы можете использовать пакет Debian 'sysfsutils`. После установки настройте его через /etc/sysfs.conf или `FILE.conf ' в /etc/sysfs.d/.

      Настройка ВМ
      После создания VF вы должны увидеть их как отдельные устройства PCI(e) при выводе с помощью lspci. Получать их ID и передать их как обычное устройство PCI(e) Раздел 10.9.2.

      Прочие соображения
      Для этой функции особенно важна поддержка платформы. Может потребоваться включить эту функцию Сначала в BIOS/EFI или использовать определенный порт PCI(e) для ее работы. В случае сомнений обратитесь к руководству по эксплуатации платформы или свяжитесь с ее продавцом.
    4. Устройства-посредники (vGPU, GVT-g)

      Устройства-посредники - это еще один метод доступа к функциям и производительности физического оборудования для виртуализированных устройств. Они чаще всего встречаются в виртуализированных конфигурациях графических процессоров, таких как Intel GVT-g и Nvidia vGPU, используя их технологии GRID.

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

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

      Драйверы Intel для GVT-g интегрированы в ядро и должны работать с Intel Core процессорами 5-го, 6-го и 7-го поколений, а также с процессорами Xeon E3 v4, E3 v5 и E3 v6.
      Чтобы включить его для Intel Graphics, вы должны обязательно загрузить модуль kvmgt (например, через /etc/modules) и включить его в командной строке ядра раздел 3.11.5 добавив следующий параметр:
      i915.enable_gvt=1
      После этого не забудьте обновить initramfs раздел 10.9.1., и перезагрузите ваш хост.

      настройка ВМ
      Чтобы использовать устройство-посредник, просто укажите mdev свойство на hostpciX опции конфигурации VM.
      Вы можете получить поддерживаемые устройства через sysfs. Например, чтобы перечислить поддерживаемые типы для устройства 0000:00:02.0 просто выполните:
      # ls /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types
      Каждая запись представляет собой каталог, содержащий следующие важные файлы:
      • available_instances содержит количество все еще доступных экземпляров этого типа, каждое использование mdev в виртуальной машине.уменьшает это значение.
      • description содержит краткое описание возможностей типа
      • create это конечная точка для создания такого устройства, Proxmox VE сделает это автоматически за вас, если hostpciX параметр mdev настроен.
      Пример конфигурации с Intel GVT-g vGPU (Intel Skylake 6700k):
      # qm set VMID -hostpci0 00:02.0,mdev=i915-GVTg_V5_4
      С этимb настройками Proxmox VE автоматически создает такое устройство при запуске виртуальной машины и очищает его снова, когда ВМ останавливается.


Комментариев нет:

Отправить комментарий