ovirt 顯卡直通搭建記錄

參考鏈接:

ovirt:

https://www.ovirt.org/documentation/install-guide/appe-Configuring_a_Host_for_PCI_Passthrough.html

https://www.ovirt.org/documentation/admin-guide/chap-Hosts.html

wiki百科

https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)#Nvidia_GPU%E7%9B%B4%E9%80%9A%E5%88%B0Windows_%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%97%B6%E5%8F%91%E7%94%9F%22%E9%94%99%E8%AF%AF43:%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5%E2%80%9D



前言:之前測試了好長一段時間nVidia的也沒實現,結果是報43的問題,嘗試好多方法都未果,後來直接用AMD HD6450 一次就成功了,也測試過AMD HD6450和AMD HD7480一起直通到同一臺虛擬機以及不同虛擬機都是正常的。


測試環境:centos7

                    ovirt4.3 ( 4.2也適用)

                    顯卡 AMD HD 6450 

                    cpu虛擬化技術已開

 

正文開始:

        1,進入主板BIOS 打開 Intel VT-d或 AMD-VI, 我當時是在北橋(north bridge)找到的,  這一步可以等重啓再做。

 

        2, 對於Intel,編輯grub文件來啓用IOMMU,在GRUB_CMDLINE_LINUX末尾添加intel_iommu=on

 

 # vi /etc/default/grub
   GRUB_CMDLINE_LINUX=....... .......intel_iommu=on

      

            對於AMD,編輯grub文件來啓用IOMMU,在GRUB_CMDLINE_LINUX末尾添加amd_iommu=on

 

 # vi /etc/default/grub
  GRUB_CMDLINE_LINUX=....... .......amd_iommu=on

 

     3, 如果由於硬件不支持中斷重新映射而導致傳遞失敗,則可以考allow_unsafe_interrupts在虛擬機受信任的情況下啓用該選項。

 

           

 # vi /etc/modprobe.d/local.conf
  options vfio_iommu_type1 allow_unsafe_interrupts=1


 

      4,刷新 grub.cfg ,若系統是EFI引導的應該在其他路徑,嘗試使用find  /  -name grub.cfg 查找所在路徑,例如: /boot/efi/grub/grub.cfg

 

            # grub2-mkconfig -o /boot/grub2/grub.cfg
 
            # grub2-mkconfig -o /boot/grub/grub.cfg


         

             做到這裏應該是要重啓,可先不重啓,先做後面的步驟再重啓。

 

       5. (1) 登錄管理門戶,單擊計算→ 虛擬機, 虛擬機先要關機。

           (2) 單擊虛擬機名稱以打開主機設備,單擊增加設備

           (3) 找到顯卡設備的視頻和音頻控制器,記錄它的廠商號:產品號,如圖10de:0a6310de:0be3 ,

                並且添加,若增加失敗請關閉虛機或重啓主機。

                     圖片僅供參考,不是實驗截圖,實驗使用amd的,這裏顯示是nVidia的

202003171009317241.png

 

 

            6, 單擊 計算 -> 主機 ,編輯主機->內核,修改內核命令行(若灰色,點擊重置,並且重新勾選:Hostdev 透傳和 SR-IOV,Hostdev 透傳和 SR-IOV,Hostdev 透傳和 SR-IOV,Hostdev 透傳和 SR-IOV,並且在將相應驅動加入黑名單和綁定pci-stub到前面的uuid號,內核命令行加入:

 pci-stub.ids=10de:0a63,10de:0be3 rdblacklist=nouveau


                     

            7,單擊確認-->維護->重新安裝主機->重啓


 

            8,重啓後可以用lspci -nnk 查看顯卡內核驅動有沒有綁定到pci-stub或者vfio-pci, 據我觀察一般虛擬機啓動後就會變成vfio-pci

                                         圖片僅供參考,不是實驗截圖,實驗使用amd的,這裏顯示是nVidia的

                     202003171121351614.png


                                   

              9,編輯虛擬機,把ovirt4.3仿真機最好改成q35, 4.2的q35會報錯,可以用默認的,或者使用rhel7.6-q35, 視頻類型改成VGA ,此時就無法使用spice協議了,只能用VNC或者RDP協議,顯卡設備應該直通到虛擬機上面了,之後就可以去官網下載對於的驅動安裝了,window10系統貌似自帶驅動,裝完可遇過驅動代碼31的錯誤,去官網下載對應顯卡的驅動重新安裝,然後就解決了。


 

             其他相關問題: 

   1,要使用模擬器,目前測試雷電模擬器是可以的,如果提示opengl版本過低,請用rdp協議連接(個人猜測用VNC協議amd的顯卡就不會直接使用,而是使用基本的顯示),其他模擬器用到虛擬化的可能會出現藍屏(如mumu模擬器),VMware也是這樣,可能與虛擬化有關,但我已開啓嵌套虛擬化。

 

   2,虛擬機仿真機如果不改成q35,驅動就會異常

 

           3,win7安裝驅動異常,原因未知,目前window10 是沒問題的。

     

           4,nVidia 顯卡驅動出現43問題,爲解決。下面是我參考baidu,google嘗試過的過程.

            (1)通過hook修改xml文件,屏蔽kvm的特性(QEMU 2.5.0和libvirt 1.3.3版本以上才行), 

                 ovirt4.2 會找不到hooking, 可以find / -name hooking.py 然後考到當前目錄,不過ovirt4.2沒有uefi所以也沒必要了。

                僅用於實驗,若報錯請查看是拼寫錯誤,縮進還是其他,然後進行修改。

 # cd /usr/libexec/vdsm/hooks/before_vm_start/


 # vi 50_passthough
   #!/usr/bin/python
  import hooking
  try:
      domxml = hooking.read_domxml()
      domain = domxml.getElementsByTagName('domain')[0]
      features = domxml.getElementsByTagName('features')[0]
      hyperv = domxml.getElementsByTagName('hyperv')[0]
      vender = domxml.createElement('vendor_id')
      vender.setAttribute('state', 'on')
      vender.setAttribute('value', 'sbsbsbnvidia')
      hyperv.appendChild(vender)
      kvm = domxml.createElement('kvm')
      hidden = domxml.createElement('hidden')
      hidden.setAttribute('state', 'on')
      kvm.appendChild(hidden)
      ioapic = domxml.createElement('ioapic')
      ioapic.setAttribute('driver','kvm')
      feautures.appendChild(ioapic)
      feature.appendChild(kvm)
      hooking.write_domxml(domxml)
  except:
    pass

                  

            (2)虛擬機要uefi啓動,只要ovirt4.3纔有這個選項,如果自己修改libvirtd,會導致vdsm無法啓動。

            (3)若還是不行,在xml增加rom文件,同理需要通過hook            

            下載對於顯卡的rom,https://www.techpowerup.com/vgabios

<hostdev>
     ...
     <rom file='/path/to/your/gpu/gpu.rom'/>
     ...
</hostdev>

                

          5,或者通過驅動補丁,地址 https://github.com/sk1080/nvidia-kvm-patcher


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章