Proxmox virtualization environment,簡稱PVE,是一個開源免費的基於linux的企業級虛擬化方案,功能不輸專業收費的VMware。簡單的說,PVE是一個基於Debian的linux系統,內置了一套虛擬機管理工具,並提供了web管理頁面,讓我們可以非常簡單的通過網頁管理虛擬機。
DoraCloud是一套多平台、一體化、分布式的桌面虛擬化方案。基於開放架構,支持多種虛擬化平台(Hyper-V,VMware,Proxmox,XenServer),多種桌面協議(RDP,PCoIP,SPICE)。采用All-in-One的設計模式和虛擬設備的部署方式。
NVIDIA Tesla P4單精度運算能力將達到5.5FLOPS,每秒可進行22萬億次計算,其擁有2560個流處理器,搭配8GB GDDR5顯存。
服務器配置:i7-8700,32G,1TB nvme,配置Tesla P4顯卡。
本文描述在服務器上部署 Proxmox、DoraCloud,並創建帶有vGPU的虛擬桌面的過程。
1、下載安裝Proxmox 5.4.1
2、修改中科大源,更新
替換中科大的源,更新升級系統。
cp /etc/apt/sources.list /etc/apt/sources.list.backup sed -i 's|^deb http://ftp.debian.org|deb https://mirrors.ustc.edu.cn|g' /etc/apt/sources.list sed -i 's|^deb http://security.debian.org|deb https://mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak CODENAME=`cat /etc/os-release |grep PRETTY_NAME |cut -f 2 -d "(" |cut -f 1 -d ")"` echo "deb https://mirrors.ustc.edu.cn/proxmox/debian $CODENAME pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list #更新 apt update && apt dist-upgrade -y
安裝DKMS 依賴包
#安裝 DKMS 依賴包 apt install pve-headers dkms pve-headers-4.15.18-12-pve -y
3、啟用 IOMMU
服務器為Intel 處理器,通過如下腳本啟用IOMMU,如果是AMD處理器,配置有差異。
# 復制如下腳本,啟用IO-MMU # /etc/default/grub 的GRUB_CMDLINE_LINUX_DEFAULT,增加 intel_iommu=on iommu=pt sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"/g' /etc/default/grub update-grub # 加載 vfio vfio_iommu_type1 vfio_pci vfio_virqfd 4個Modules echo vfio >> /etc/modules echo vfio_iommu_type1 >> /etc/modules echo vfio_pci >> /etc/modules echo vfio_virqfd >> /etc/modules echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf update-initramfs -u reboot
執行完畢腳本,會自動重啟服務器,然后查看日志,確認 IOMMU已經啟用。
root@pveserver:~# dmesg | grep -e DMAR -e IOMMU [ 0.000000] ACPI: DMAR 0x0000000079A48648 0000A8 (v01 INTEL EDK2 00000002 01000013) [ 0.000000] DMAR: IOMMU enabled [ 0.004000] DMAR: Host address width 39 [ 0.004000] DMAR: DRHD base: 0x000000fed90000 flags: 0x0 [ 0.004000] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap 1c0000c40660462 ecap 19e2ff0505e [ 0.004000] DMAR: DRHD base: 0x000000fed91000 flags: 0x1 [ 0.004000] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008c40660462 ecap f050da
4、安裝DKMS 和 NVIDIA 內核驅動程序
#下載nvidia 驅動 wget http://www1.deskpool.com:9000/software/NVIDIA-Linux-x86_64-460.32.03-grid.run wget http://www1.deskpool.com:9000/software/NVIDIA-Linux-x86_64-460.32.04-vgpu-kvm.run chmod +x NVIDIA-Linux-x86_64-460.32.04-vgpu-kvm.run #安裝驅動 ./NVIDIA-Linux-x86_64-460.32.04-vgpu-kvm.run -dkms
為了讓DoraCloud桌面雲系統能夠使用nvidia 的GPU資源,需要對Proxmox 5.4 打一個補丁。 該補丁對Proxmox的 API進行了增強。
wget http://www1.deskpool.com:9000/software/patch.tar.gz tar -zxvf patch.tar.gz -C /
NVIDIA 驅動安裝成功后,運行如下命令,重啟Proxmox 服務器。
systemctl daemon-reload
reboot
系統啟動后,檢查日志,確認 vgpu 驅動已經啟動。 可以看到不同類型的vGPU ,后續計划為桌面配置的vGPU TYPE為 0x3f(十進制63),型號為P4-1Q
root@pveserver:~# cat /var/log/syslog |grep P4 Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x47: GRID P4-1B Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x3f: GRID P4-1Q Class: Quadro Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x40: GRID P4-2Q Class: Quadro Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x41: GRID P4-4Q Class: Quadro Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x42: GRID P4-8Q Class: Quadro Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x43: GRID P4-1A Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x44: GRID P4-2A Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x45: GRID P4-4A Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x46: GRID P4-8A Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x9d: GRID P4-2B Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0xd6: GRID P4-2B4 Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0xf3: GRID P4-1B4 Class: NVS Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x121: GRID P4-8C Class: Compute Nov 22 21:29:17 pveserver nvidia-vgpud: VGPU Type 0x120: GRID P4-4C Class: Compute
為了驗證針對Proxmox API生效,可以使用如下命令查看一下。 增強后的API,可以顯示 mdev設備的 name 字段。 如果你的Proxmox名字不是 pveserver,請修改成你的PVE主機名。
root@pveserver:~# pvesh get /nodes/pveserver/hardware/pci/01:00.0/mdev ┌───────────┬─────────────────────────────────────────────────────────────────────────────────────────┬─────────────┬────────────┐ │ available │ description │ name │ type │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 1 │ num_heads=4, frl_config=60, framebuffer=8192M, max_resolution=7680x4320, max_instance=1 │ GRID P4-8Q │ nvidia-66 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 1 │ num_heads=1, frl_config=60, framebuffer=8192M, max_resolution=1280x1024, max_instance=1 │ GRID P4-8A │ nvidia-70 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 1 │ num_heads=1, frl_config=60, framebuffer=8192M, max_resolution=4096x2160, max_instance=1 │ GRID P4-8C │ nvidia-289 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 2 │ num_heads=1, frl_config=60, framebuffer=4096M, max_resolution=4096x2160, max_instance=2 │ GRID P4-4C │ nvidia-288 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 2 │ num_heads=1, frl_config=60, framebuffer=4096M, max_resolution=1280x1024, max_instance=2 │ GRID P4-4A │ nvidia-69 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 2 │ num_heads=4, frl_config=60, framebuffer=4096M, max_resolution=7680x4320, max_instance=2 │ GRID P4-4Q │ nvidia-65 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 4 │ num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=4 │ GRID P4-2B │ nvidia-157 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 4 │ num_heads=1, frl_config=60, framebuffer=2048M, max_resolution=1280x1024, max_instance=4 │ GRID P4-2A │ nvidia-68 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 4 │ num_heads=4, frl_config=60, framebuffer=2048M, max_resolution=7680x4320, max_instance=4 │ GRID P4-2Q │ nvidia-64 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 4 │ num_heads=4, frl_config=45, framebuffer=2048M, max_resolution=5120x2880, max_instance=4 │ GRID P4-2B4 │ nvidia-214 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 8 │ num_heads=1, frl_config=60, framebuffer=1024M, max_resolution=1280x1024, max_instance=8 │ GRID P4-1A │ nvidia-67 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 8 │ num_heads=4, frl_config=60, framebuffer=1024M, max_resolution=5120x2880, max_instance=8 │ GRID P4-1Q │ nvidia-63 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 8 │ num_heads=4, frl_config=45, framebuffer=1024M, max_resolution=5120x2880, max_instance=8 │ GRID P4-1B │ nvidia-71 │ ├───────────┼─────────────────────────────────────────────────────────────────────────────────────────┼─────────────┼────────────┤ │ 8 │ num_heads=4, frl_config=45, framebuffer=1024M, max_resolution=5120x2880, max_instance=8 │ GRID P4-1B4 │ nvidia-243 │ └───────────┴─────────────────────────────────────────────────────────────────────────────────────────┴─────────────┴────────────┘
5、部署 DoraCloud
為了驗證vGPU效果,我們在Proxmox 上部署DoraCloud。可以采用如下腳本在線安裝 DoraCloud
cd /var/lib/vz/dump; wget -qO- https://dl.doracloud.cn/dpinstall.pl --referer https://doracloud.cn | perl
重啟完畢后,然后瀏覽器登錄 DoraCloud 管理后台,輸入 賬號 admin DoraCloud,登錄后台。
根據配置向導,完成DoraCloud的初始化配置。
接下來,我們下載支持vGPU的桌面模板。 win10LTSC2019GPU。
然后創建桌面池,選擇 win10LTSC2019GPU這個模板。 GPU型號選擇 NVIDIA P4,vGPU類型選擇 GRID P4-1Q
配置桌面池內創建4個桌面。然后設置桌面池的綁定賬號為 administrator 123456 。這樣賬號是windows7x64模板的Windows 賬號。
啟用綁定賬號后,終端可以識別這個綁定賬號,登陸桌面windows。
桌面創建完畢后,可以在PVE中查看桌面虛擬的硬件配置,確認桌面虛擬機正常配置了 PCI device。
接下來回到DoraCloud管理后台,添加用戶,為用戶分配桌面池。
6、登錄桌面,驗證vGPU效果
DoraCloud有多種登錄方式,我們選擇網頁登錄DoraCloud,輸入用戶賬號 user01,密碼123456。 然后打開一個 RDP 文件,輸入管理員賬號 administrator 123456,即可登錄 windows 桌面。
進入桌面后,通過dxdiag,查看系統的顯卡,顯示為 NVIDIA GRID P4-1Q。
接下來,可以進行3D性能的測試了。 推薦兩個在線測試的網站。
基於WebGL的水母 https://akirodic.com/p/jellyfish/
基於WebGL的網頁游戲 https://www.crazygames.com/