20210309更新
整了一块RX 6800,但linux mint 20.1(ubuntu 20.04)下面怎么也挖不了矿,就想到了KVM虚拟机+显卡直通的方案,将显卡分配给虚拟机里的win10来挖矿。
主要硬件配置:
CPU:R9 3950X
显卡:RX 6800(虚拟机) + RX 5700XT(主机)
硬盘:SM961(NVMe,虚拟机)(虚拟机系统装进NVMe后不久直接炸了,改用主机上的从vmdk转来的qcow2虚拟硬盘)+ SA530(SATA,主机)
主要参考资料:
首先查询资料得知这个主板支持IOMMU,BIOS设置里将其Enabled。
接下来配置内核参数,编辑/etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt"
然后update-grub
,重启后输入dmesg | grep AMD-Vi
,确认开启了IOMMU。
接下来是查找待分配的硬件ID。使用这个脚本:
#!/bin/bash # change the 999 if needed shopt -s nullglob for d in /sys/kernel/iommu_groups/{0..999}/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*} printf 'IOMMU Group %s ' "$n" lspci -nns "${d##*/}" done;
输出一大堆东西。我将其保存至一个文件以便查找。以下是文件节选:
IOMMU Group 14 01:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd NVMe SSD Controller SM961/PM961 [144d:a804]
IOMMU Group 18 2d:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:73bf] (rev c3)
IOMMU Group 19 2d:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:ab28]
IOMMU Group 20 2d:00.2 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:73a6]
IOMMU Group 21 2d:00.3 Serial bus controller [0c80]: Advanced Micro Devices, Inc. [AMD/ATI] Device [1002:73a4]
加粗部分就是要分配给虚拟机的硬件ID。将其加入内核启动参数:
GRUB_CMDLINE_LINUX_DEFAULT="amd_iommu=on iommu=pt kvm.ignore_msrs=1 vfio-pci.ids=144d:a804,1002:73bf,1002:ab28,1002:73a6,1002:73a4"
这里的kvm.ignore_msrs=1
,第一个参考资料说是win10 1803以上才需要的参数。
(小插曲,之前修改内核启动参数后,重启卡住,进不了图形界面,所幸还能ssh;更新了一下bios,结果好了!甚至IOMMU分组都变多了)
接下来是创建虚拟机。使用红帽公司的virt-manager
在图形界面下创建,很方便。
这一步选择windows 10也行。
内存和CPU随意分配。由于我是直接给虚拟机分配物理硬盘,“为虚拟机启用存储”跳过。
概述:
CPU:
添加硬件:
在这里按照之前脚本输出的硬件ID,把要分配的PCI设备分配给虚拟机。然后取消勾选“ROM栏”。只有NVMe直通需要取消勾选“ROM栏”(实际上是ROM BAR的拙劣翻译)。
然后点回“概况”,手动编辑xml,在<features>
里面加入:
<hyperv>
<vendor_id state="on" value="101"/>
</hyperv>
<kvm>
<hidden state="on"/>
</kvm>
否则不能从显卡连接的显示器输出(参考链接)。如果仅仅当一个挖矿工具系统使用的话,没必要设置这玩意,否则SPICE会出问题,鼠标指针会消失。
装完系统和驱动后就能愉快挖矿啦!
但是有一个恼火的问题(AMD Reset Bug),虚拟机关机后再开机,显卡无法使用!必须重启主机!好消息!6800系并没有reset bug!之前出问题是因为少分配了两个东西,参见这个视频把那两个跟显卡关联的东西分配上去就好了。