Рубрики
KVM

esxi, qemu/kvm проброс видеокарт

Источники:

esxi:

Help needed with ESXi 6.0, GTX 960 Passthrough and "Code 43"
byu/vifino inhomelab
https://forums.servethehome.com/index.php?threads/troubleshooting-gpu-passthrough-esxi-6-5.12631/
Проброс видеокарты NVIDIA в VMware ESXi 6.0

Powershell выполнение сторонних скриптов:

Windows PowerShell. Выполнение сценариев отключено в этой системе

Патчи для nvidia:

(Вместо патча для qemu/kvm лутше использовать -cpu host,kvm=off или ) 
https://github.com/sk1080/nvidia-kvm-patcher - патч для драйверов nvidia 
https://github.com/sk1080/nvidia-kvm-patcher/blob/master/README.md - инструкция установки

qemu/kvm:

http://www.linux-kvm.org/page/HOWTO
http://libvirt.org/formatdomain.html
https://forums.linuxmint.com/viewtopic.php?f=231&t=229122
https://forums.linuxmint.com/viewtopic.php?t=212692
https://ycnrg.org/vga-passthrough-with-ovmf-vfio/
http://mirspo.blogspot.ru/2013/05/pci-passthrough-intel.html
http://linuxhub.ru/viewtopic.php?t=609
http://welinux.ru/post/7433/
https://www.howtoforge.com/using-kvm-on-ubuntu-gutsy-gibbon
https://linuxmint.com.ru/viewtopic.php?t=151
http://umvirt.ru/node/141
https://forum.sys-adm.in/?topic=4078.0
https://forum.sys-adm.in/index.php?PHPSESSID=mqhodn16eil9ddj6ut91tmfb41&board=8.0
https://wiki.debian.org/VGAPassthrough
https://habrahabr.ru/post/260791/
https://habrahabr.ru/post/211909/
https://habrahabr.ru/post/120717/
https://help.ubuntu.com/community/KVM/CreateGuests
https://losst.ru/ustanovka-kvm-ubuntu-16-04
KVM Windows XP install
https://www.suse.com/documentation/sles11/book_kvm/data/cha_qemu_running_devices.html https://wiki.archlinux.org/index.php/QEMU https://www.hippolab.ru/kvm-optimizaciya-raboty-s-pamyatyu-pri-pomoshchi-hugepages

drivers virto:

https://fedoraproject.org/wiki/Windows_Virtio_Drivers
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

esxi для работы NVIDIA

В файл вм *.vmx добавить :
_____________________________
SMBIOS.reflectHost = "TRUE" 
hypervisor.cpuid.v0 = FALSE"
pciHole.start = "1200"
pciHole.end = "2200"
____________________________

В конфиг esx
vi /etc/vmware/esx.conf

Powershell выполнение сторонних скриптов

PowerShell имеет несколько режимов выполнения, которые определяют, какой тип кода разрешается выполнять. 
Существует 5 различных режимов выполнения:
 
■ Ограниченный (Restricted): Значение по умолчанию. 
Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
 
■ Все подписанные (All Signed): Разрешено выполнение скриптов, имеющих цифровую подпись.
 
■ Удаленные подписанные (Remote Signed):
Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.

 ■ Неограниченный (Unrestricted): Разрешено выполнение любых скриптов. 
При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.

 ■ Обходной (Bypass): Ничего не блокируется, никакие предупреждения и запросы не появляются.

По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, 
PowerShell работает как интерактивная оболочка. Если вы ранее не настраивали PowerShell, 
то вместо работы скрипта вы увидите сообщение об ошибке, написанное красным шрифтом как на скриншоте ниже.
Windows PowerShell. 
Выполнение сценариев отключено в этой системе
Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную, 
запуск скрипта, и затем обратный возврат к ограниченной политике.
Set-ExecutionPolicy Unrestricted  -  изменения политики выполнения на неограниченную
Set-ExecutionPolicy Restricted - вернуть политику выполнения назад в ограниченный режим. Значение по умолчанию.
Set-ExecutionPolicy AllSigned - разрешено выполнение скриптов, имеющих цифровую подпись.
Set-ExecutionPolicy RemoteSigned - скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, 
                                   скрипты загруженные из Интернета - только при наличии цифровой подписи.
Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром
 -Force, например выполните команду:
Set-ExecutionPolicy Bypass -Force

Инструкция для установки патча на инсталлятор nvidia:

!!!! для QEMU/KVM лучше использовать специальные опции
-cpu host,kvm=off или 
1. Скачиваем драйвер nvidia. 
Запускаем установку и дожидаемся распаковки.
Выходим из установки драйвера.
C:/NVIDIA - тут распакованы драйверы. 
2. Устанавливаем  WDK/DDK на windows 
https://developer.microsoft.com/en-us/windows/hardware/download-kits-windows-hardware-development - WDK/DDK
4. Включить тестовый режим работы для windows
bcdedit.exe -set TESTSIGNING ON
5. Включаем powershell и выполняем скрипт
patcher.ps1 C:/NVIDIA/DisplayDriver/Version/Win10_64/International/Display.Driver
6. Ставим наточенный драйвер  (In C:/NVIDIA/DisplayDriver/Version)

KVM QENU опции запуска для NVIDIA
борьба с ошибкой 43

_______________________________

KVM:
-cpu host,kvm=off

_______________________________

Alternate Workaround (recent libvirt + qemu)

   ...
        
            ...
            
                
            
            ...
            
                ...
                
            
            ...
        
    ...

_______________________________

Включаем поддержку IOMMU в ядре

0)Для этого в файле /etc/default/grub меняю строку
GRUB_CMDLINE_LINUX="" 
на
GRUB_CMDLINE_LINUX="intel_iommu=on" 
или вот так и заодно отключить драйвер nouveau (nvidia)
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=nouveau quiet intel_iommu=on"
1)Обновляем загрузчик grub
update-grub 
2) После перезагрузки проверяем
dmesg | grep -i -e iommu -e dmar 

Добавление устройсва в blacklist
отключение драйвера устройства

0) lspci -vvn - выведет список устройств
lspci -vvn | grep nvidia - для NVIDIA
1) редактируем файл 
nano /etc/modprobe.d/blacklist.conf
2) добавим строку
blacklist snd-hda-intel 
blacklist nouveau
blacklist radeon
blacklist amdgpu
3) выполним команду
update-initramfs -u 
4) Убедится какой драйвер используется
lspci -k | grep -i -A 3 vga

Поиск устройств

lspci -k | grep -i -A 3 vga
lspci | grep VGA
lspci -nn | grep 02:00.
lspci -vv | grep -i flreset+
lspci -vv | less 
lspci -k -s 00:1b
find /sys/kernel/iommu_groups/ -type l
for a in /sys/kernel/iommu_groups/*; do find $a -type l; done
lsusb

KVM — добавить жесткий диск в виртуальную машину

    
      
      
      
    

hugepages и swap

Предположим нам нужно запустить виртуальную машину, 
отдав ей 4 гигабайта. 4 гигабайта = 4096 мегабайт.
4096 мегабайт / 2 мегабайта на страницу (размер одной hugepage) = 2048 страниц.
0) Получаем информацию:
cat /proc/meminfo - получаем информацию о настройках памяти
grep "Hugepagesize:" /proc/meminfo - получаем информацию о настройках HUGEPAGES
hugeadm --explain - получаем информацию о настройках HUGEPAGES
2) Проверяем включено ли HUGEPAGES
nano /etc/default/qemu-kvm
---------------
KVM_HUGEPAGES=1
---------------
2.1) Проверяем смонтировано ли  специальное устройство 
mount | grep huge - должны увидеть примерно следующие (( hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) ))
3) Настраиваем hugepages
nano /etc/sysctl.conf
---/etc/sysctl.conf---
vm.swappiness=0
vm.vfs_cache_pressure = 1000
vm.swappiness = 0
vm.nr_hugepages = 1024
kernel.shmmax = 2147483648
vm.hugetlb_shm_group = 0
vm.min_free_kbytes = 11264
---------------------
sysctl -p - применяем изменения без перезагрузки 
---------------------
Команды hugeadm
hugeadm --explain
hugeadm --pool-list
hugeadm --set-recommended-shmmax
hugeadm --pool-pages-min 2M:128M
hugeadm --pool-pages-max 2M:4500M
hugeadm --set-recommended-shmmax
hugeadm --set-recommended-min_free_kbytes 

Настройка сети:

brctl show - посмотреть доступные  бриджи
brctl addif br5 eno1 - добавить сетевую карту eno1 в br5

включаем forward,proxy_arp и отключаем ipv6:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl net.ipv6.conf.default.disable_ipv6=1
sysctl net.ipv6.conf.lo.disable_ipv6=1
применяем изменения без перезагрузки
sysctl -p 

nano /etc/network/interfaces - редактируем конфиг сети 
_____________________________ 
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual
dns-nameserver 192.168.15.1
dns-nameserver 8.8.8.8

auto br5
iface br5 inet static
address 192.168.15.253
broadcast 192.168.15.255
netmask 255.255.255.0
gateway 192.168.15.1
bridge_ports eno1
bridge_stp off
____________________________

/etc/init.d/networking restart - перезапуск сети

Установка KVM на linuxmint 18

0.Проверка системы
egrep -q '^flags.*(svm|vmx)' /proc/cpuinfo && echo virtualization extensions available
egrep '(vmx|svm)' /proc/cpuinfo
kvm-ok
dmesg | grep -i -e iommu -e dmar 
cat /proc/cpuinfo | grep svm
dmesg | grep AMD-Vi
lsmod | grep kvm
lsmod | grep vfio
dmesg | grep vfio
dmesg | grep VFIO
lspci -k | grep -i -A 3 vga
dmesg | grep -i vfio


1. Редактируем загрузчик
Добавляем поддержку для IOMMU (для АМД указать amd_iommu=on)
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=nouveau quiet intel_iommu=on"
update-grub 

2. Включаем vfio (нужно для успешного проброса видеокарт и т.д.)
nano /etc/initramfs-tools/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vhost-net

Применим: 
update-initramfs -u

Добавим видяшку:
nano /etc/modprobe.d/local.conf
options vfio-pci ids=10de:1185,10de:0e0a

3. Установка kvm
apt-get install qemu-kvm qemu  virt-viewer libvirt-bin ovmf  seabios qemu-utils hugepages bridge-utils python-virtinst libosinfo-bin

Для управления вм из GUI можно поставить:
apt-get install virt-manager
apt-get install gir1.2-spice-client-gtk-3.0 gir1.2-spice-client-gtk-2.0
apt-get install spice-client-gtk
apt-get install spice-vdagent

4. Создание виртуального жесткий диск для ВМ
Создадим образ диска размером 25GB.
qemu-img create mint-sarah.img 25G

Другим вариантом является создание образа диска в дефолтном 
для Qemu формате ‘qcow2’ используя следующую команду:
qemu-img create -f qcow2 mint-sarah.img 25G - создать диск на 25G
qemu-img create -f qcow2 hdd.img 10G - создать диск на 10G

Создадим образ диска размером 50GB.
fallocate -l 50G /media/user/win.img

Создать пустой диск 4GB:
dd if=/dev/zero of=disk01.img bs=1G count=4

5. Запуск ВМ 
0)Запуск ВМ QEMU
для 32-х битной системы:
qemu-system-i386 -hda mint-sarah.img -boot d -cdrom /home/chocobo/linuxmint-18-cinnamon-32-bit.iso -m 1024

для 64-х битной системы:
qemu-system-x86_64 -hda mint-sarah.img -boot d -cdrom /home/chocobo/linuxmint-18-cinnamon-64-bit.iso -m 1024

Таким образом мы запускаем ВМ с виртуальным HDD и cd-rom в котором смонтирован образ диска, 
а также 1Gb оперативной памяти на борту

После установки - загрузить VM в дальнейшем можно будет так:
qemu -hda mint-sarah.img -m 640

1) Запуск ВМ KVM
kvm -hda disk01.img -cdrom os.iso -m 512 -boot d -vnc IP:1
kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01 -net tap -nographic -daemonize
kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01,model=rtl8139 -net tap -nographic -daemonize
kvm -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97 -hda hdd.img
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97 -hda hdd.img -boot d (загрузка с диска hdd.img)

2)  Запуск/настройка  ВМ virsh
Файлы конфигураций:
по умолчанию конфигурации storage хранятся тут /etc/libvirt/storage/
по умолчанию есть default.xml — хранилище на файловой системе в /var/lib/libvirt/images
Все конфигурации виртуальных машин хранятся в /etc/libvirt/qemu/ 


Встроенная помощь по командам:
virsh -c qemu:///system help

Посмотреть все пулы:
virsh pool-list --all

Добавляем свой pool c именем qemu-test-storage:
*-as создает хранилище аналогичное дефолту, т.е. по конфигурации такое же как в default.xml
virsh pool-define-as qemu-test-storage dir --target /home/username/qemu-test-storage/

По умолчанию пул не запущен, стартуем:
virsh pool-start qemu-test-storage

Добавляем созданный пул в автостарт:
virsh pool-autostart qemu-test-storage

Список ВМ:
virsh list -all 

Создание ВМ:
virt-install --connect qemu:///system --arch=x86_64 -n vm4 -r 2048 --vcpus=1 --disk path=/dev/vg0/lv4 -c /mnt/Iso/win_7_professional_amd64.iso --vnc --noautoconsole --os-type windows --os-variant win7 --network=bridge:br0

Создание ВМ:
virt-install --connect qemu:///system --arch=x86_64 -n vm7 -r 2048 --vcpus=1 --disk path=/dev/vg0/lv7,device=disk,bus=virtio -c /mnt/Iso/win_7_professional_amd64.iso --vnc --noautoconsole --os-type windows --os-variant win7 --network=bridge:br0 --disk path=/mnt/Iso/virtio-win-1.1.11-0.iso,device=cdrom,perms=ro

Клонирование настроек vsrv1 в vsrv2: 
virt-clone -o vsrv1 -n vsrv2 -f vsrv2.img --connect=qemu:///system

Редактирование/настройка ВМ:
virsh -c qemu:///system edit vm7

Посмотреть статус установленных ВМ:
virsh -c qemu:///system list --all

Запустить ВМ vsrv1:
virsh -c qemu:///system start vsrv1

Послать команду завершения работы ВМ:
virsh -c qemu:///system shutdown vsrv1

Принудительно завершить работу ВМ:
virsh -c qemu:///system destroy vsrv1

Удалить ВМ:
virsh -c qemu:///system undefine vsrv1

Список сетей:
virsh net-list --all

Узнать параметры подключения к ВМ:
virsh vncdisplay name_VM

Подключится к ВМ:
virt-viewer name_VM 

Добавление пользователя в группу libvirtd :

gpasswd -a ПОЛЬЗОВАТЕЛЬ libvirtd

Варианты устанавливаемых систем:

 
osinfo-query os | less

Создания ВМ:

virt-install -n vsrv1 -r 384 -f vsrv1.img -s 10 -c ubuntu-9.04-server-amd64.iso --accelerate --os-type=linux --os-variant=generic26 -v --vnc -w bridge:br0

где:
-n vsrv1 — имя ВМ;
-r 384 — выделяемый объем ОЗУ для нее;
-f vsrv1.img — файл, являющийся виртуальный жестким диском для гостевой ОС;
-s 10 — объем этого диска в гигабайтах;
-c ubuntu-9.04-server-amd64.iso — образ cd дистрибутива гостевой ОС, подключаемый как виртуальный cdrom;
--accelerate --os-type=linux --os-variant=generic26 -v — ускоряем, оптимизируем ВМ для конкретной гостевой ОС и задействуем аппаратные возможности виртуализации;
--vnc — запускаем для ВМ vnc-сервер;
-w bridge:br0 — указываем использовать сетевой мост.

Создания ВМ:

 
virt-install --virt-type=kvm --name centos7 --ram 2048 --vcpus=2 --os-variant=rhel7 --hvm --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso --network=bridge=br0,model=virtio --graphics vnc --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

где:
sudo virt-install - создание ВМ;
--virt-type=kvm - тип виртуализации, в нашем случае kvm;
--name centos7 - имя новой машины;
--ram 2048 - количество памяти в мегабайтах;
--vcpus=2  - количество ядер процессора;
--os-variant=rhel7 - тип операционной системы;
--hvm - вид контейнера ( Может быть PV или HVM)
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso - установочный образ системы;
--network=bridge=br0,model=virtio - сетевой мост, который мы настроили ранее;
--graphics vnc - способ получения доступа к графическому интерфейсу ( у нас VNC);
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2 - адрес нового жесткого диска для этой виртуальной машины;

Создания ВМ:

$ virt-install --connect qemu:///system -n debian_guest -r 512 --arch=i686 --vcpus=1 --os-type=linux --os-variant=debiansqueeze --disk debian-6.0.1a-i386-netinst.iso,device=cdrom --disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw --network=default,model=virtio --hvm --accelerate --vnc

Подробно разберём параметры, которые мы указали:

--connect qemu:///system URL, по которому мы подключаемся к KVM. Подключаться можно через ssh.
-n debian_guest Имя гостевой системы.
-r 512 Выделяемый объём оперативной памяти в мегабайтах.
--arch=i686 Архитектура гостевой операционной системы.
--vcpus=1 Количество виртуальных процессоров, доступных гостю.
--os-type=linux --os-variant=debianlenny Специфичные для данной операционной системы параметры.
--disk debian-6.0.1a-i386-netinst.iso,device=cdrom Загружаемся с диска, образ которого указали.
--disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw Создаём образ системы размером 2Гб, который сразу помещаем на диск (можно создать образ нулевого размера, но тогда возможна фрагментация, что получается несколько медленнее). Формат простой, можно сделать с dd файл. Драйвер диска virtio, использовать лучше virtio, чем ide: производительность их отличается если не на порядок, то в разы.
--network=default,model=virtio Сетевые настройки по умолчанию. В этом случае libvirt создаст мост, сделает dhcp сервер и выдаст через него адрес для доступа виртуальной машины.
--hvm Полная виртуализация — то есть, можно использовать собственные ядра.
--accelerate Работа через /dev/kvm.
--vnc Запускаем VNC, чтобы подключаться к текстовой консоли.

Редактирование конфига:

 
virsh edit name_VM - отредактировать ВМ name_VM (автопроверка конфига ВМ после редактирования)
nano /etc/libvirt/qemu/mywin.xml - (!!!автопроверки нету !!! используй virsh edit) открытие редактором ВМ mywin.xml 
xed /etc/libvirt/qemu/mywin.xml - (!!!автопроверки нету !!! используй virsh edit) открытие графическим  редактором ВМ mywin.xml 

Пример конфига:


  mywin
  c2f9f250-1f0f-4d0e-abc0-2d276da16036
  12521472
  12521472
  8
  
    hvm
    /usr/share/OVMF/OVMF_CODE.fd
    /var/lib/libvirt/qemu/nvram/mywin_VARS.fd
    
  
  
    
    
    
      
    
  
  
    Broadwell
    
  
  
    
    
    
  
  destroy
  restart
  restart
  
    
    
  
  
    /usr/bin/kvm-spice
    
      
      
      
      
      

Антидетект что система виртуальная

0) virsh edit VM_NAME

1) Удалить первую строку и заменить ее


2) Теперь пройдите до самого конца прямо перед закрывающим тегом домена (  ) и добавьте: