[閒聊] 教學:如何在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