比較新的教學文...就不另外發了> , ^
http://lifed.gitlab.io/blogger/2016/08/26/PCI-passthrough-2/
---
linux很麻煩但我喜歡,喜歡它帶給我的問題與解決的成就感,它也來許多新穎的觀點,
好讓我們學習、吸收與成長,即使這只是linux世界中的一個點。
本篇基於arch的antergos,其他的發行商就抱歉啦!:Q
題外話...線上安裝antergos的時候,有些設定檔不正確,導致pci passthrough的一些
問題,要跟的話請用arch或manjaro。
---
Wine-staging
說到wine大家都知道,說到玩遊戲專用的wine非wine-staging莫屬。
詳情請見官方網...(這不是本篇的重點)
---
BIOS設定
https://db.tt/NN94KqlB
https://db.tt/3i01FdeF
https://db.tt/nFMruNv1
這裡一個大重點請用HOST的顯卡開機
舉例來說
我有HD4600(Host, linux)與R9-390(Guest, win)
開機必須使用HD4600(linux)開機絕對不是用R9-390那張顯卡去開機,這點錯後面全都不用做了。
大概是這幾點沒講好又用影片混淆了視聽
在此先測試的人說聲抱歉了<(_ _)>
---
qemu/kvm(pci passthrough)
先看影片(沒興趣就可以左轉了) :<
https://www.youtube.com/watch?v=37D2bRsthfI
簡單來講linux開一台win虛擬機,而win有近乎原生的效能(意味著你可以玩任何遊戲)。
實際上我也正在使用,這個方法有許多意想不到的優點存在,最後在慢慢舉例吧!
1. 電腦配備必須要有兩張(或以上)GPU(intel+amd, intel+nv, nv+nv, etc...)
2. 虛擬技術支援且BIOS記得打開...
備註:需要一顆很強大的內心
配備
CPU: i7-4790, RAM: 24g, GPU: intel hd4600 + r9-390, monitor: vh242, mg279q
內顯--hdmi-->vh242
外顯--dp to mini dp -->mg279q
安裝必要軟體
# yaourt -S qemu linux-vfio rpmextract synergy bridge-utils
注意這裡使用原生的kernel(3.12以上)也可以,但須自行測試。
---
設定
---
# vim /etc/default/grub
#pcie_acs_override=downstream必須使用linux-vfio才有效果
...
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on intel_iommu=pt pcie_acs_override=downstream hugepagesz=2M transparent_hugepage=never
"
…
# grub-mkconfig -o /boot/grub/grub.cfg
# vim /etc/mkinitcpio.conf
...
MODULES="vfio_pci vfio vfio_iommu_type1 vfio_virqfd"
...
# mkinitcpio -p linux-vfio
# vim /etc/modprobe.d/kvm-iommu.conf
#[重要]這部份nv passthrough的額外參數要在找一下,有關於效能、體驗的問題。
options kvm allow_unsafe_assigned_interrupts=1
options vfio_iommu_type1 allow_unsafe_interrupts=1
options i915 enable_hd_vgaarb=1
# lspci -nn
紅色為擷取重點
...
01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii PRO [Radeon R9 290] [1002:67b1] (rev 80)
01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:aac8]
…
# /etc/modprobe.d/vfio.conf
#如果不要顯卡音效可以不必加入
options vfio-pci ids=1002:67b1,1002:aac8
options vfio-pci disable_vga=1
# vim /etc/fstab
...
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
...
# vim /etc/sysctl.d/40-hugepage.conf
#設定公式"qemu設定的記憶體/2在多一點點"
#如這裡是12G那就是1024*12/2+100
vm.nr_hugepages = 6244
# brctl addbr br0
# 修正有連線能力裝置的名稱
# brctl addif br0 eno1
# ip link set up dev br0
# dhcpcd br0
# 選填 是否給eno1裝置IP(供synergy使用)
# ifconfig eno1 123.123.123.123
---
實戰
---
下載UEFI的BIOS edk2.git-ovmf-x64
https://www.kraxel.org/repos/jenkins/edk2/
# rpmextract.sh edk2.git-ovmf-x64-*.rpm
# cp -R ./usr/share/* /usr/share
qemu測試開啟看pci passthrough是否正常啟動
# qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-cpu host,kvm=off \
-vga none \
-device vfio-pci,host=01:00.0 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd
如果您到這邊都沒問題
1. pci passthrough沒問題
2. ovmf沒問題
來真的
下載 安裝win系列所缺少的驅動
https://fedorapeople.org/groups/virt/virtio-win/repo/latest/
https://db.tt/ZKMgFjFw
請依照Script的內容修改符合的位置,啟動後應當就像重灌win系列一樣,只是要多一個事先給virto的驅動。
# sh ./vm.sh
安裝完win系列開始設置synergy,linux為伺服端(server)而win為連線端(client)。
紅色部份為ip 記得server IP填寫在client那邊
橘色部份client的名稱要完全與server的設定頁面相同
螢幕的位置就照你想要的位置放
advanced server settings有一個use relative mouse moves(滑鼠相對移動?要開啟)
按下Scroll lokc來鎖定當下螢幕
https://db.tt/de8NPVd8
[喔嗚!?我記得synergy nightly可以好好試用試用...]
以上大功告成...
---
其他部份
---
像是可以啟用samba來達到win與linux之間的資料傳遞
https://db.tt/uKQLQSpw
然而samba又存在一些程式開啟上的問題,這時可以使用mklink
mklink /D "C:\Users\USERNAME\Desktop\SOMEWHERE" "\\1.1.1.111\galgame"
有些程式依然無解...萬惡的battle.net
遊戲在全螢幕的狀態下,滑鼠仍然可以在linux與win之間來去自如,像是開實況要開個網頁監控之類的就可以方便管理。
像是freesync需要在全螢幕下執行,這個方法就很方便了!左邊狂打game右邊逛網頁之類的無壓力!
鑑於板上好像沒有相似的文章來個拋磚引玉
希望之後會跑出virtmanager之類的host-passthrough…
這樣的虛擬機已經使用半年了且完全沒什麼問題,這也不一定僅可以玩遊戲,有問題的大多都是程式先天不相容(win10之類的)。
the division, hots, ark, gta5等等都跟原生win的電腦一樣爽爽跑,實在是沒有理由不去使用。
參考資料
https://bbs.archlinux.org/viewtopic.php?id=162768 (Arch的討論串)
裡面包含「虛擬機成功與失敗資料庫」,還有一堆問題與解決的方法。
http://vfio.blogspot.tw/ (aw大的blog)
裡面從硬體挑選到實機模擬講鉅細靡遺,但是裡面講的都很「英文」(沒有複製貼上的餘地)。
--
--
http://lifed.gitlab.io/blogger/2016/08/26/PCI-passthrough-2/
---
linux很麻煩但我喜歡,喜歡它帶給我的問題與解決的成就感,它也來許多新穎的觀點,
好讓我們學習、吸收與成長,即使這只是linux世界中的一個點。
本篇基於arch的antergos,其他的發行商就抱歉啦!:Q
題外話...線上安裝antergos的時候,有些設定檔不正確,導致pci passthrough的一些
問題,要跟的話請用arch或manjaro。
---
Wine-staging
說到wine大家都知道,說到玩遊戲專用的wine非wine-staging莫屬。
詳情請見官方網...(這不是本篇的重點)
---
BIOS設定
https://db.tt/NN94KqlB
https://db.tt/3i01FdeF
https://db.tt/nFMruNv1
這裡一個大重點請用HOST的顯卡開機
舉例來說
我有HD4600(Host, linux)與R9-390(Guest, win)
開機必須使用HD4600(linux)開機絕對不是用R9-390那張顯卡去開機,這點錯後面全都不用做了。
大概是這幾點沒講好又用影片混淆了視聽
在此先測試的人說聲抱歉了<(_ _)>
---
qemu/kvm(pci passthrough)
先看影片(沒興趣就可以左轉了) :<
https://www.youtube.com/watch?v=37D2bRsthfI
簡單來講linux開一台win虛擬機,而win有近乎原生的效能(意味著你可以玩任何遊戲)。
實際上我也正在使用,這個方法有許多意想不到的優點存在,最後在慢慢舉例吧!
1. 電腦配備必須要有兩張(或以上)GPU(intel+amd, intel+nv, nv+nv, etc...)
2. 虛擬技術支援且BIOS記得打開...
備註:需要一顆很強大的內心
配備
CPU: i7-4790, RAM: 24g, GPU: intel hd4600 + r9-390, monitor: vh242, mg279q
內顯--hdmi-->vh242
外顯--dp to mini dp -->mg279q
安裝必要軟體
# yaourt -S qemu linux-vfio rpmextract synergy bridge-utils
注意這裡使用原生的kernel(3.12以上)也可以,但須自行測試。
---
設定
---
# vim /etc/default/grub
#pcie_acs_override=downstream必須使用linux-vfio才有效果
...
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on intel_iommu=pt pcie_acs_override=downstream hugepagesz=2M transparent_hugepage=never
"
…
# grub-mkconfig -o /boot/grub/grub.cfg
# vim /etc/mkinitcpio.conf
...
MODULES="vfio_pci vfio vfio_iommu_type1 vfio_virqfd"
...
# mkinitcpio -p linux-vfio
# vim /etc/modprobe.d/kvm-iommu.conf
#[重要]這部份nv passthrough的額外參數要在找一下,有關於效能、體驗的問題。
options kvm allow_unsafe_assigned_interrupts=1
options vfio_iommu_type1 allow_unsafe_interrupts=1
options i915 enable_hd_vgaarb=1
# lspci -nn
紅色為擷取重點
...
01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Hawaii PRO [Radeon R9 290] [1002:67b1] (rev 80)
01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:aac8]
…
# /etc/modprobe.d/vfio.conf
#如果不要顯卡音效可以不必加入
options vfio-pci ids=1002:67b1,1002:aac8
options vfio-pci disable_vga=1
# vim /etc/fstab
...
hugetlbfs /dev/hugepages hugetlbfs mode=1770,gid=78 0 0
...
# vim /etc/sysctl.d/40-hugepage.conf
#設定公式"qemu設定的記憶體/2在多一點點"
#如這裡是12G那就是1024*12/2+100
vm.nr_hugepages = 6244
# brctl addbr br0
# 修正有連線能力裝置的名稱
# brctl addif br0 eno1
# ip link set up dev br0
# dhcpcd br0
# 選填 是否給eno1裝置IP(供synergy使用)
# ifconfig eno1 123.123.123.123
---
實戰
---
下載UEFI的BIOS edk2.git-ovmf-x64
https://www.kraxel.org/repos/jenkins/edk2/
# rpmextract.sh edk2.git-ovmf-x64-*.rpm
# cp -R ./usr/share/* /usr/share
qemu測試開啟看pci passthrough是否正常啟動
# qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-cpu host,kvm=off \
-vga none \
-device vfio-pci,host=01:00.0 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd
如果您到這邊都沒問題
1. pci passthrough沒問題
2. ovmf沒問題
來真的
下載 安裝win系列所缺少的驅動
https://fedorapeople.org/groups/virt/virtio-win/repo/latest/
https://db.tt/ZKMgFjFw
請依照Script的內容修改符合的位置,啟動後應當就像重灌win系列一樣,只是要多一個事先給virto的驅動。
# sh ./vm.sh
安裝完win系列開始設置synergy,linux為伺服端(server)而win為連線端(client)。
紅色部份為ip 記得server IP填寫在client那邊
橘色部份client的名稱要完全與server的設定頁面相同
螢幕的位置就照你想要的位置放
advanced server settings有一個use relative mouse moves(滑鼠相對移動?要開啟)
按下Scroll lokc來鎖定當下螢幕
https://db.tt/de8NPVd8
[喔嗚!?我記得synergy nightly可以好好試用試用...]
以上大功告成...
---
其他部份
---
像是可以啟用samba來達到win與linux之間的資料傳遞
https://db.tt/uKQLQSpw
然而samba又存在一些程式開啟上的問題,這時可以使用mklink
mklink /D "C:\Users\USERNAME\Desktop\SOMEWHERE" "\\1.1.1.111\galgame"
有些程式依然無解...萬惡的battle.net
遊戲在全螢幕的狀態下,滑鼠仍然可以在linux與win之間來去自如,像是開實況要開個網頁監控之類的就可以方便管理。
像是freesync需要在全螢幕下執行,這個方法就很方便了!左邊狂打game右邊逛網頁之類的無壓力!
鑑於板上好像沒有相似的文章來個拋磚引玉
希望之後會跑出virtmanager之類的host-passthrough…
這樣的虛擬機已經使用半年了且完全沒什麼問題,這也不一定僅可以玩遊戲,有問題的大多都是程式先天不相容(win10之類的)。
the division, hots, ark, gta5等等都跟原生win的電腦一樣爽爽跑,實在是沒有理由不去使用。
參考資料
https://bbs.archlinux.org/viewtopic.php?id=162768 (Arch的討論串)
裡面包含「虛擬機成功與失敗資料庫」,還有一堆問題與解決的方法。
http://vfio.blogspot.tw/ (aw大的blog)
裡面從硬體挑選到實機模擬講鉅細靡遺,但是裡面講的都很「英文」(沒有複製貼上的餘地)。
--
--
All Comments