[闲聊] 教学:如何在Linux上玩LOL

楼主: gR7P4zXH (tpn7gpdx)   2019-08-16 01:34:45
# 如何在linux上玩lol
# 简介
多年来能够充份提升硬件使用率的虚拟化技术为之流行。虚拟化技术除了能增加安全性,
亦能运行与实体机器不同的作业系统。
我们将借由libvirt的协助使用QEMU/KVM在linux上建立虚拟机,并借由GPU Passthrough
将显卡新增至虚拟机里取得最佳游戏体验。
在虚拟机内打LOL即为一应用场景:)
# 背景知识
## KVM
KVM(Kernel-based Virtual Machine)是一种用于Linux kernel的核心模组,可为Linux
kernel提供VMM(Virtual Machine Monitor)的功能。
KVM需要处理器支援硬件虚拟化延伸,例如Intel VT和AMD-V。Intel VT和AMD-V是指令集
延伸,能够从硬件上协助VMM。
## QEMU
QEMU是一款可执行硬件虚拟化的VMM,可与KVM一起使用让VM达到接近真实机器速度。
## LIBVIRT
LIBVIRT是一套开源的管理工具,用于管理和建立虚拟机。常被用于管理KVM/VM Ware
ESXi/QEMU和其他虚拟化技术。
# 系统需求
1. 需要有UEFI BIOS的显卡,这两3年内出的基本上都会有。偏好AMD,N家也可但需要额
外步骤,在此不多赘述
2. 若是用Intel CPU,CPU需要支援虚拟化VT-d和VT-x,并在BIOS设定内开启VT-d和
Intel Virtualization Technology,默认是不会开启的。AMD CPU需要支援AMD I/O
Virtualization Technology (IOMMU) 和SVM,同样在BIOS内开启相关选项。
3. CPU需要有内显,并从BIOS设定仅使用内显输出。
4. Windows 10 64bit或是其他64bit的Windows作业系统安装光盘映像档,例如
"Win10_1903_V1_Chinese(Traditional)_x64.iso",我们需要在Linux上建立虚拟机并安
装Windows
# 实验环境
## 软件
QEMU 2.11.1, Libvirt 4.0.0
HOST OS(实体机作业系统): Ubuntu MATE 18.04 (linux 4.15.0)
GUEST OS(虚拟机作业系统): Windows 10 1903 Education
## 硬件
CPU: Intel i7-6700
RAM: 32G
DISK: Intel SSD 512G
显示卡: Radeon R7 250
电源: 300W
萤幕: Dell P2314H,具有D-sub/HDMI Input
# 系统架构
用libvirt建立一台虚拟机器(Virtual Machine,VM)。qemu提供Guest OS一张QXL
graphics device作为改善显示效能用,Guest OS亦需要QXL driver。QXL Device将资料
传送到libspice,libspcie内实作Spice Server的再将画面传给Host OS上的Spice
client,于是使用者看得到虚拟机输出画面。
https://i.imgur.com/p4RpdIj.png
装完作业系统和游戏后将显卡Passthrough进VM里,Guest OS会侦测到该显卡,使用者自
行装完所需驱动后会用该卡输出画面,因此需要另一台萤幕。本实验使用双输入
(D-sub/HDMI)萤幕,D-sub用来接内显输出,HDMI用来接Passthrough进VM的显示卡输出。
https://i.imgur.com/iQSzYJX.png
萤幕输入从D-sub切到HDMI就能看到熟悉的windows爽爽玩游戏囉!记得先用鼠标点一下虚
拟机画面让鼠标、键盘被"吃"进去。也能以同样方式passthrough实体键盘、鼠标进VM。
https://i.imgur.com/IJjBlkx.png
# 实验流程
## 安装
安装KVM/QEMU相关套件
~$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system
bridge-utils virt-manager ovmf
检查系统是否有能力运行hardware accelerated KVM virtual machines
~$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
## 建立虚拟机
建立虚拟机的方式有很多种,最简单的方式是使用virt-manager
~$ virt-manager
点选"建立新的虚拟机"开启视窗,选择"本地端安装软件",在下一步"ISO映像"选择
windows10安装光盘,在最后一步勾选"安装前自订组态",调整一些设定。
https://i.imgur.com/eIlqrht.png
Windows没有购买授权是找不到其他Socket的CPU,因此直接调整Core数目。
https://i.imgur.com/pGgDpAk.png
BIOS选择UEFI和Q35。
https://i.imgur.com/tLa6jw2.png
硬盘分配多大都可以,不会预先配置空间而是有多少占多少。因为是Windows不建议选
virtio,考虑到稳定性优先选SATA。
https://i.imgur.com/r9zpwov.png
网络卡选择"rtl8139"足以,选择"virtio"需要自行装驱动。
https://i.imgur.com/1Tvo77I.png
完成各项设定后记得按套用,开始安装作业系统。第一次开机libvirt会自动新增一个光
碟机放映像档,不需要手动新增一个。
https://i.imgur.com/NOjKAsP.png
装完作业系统先装LOL。
## GPU Passthrough
* Host OS不可以安装要passthrough的显卡驱动
编辑/etc/default/grub设定档,在"GRUB_CMDLINE_LINUX_DEFAULT"上增加
intel_iommu=on
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on"
更新grub
~$ sudo update-grub
~$ reboot
查看PCI devies是否被mapped到IOMMU群组
~$ lspci -nnk
https://i.imgur.com/db4kJtD.png
以R7 250这张卡为例,vendor ID与device ID则为1002:6610和1002:aab0
再次修改GRUB_CMDLINE_LINUX_DEFAULT,vfio-pci.ids后面填入显示卡的vendor ID
与device ID。显示卡如果是Radeon,modprobe.blacklist=radeon,在Radeon之后的显
卡接modprobe.blacklist=amdgpu
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on
vfio_iommu_type1.allow_unsafe_interrupts=1 vfio-pci.ids=1002:6610,1002:aab0
modprobe.blacklist=radeon kvm.ignore_msrs=1"
启用 vfio-pci 核心模组
~$ sudo echo 'vfio-pci' > /etc/modules-load.d/vfio-pci.conf
更新grub并重新产生核心的initramfs
~$ sudo update-grub
~$ sudo update-initramfs -u
~$ reboot
等到重新启动后,执行lspci -nnk可见到显示卡使用vfio-pci driver
https://i.imgur.com/wUrQzG4.png
回到virt-manager,为VM添加显示卡并重开VM
https://i.imgur.com/vBNUZEC.png
> 记得先用鼠标点一下VM画面让鼠标、键盘被"吃"进去VM。
萤幕接上显卡输出就能看到Windows桌面
https://i.imgur.com/pkp4fB7.png
由于QXL device也还没拔掉,所以会是双萤幕,建议仅用passthrough的显卡输出。
https://i.imgur.com/2K6E7Be.png
在装置管理员看到AMD显示卡,请自行安装AMD驱动
https://i.imgur.com/Y9oHg7n.png
打LOL实景,特效中等,这张卡效能约莫RX460的一半,因此FPS较低。PING高是因为宿舍
网络问题,无解。
https://i.imgur.com/2kUeKmF.jpg
也能以同样方式passthrough实体键盘、鼠标进VM。
## Looking glass
Looking glass是一款开源应用程式,免去GPU Passthrough的VM接上实体萤幕、键盘和滑
鼠的各种麻烦。Host graphics card只要支援OpenGL,然而GuestOS必须是Win10。
在linux上编译looking glass client,从
https://github.com/gnif/LookingGlass/releases取得最新的sourece code和
executable for windows。
# Install essential packages
~$ sudo apt install cmake libsdl2-dev libsdl2-ttf-dev nettle-dev
libspice-protocol-dev libfontconfig1-dev libx11-dev fonts-freefont-ttf
libconfig-dev
# Download source code
~$ wget https://looking-glass.hostfission.com/ci/host/source?id=24
作者: ckpetercheng (ckpetercheng)   2019-08-16 01:39:00
建议直接双系统XDD不过lol也只是其中一个应用而已啦
作者: zxcasd951159 (asas8750)   2019-08-16 02:05:00
我以为大家都是这样玩的欸
作者: e11gary30200 (维尼)   2019-08-16 11:15:00
嗯嗯 我也想这样子做过
作者: dannyhsu1206 (simple瀚)   2019-08-16 11:21:00
真麻烦欸....打个lol灌一堆东西
作者: jellykid0305   2019-08-16 11:52:00
不要对粪game认真好爆

Links booklink

Contact Us: admin [ a t ] ucptt.com