在用proxmox加云终端盒子测试完桌面虚拟机以后,看到某qq群有人问能不能虚拟化gpu,用来做3D设计。正好闲置的台式电脑有amd R9 290X及R9 390X两块显卡,由于挖矿太耗电,已经放弃挖矿(挖以太币)。计划用此台式机,安装proxmox,做好设置并安装好虚拟机,并把宿主机的gpu资源透传给此虚拟机。如果透传正确,最起码能在虚拟机识别AMD显卡。按照这个思路,回到家马上开干。--猛戳此处有惊喜!!!

◎宿主机上的操作

安装proxmox之前,需要确保cpu开启虚拟化支持,这个操作在bios里边完成,请按主板的说明书进行操作,一般不会有什么障碍。接下来,用u盘安装proxmox,我用的主板有点奇葩,需要对引导“BOOT”下的“安全”做更改,默认是windows,改成“其它操作系统”,否则一直无法用u盘引导及安装。

在安装过程中,设置好proxmox的ip地址及账号密码,能用浏览器登录并进行后台管理。以ssh登录系统,修改文件/etc/apt/sources.list.d/pve-enterprise.list ,把唯一的哪行内容注释掉(不注释的话,web界面登录进行管理时会提示软件更新失败,毕竟咱没花钱订阅)。执行命令”apt-get update && apt-get upgrade”,有利于随时对软件包进行更新。

由于gpu虚拟化还未能在proxmox的web管理界面提供支持,因此,要启用这个功能,得登录proxmox所在宿主机的系统debian,进行如下操作:

○修改grub(与centos稍有差异)。编辑文件/etc/default/grub,修改行“GRUB_CMDLINE_LINUX_DEFAULT="quiet",使其为“GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on" 。执行指令“update-grub” 使修改生效。root@pve55:~# update-grub

Generating grub configuration file ...

Found linux image:   /boot/vmlinuz-4.15.17-1-pve

Found initrd image:   /boot/initrd.img-4.15.17-1-pve

Found memtest86+ image:   /boot/memtest86+.bin

Found memtest86+ multiboot image:   /boot/memtest86+_multiboot.bin

Adding boot menu entry for EFI firmware   configuration

done

为检验其效果,用一下指令验证其有效性。root@pve55:~# dmesg   | grep -e DMAR -e IOMMU

[      0.000000] ACPI: DMAR 0x00000000C88CAD70 0000B8 (v01 INTEL  HSW        00000001 INTL 00000001)

[      0.000000] DMAR: Host address width 39

[      0.000000] DMAR: DRHD base: 0x000000fed90000 flags: 0x0

[      0.000000] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap   c0000020660462 ecap f0101a

[      0.000000] DMAR: DRHD base: 0x000000fed91000 flags: 0x1

[      0.000000] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap   d2008020660462 ecap f010da

[      0.000000] DMAR: RMRR base: 0x000000c883b000 end: 0x000000c8847fff

[      0.000000] DMAR: RMRR base: 0x000000cb000000 end: 0x000000cf1fffff

[      0.000000] DMAR-IR: IOAPIC id 8 under DRHD base  0xfed91000 IOMMU 1

[      0.000000] DMAR-IR: HPET id 0 under DRHD base 0xfed91000

[      0.000000] DMAR-IR: Queued invalidation will be enabled to support   x2apic and Intr-remapping.

[      0.000000] DMAR-IR: Enabled IRQ remapping in x2apic mode

如果执行“dmesg | grep -e DMAR -e IOMMU”没有输出,则表明存在问题。极有可能是bios设置的问题,需要启动cpu的vt-x支持。对于amd类型的cpu,/etc/default/grub文件对于修改为“GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on”。该项目还支持几个值,可根据情况增加。

○新增模块。修改文件/etc/modules,加入如下的行(默认为空):vfio

vfio_iommu_type1

vfio_pci

vfio_virqfd

○IOMMU隔离校验。执行指令 “find /sys/kernel/iommu_groups/ -type l”,有输出则表示正常。root@pve55:~# find   /sys/kernel/iommu_groups/ -type l

/sys/kernel/iommu_groups/7/devices/0000:00:1b.0

/sys/kernel/iommu_groups/5/devices/0000:00:16.0

/sys/kernel/iommu_groups/13/devices/0000:03:00.0

/sys/kernel/iommu_groups/3/devices/0000:00:03.0

/sys/kernel/iommu_groups/11/devices/0000:00:1d.0

/sys/kernel/iommu_groups/1/devices/0000:01:00.1

/sys/kernel/iommu_groups/1/devices/0000:00:01.0

/sys/kernel/iommu_groups/1/devices/0000:01:00.0

/sys/kernel/iommu_groups/8/devices/0000:00:1c.0

/sys/kernel/iommu_groups/6/devices/0000:00:1a.0

/sys/kernel/iommu_groups/4/devices/0000:00:14.0

/sys/kernel/iommu_groups/12/devices/0000:00:1f.3

/sys/kernel/iommu_groups/12/devices/0000:00:1f.2

/sys/kernel/iommu_groups/12/devices/0000:00:1f.0

/sys/kernel/iommu_groups/2/devices/0000:00:02.0

/sys/kernel/iommu_groups/10/devices/0000:00:1c.3

/sys/kernel/iommu_groups/10/devices/0000:04:00.0

/sys/kernel/iommu_groups/0/devices/0000:00:00.0

/sys/kernel/iommu_groups/9/devices/0000:00:1c.2

○查看gpu显卡的地址,用于后边对虚拟机进行配置。查看硬件信息的指令为“lspci -i”,执行后,会有大量的信息输出,我们只需关心gpu显卡。

数字“01:00.0”就是gpu显卡地址,记下这个数值,以备将来使用。

○gpu直通

l用刚刚得到的数值做参数,执行 lspci -n -s 01:00 ,得到两行输出,将该输出重定向到文件/etc/modprobe.d/vfio.conf.root@pve55:~# lspci   -n -s 01:00

01:00.0 0300: 1002:67b0 (rev 80)

01:00.1 0403: 1002:aac8root@pve55:~#echo "options vfio-pci ids=10de:1381,10de:0fbc" > /etc/modprobe.d/vfio.conf

l驱动黑名单echo "blacklist radeon" >> /etc/modprobe.d/blacklist.confecho "blacklist nouveau" >> /etc/modprobe.d/blacklist.confecho "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf

◎创建windows虚拟机

在进行正式创建之前,可预先准备好2个镜像文件。一个windows 10 iso,另外一个virtio-win iso.将这两个iso文件复制到proxmox所在系统的目录” /var/lib/vz/template/iso/”,用这种方式比从web界面上传iso要可靠。root@pve55:~# ls   -al /var/lib/vz/template/iso/

total 8574028

drwxr-xr-x 2 root root       4096 Aug 17 15:01 .

drwxr-xr-x 5 root root       4096 Aug 17 14:25 ..

-rw-r--r-- 1 root root 4159854592 Aug   17 10:59 cn_windows_10_education_x64_dvd_6847843.iso

-rw-r--r-- 1 root root 4303300608 Jul   16 18:04 cn_windows_10_multiple_editions_x64_dvd_6848463.iso

-rw-r--r-- 1 root root  316628992 Aug 17 14:52virtio-win-0.1.141.iso

○web管理界面创建虚拟机  --猛戳此处有惊喜!!!

浏览器访问 https://172.16.35.55:8006登录系统,点击页面右上角按钮“创建虚拟机”,操作系统选windows。下拉列表框选择前一步手工上传的iso文件,如下图所示:

往下创建硬盘,所设置的项如下图:

后边几步按实际情况分配资源,只到网络这步,选virtio(半虚拟化),提交完成创建。不过,这还没完,还要几个步骤需要执行(普通用途的虚拟机创建到这里就完成了):

l修改虚拟机的BIOS为OVMF(默认是SeaBIOS),其操作如下图所示:

l添加EFI磁盘,可不调整大小。如果不创建,后边安装windows操作系统很可能失败。

l添加cd-rom,并将其与virtio驱动程序相关联。不执行此操作,在安装windows可能不能识别硬盘,无法往下继续进行。

l修改“显示”项,为了配合云终端盒子,这里我选”Spice”。

l命令行登录系统,打开文件/etc/pve/nodes/pve55/qemu-server/100.conf ,其内容由上述操做所生成。root@pve55:~# more   /etc/pve/nodes/pve55/qemu-server/100.conf

bios: ovmf

bootdisk: scsi0

cores: 4

efidisk0:   local-lvm:vm-100-disk-2,size=128K

ide0:   local:iso/virtio-win-0.1.141.iso,media=cdrom,size=309208K

ide2:   local:iso/cn_windows_10_education_x64_dvd_6847843.iso,media=cdrom

memory: 8196

name: s50

net0:   virtio=4E:62:86:E8:C4:A0,bridge=vmbr0

numa: 0

ostype: win10

scsi0:   local-lvm:vm-100-disk-1,cache=writethrough,size=100G

scsihw: virtio-scsi-pci

smbios1:   uuid=de02509a-298b-4150-b225-4be73f471210

sockets: 1

vga: qxl

还有几个项,不能从浏览器添加进来,需要手工编辑并加入,其内容如下(加在100.conf文件的末尾):machine: q35hostpci0: 01:00,pcie=1,x-vga=onargs: -device intel-hda,id=sound5,bus=pci.0,addr=0x18hostpci0: 01:00,pcie=1,x-vga=on

usb1:spice

usb2:spice

○安装windows虚拟机

Web管理界面点击已经创建好的虚拟机,启动à控制台。

弹出windows安装界面,按常规安装windows操作系统的方法一步步往下进行。安装过程有两个鼠标轨迹,有点恼人。等系统安装完以后,把驱动spice-guest-tool安装上,就没有这个问题。

往下几步,到选择安装位置的界面,没有把硬盘给识别出来,需要进行处理加载驱动处理。

与官方视频介绍稍有差异,这里进去以后,选vioscsi,先把硬盘驱动器识别上。

进度条假意来回走动,向人昭示是真的在扫描驱动,片刻,硬盘驱动器痴线在界面中,可以往下继续进行。

○解决屏幕上两个鼠标问题。

安装好的虚拟机,自动识别网卡并获得ip地址,用浏览器访问http://www.spice-space.org,下载spice-guest-tools工具包,点击几次“一下步”即可完成。

运行完毕,屏幕分辨率显示正常,屏幕鼠标合二为一。

◎虚拟机安装gpu显卡驱动

最开始,用的gpu显卡为adm Radeon R9 290x,虚拟机操作系统识别上属主机的显卡,在设备管理器里边,以×××叹号显示设备可不用。分别尝试用驱动精灵、360驱动大师去检查,都能识别gpu显卡,但执行安装后重启系统,又处于不能使用的状态。从官网下载驱动软件,400多M的文件,执行后,还是不正常。算了,把R290X卸下来,换成R390x。运气不错,安装完spice-guest-tools包,居然把显卡驱动也顺带安装好了。

现在,鼠标叠影解决了,显示效果也很清晰。接下来的操作,就在虚拟出来的云桌面上进行(云终端盒子去连proxmox服务器端的自定义spice端口)。

◎虚拟化gpu测试

关闭刚创建好并正常运行的虚拟机,在web管理界面以此虚拟机克隆出另外一个。在克隆时,最好关闭虚拟机,或者生成一个模板,后边创建虚拟机就用模板来克隆。虚拟机处于运行状态执行克隆,速度慢得惊人,不建议在实际生产中使用。

启动一个虚拟机,正常;再启动第二个虚拟机,报错,提示设备繁忙。这应该是gpu显卡直通(pass-through)被前一个虚拟机独占所致。为了验证这一想法,关掉正常启动那个虚拟机,再启动另外一个,正常,原因确实是这个。

个人认为,这种独占方式在实际应用中不具备太多的优势。以一个高配的显卡,虚拟化多个gpu,共享给更多的人使用,才有有吸引力。查了两大显卡设备制造商amd与nvida,已经有解决方案;amd的称mxgpu,而nvida的叫vgpu。两家都发布了对应操作系统的驱动程序,受条件限制(amd 推荐radeon firepro S7100显卡),暂时无法继续进行试验,希望有条件的老司机不妨试试,并把实验结果告知大家。

最后,和大家分享我的订阅专栏《负载均衡高手炼成记》,本专栏依托作者十余年IT运维经验,从入门到实操,手把手教你构建运行不同场景下负载均衡以及日常维护。

pve远程连接 spcie_用Proxmox搞定gpu穿透相关推荐

  1. 用Proxmox搞定gpu穿透(引用)

    用Proxmox搞定gpu穿透 作者:sery 2018-10-04 来源:51CTO 在用proxmox加云终端盒子测试完桌面虚拟机以后,看到某qq群有人问能不能虚拟化gpu,用来做3D设计.正好闲 ...

  2. 用Proxmox搞定gpu穿透

    在用proxmox加云终端盒子测试完桌面虚拟机以后,看到某qq群有人问能不能虚拟化gpu,用来做3D设计.正好闲置的台式电脑有amd R9 290X及R9 390X两块显卡,由于挖矿太耗电,已经放弃挖 ...

  3. pve远程连接 spcie_惠普 SL250s Gen8 服务器编译PVE内核通过禁用RMRR来实现pcie直通

    说明:本文非详细教程,仅作为留存使用 本文内容是解决部分惠普服务器在PVE环境下不能直通设备的问题,解决办法是编译PVE内核,禁用RMRR (Reserved Memory Region Report ...

  4. pve远程连接 spcie_剑网3PVE远程输出宏 新版本花间宏分享

    本文为大家分享剑网3新版本远程输出宏之万花·花间输出宏. 一.全自动版 宏1: /fcast [|tbufftime:钟林毓秀<4.2] 芙蓉并蒂 /cast [tnobuff:兰摧玉折] 兰摧 ...

  5. 转:彻底搞定期货穿透式CTP API接入

    中信期货看穿式监管认证操作指南(CTP系统) https://www.citicsf.com/static/download/soft/%E4%B8%AD%E4%BF%A1%E6%9C%9F%E8%B ...

  6. pve远程连接 spcie_proxmox折腾 篇一:解决j3455直通iommu分组问题,PVE内核编译教程...

    更新: 2020.02.22更新内核pve-kernel-5.3.18-2,常规更新,今后不会一有新版本就更新了,估计大版本更新再编译新内核了,每一次都挺折腾的,而且编译出的内核有bug恢复起来挺麻烦 ...

  7. eclipse进行远程调试教程,轻松搞定生产环境问题

    首先你本地Eclipse上要有和部署在远程服务器一至的项目,否则debug的时候会出现代码行错位,难以达到debug的效果.例如:如果你本地的代 码加了行,修改了,或减了一行.而远程服务器上的项目没有 ...

  8. 小米微信无法连接到服务器1-10087,微信无法连接到服务器【搞定方向】

    win7系统电脑使用过程中有不少朋友表示遇到过微信无法连接到服务器 的状况,当出现微信无法连接到服务器 怎么样才能快速解决呢?其实解决微信无法连接到服务器 也是非常简单的.网上有各种各样的解决方法,我 ...

  9. pve远程连接 spcie_PVE相关 篇一:解决CX341a PVE 中报错PCIe Bus Error

    PVE相关 篇一:解决CX341a PVE 中报错PCIe Bus Error 2020-07-19 16:18:39 1点赞 0收藏 0评论 最近入了一块洋垃圾cx341a,用的x4转接板插在x16 ...

最新文章

  1. jquery 常用方法 delegate() siblings() closest() indexOf() substring()
  2. 渗透知识-内网渗透(详细版本)
  3. pyhton3 模拟打开网页
  4. js中iframe访问父页的方法
  5. 成功解决raise XGBoostError(_LIB.XGBGetLastError()) xgboost.core.XGBoostError: b'[22:08:00] C:\\Users\\Ad
  6. buuctf 二维码
  7. SAP UI5 的 TypeScript 实践
  8. 常用转义符的使用 java 0133
  9. raspberry pi_什么是Raspberry Pi基金会? 售出1000万台计算机
  10. php 添加透明水印,php加水印的代码(支持半透明透明打水印,支持png透明背景)
  11. acm steps chapter2总结
  12. 航空公司VIP客户查询
  13. 控制教程 —— 巡航控制篇:2.PID控制器设计
  14. 开关电源共模电感和X电容的选取?
  15. 定制合成:热激发延迟荧光材料PPZ-3TPT、PPZ-4TPT、PPZ-DPS或PXZ-DPS、DMAC-DPS
  16. 组图:1912年斯德哥尔摩奥运会
  17. 秒杀系统的技术架构设计与实现
  18. 用100nf的电容滤除72MHz正弦波信号,合适么?
  19. java课程任务_修真院java后端工程师学习课程--任务1(day three)
  20. 干货!用神经网络来表达隐式场景流

热门文章

  1. PHP是解释型还是编译型的?
  2. 亚太版、欧版、港版、国行的区别
  3. 关于原生html和js上传文件的处理
  4. 人工智能与工业4.0在智能制造的应用
  5. 23个Linux实际开发常用命令
  6. 网易邮箱 v6.12.2
  7. 黑马程序员Java全套课程及笔记分享
  8. 《增广贤文》全文解释
  9. kudu简介与操作方式
  10. 讲真,这句话能够一秒治愈所有的矫情