P106-100矿卡在Linux系统下算力及游戏应用小结

P106-100 是一款比较著名的使用魔改驱动玩游戏的矿卡,但是在 Linux 下是没有这款矿卡的魔改驱动的。本文小结一下在 Linux 下如果使用 P106-100 运行算力及游戏应用。(2023.07.21 补充:视频中 wine 的“英雄联盟国际服”版用运行 Linux 原生游戏的那种设置方法帧率大概比视频中提高1倍,约为60~110帧。而“天下3”和“原神”用运行 Linux 原生游戏的设置方法则鼠标不能使用,原因未知。2024.02.07 更新:可以在 Linux 实体机上直接玩游戏,参见:没想到 P106-100 矿卡在 Linux 下玩游戏竟然如此简单)。视频演示地址:【P106-100矿卡在Linux系统下算力及游戏应用小结】

一、硬件及软件平台简介

电脑硬件是10年前的 i7-4770 CPU、16G内存、淘宝上买的 128 元包邮的七彩虹 P106-100 6G 矿卡。目前已经使用两月余,暂未翻车。

操作系统是 Deepin Linux 20.9,另外用到了 virt-manager KVM 虚拟机、x11vnc 服务器、 Remmina 远程桌面客户端软件 。算力应用是“CycleGAN and pix2pix in PyTorch”,游戏应用是游戏测试“Unigine_Heaven-4.0”和多平台开源 3D 游戏“SuperTuxKart”。使用 CPU 和 P106-100 GPU 对比测试。wine 安装 Windows 游戏测试是“英雄联盟”国际服版。

二、Linux 下算力应用

算力应用是“CycleGAN and pix2pix in PyTorch”( https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix )。

“CycleGAN and pix2pix in PyTorch”是一款图形处理的机器学习软件,既可以使用 CPU 也可以使用 GPU。

Linux 下直接按常规的方法安装 Nvidia 私有驱动即可,这里就不详述安装方法了。Deepin Linux 下安装可以参考这篇帖子“[经验分享] UOS/DEEPIN安装nvidia最新闭源驱动的教程(方法简单成功率很高)”(https://bbs.deepin.org/post/232923)。

这里小结 CPU 计算和 GPU 计算的结果。
CPU 训练的命令是:

 python train.py --dataroot ./datasets/facades --name facades_pix2pix --model pix2pix --netG unet_256 --direction BtoA --lambda_L1 100 --dataset_mode aligned --norm batch --pool_size 0 --gpu_ids -1

训练一轮的时间大概是330~360秒,“top” 命令查看 python 主线程 CPU 占用近 400%(CPU 是 4核8线程),内存占用约 8%(约 1270MiB,物理内存共16G)。

GPU 训练的命令是:

python train.py --dataroot ./datasets/facades --name facades_pix2pix --model pix2pix --netG unet_256 --direction BtoA --lambda_L1 100 --dataset_mode aligned --norm batch --pool_size 0

训练一轮的时间大概是35~37秒,“nvidia-smi”命令 查看 GPU 利用率近 100%,GPU 内存占用约 3065MiB;“top” 命令查看 python 主线程 CPU 占用近 100%(CPU 是 4核8线程),内存占用约 15%(约 2382MiB,物理内存共16G)。

GPU 是 CPU 的训练速度近 10 倍。

三、 Linux 下原生游戏应用

1、宿主机 Deepin Linux 20.9 系统设置
Windows 下有大神做的 P106-100 矿卡魔改驱动,而 Linux 下没有,所以如果想利用 P106-100 来玩游戏需要特别的方式。我这里使用的方式是把 P106-100 直通到 virt-manager 的 KVM 虚拟机里,在 /etc/X11/xorg.conf 配置文件中指定使用 P106-100。然后在虚拟机里安装 x11vnc 服务器,通过 vnc 客户端连接到 KVM 虚拟机里玩游戏。参考链接:“LINUX GAMING WITH P106-100”( https://ncrmnt.org/2019/08/04/linux-gaming-with-p106-100/ )、“PVE开启硬件直通功能”( http://linux.it.net.cn/m/view.php?aid=31611 )。
下面把相关的配置步骤简单的列出来。

1)、宿主机 Deepin Linux 20.9 配置
(1)、主板开启 VT-D
(2)、编辑 /etc/default/grub 开启 iommu

GRUB_CMDLINE_LINUX_DEFAULT="splash quiet intel_iommu=on iommu=pt video=vesafb:off video=efifb:off video=simplefb:off"

然后更新 grub

update-grub

(3)、加载和屏蔽相关的内核模块

echo vfio >> /etc/modules
echo vfio_iommu_type1 >> /etc/modules
echo vfio_pci >> /etc/modules
echo vfio_virqfd >> /etc/modules
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidiafb" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia_drm" >> /etc/modprobe.d/blacklist.conf 
echo "blacklist nvidia_modeset" >> /etc/modprobe.d/blacklist.conf
echo "options kvm ignore_msrs=1" > /etc/modprobe.d/kvm.conf

然后更新 initramfs 内核模块文件

update-initramfs -k all -u

但是,我发现如果在宿主机上安装了 nvidia 驱动,即使上面有屏蔽相差模块的的指令,但是启动后仍然会加载 nvidia 驱动,从而导致虚拟机直通显卡失败。Deepin Linux 上可以使用 deepin-prime 这个包里面的 “prime-select nvidia” 命令来切换宿主机是使用 nvidia 显卡还是 intel 核芯显卡,需要重启生效。而我使用的是另一种简单暴力的方法,直接把 nvidia 内核模块文件重命名再重启系统就加载不了 nvidia 模块,这样虚拟机就可以使用直通的 P106-100 显卡了。使用的两个暴力脚本分别是宿主机启用和禁止 nvidia 内核模块如下(启用模块可以不重启,但禁止模块必须重启):
enable_nvidia:

#!/bin/sh
sudo mv /lib/modules/5.15.34-amd64-desktop/kernel/drivers/video/nvidia.ko.stop /lib/modules/5.15.34-amd64-desktop/kernel/drivers/video/nvidia.ko -v
sudo modprobe nvidia
exit 0

disable_nvidia:

#!/bin/sh
sudo mv /lib/modules/5.15.34-amd64-desktop/kernel/drivers/video/nvidia.ko /lib/modules/5.15.34-amd64-desktop/kernel/drivers/video/nvidia.ko.stop -v
sudo rmmod -f nvidia -v
exit 0

(4)、virt-manager KVM 虚拟机软件设置

下面只说一些配置的要点。
CPU “配置”勾选“复制主机CPU配置”,“拓扑”勾选“手动设置CPU拓扑”,“套接字”填“1”,“核心”填“4”,“线程”填“2”。“CPU”的“当前分配”为“8”。
内存的“当前分配”为“8192”MiB。
选择“添加硬件”->“PCI 主机设备”,把 P106-100 显卡和主板集成声卡选上就行,我这里分别是“0000:01:00:0 NVIDIA Corporation GP106 [P106-100]”和“0000:00:1B:0 Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller”。
然后网卡设备型号选的“virtio”,好像速度要快点,也许对 vnc 客户连接 x11vnc 服务器有些微帮助。
这里,我把声卡也直通到虚拟机里,这样,虚拟机运行时,宿主机不能使用声卡。虚拟机停止时,宿主机又可以使用声卡。但是显卡不能像声卡这样临时的在虚拟机和宿主机之间切换。

(5)、安装 VNC 客户端软件 Remmina

色彩选“真彩色(32位)”,画质选“最好(最慢)”。

2)、虚拟机 Deepin Linux 20.9 配置
(1)、按常规方法安装 nvidia 私有驱动
(2)、安装 ssh 服务器以便没有图形界面时可以连接虚拟机操作
(2)、安装 x11vnc 服务器并设为开机启动
相关配置文件如下:
/etc/X11/xorg.conf

Section "ServerLayout"
     Identifier     "Default Layout"
     Screen         "Default Screen" 0 0
 EndSection
 Section "Device"
     Identifier     "NV0"
     Driver         "nvidia"
     BusID          "PCI:02:00:0"
 EndSection
 Section "Monitor"
     Identifier    "Monitor0"
 EndSection
 Section "Screen"
     Identifier     "Default Screen"
     Device         "NV0"
     Option         "ProbeAllGpus" "False"
     Monitor        "Monitor0"
     Option         "NoLogo" "True"
     SubSection     "Display"
         Virtual 1920 1080
         Depth 24
     EndSubSection
 EndSection

其中的 BusID 在 “lspci”命令中查看。

/usr/local/bin/startvnc

#!/bin/bash
x11vnc -clip 1920x1080+0+0 -display :0 -auth /var/run/lightdm/root/:0

/etc/systemd/system/x11vnc.service

[Unit]
 Description=VNC
 After=lightdm.service
 [Service]
 ExecStart=/usr/local/bin/startvnc
 User=root
 Group=root
 Restart=always
 RestartSec=5
 [Install]
 WantedBy=multi-user.target

然后启用并启动 x11vnc.service

sudo systemctl enable x11vnc
sudo systemctl start x11vnc
sudo systemctl status x11vnc

最后一条命令是查看服务运行状态的。

2、游戏测试“Unigine_Heaven-4.0”

游戏测试应用是“Unigine_Heaven-4.0”( https://benchmark.unigine.com/heaven )。
应用设置除了语言改为“中文”,分辨率改为“1600x900”外,其它为默认。
以下是测试结果。
宿主机使用 CPU HD4600核芯显卡,“top” 命令查看 CPU 占用15~18%,内存占用 2.8%(约 445MiB,物理内存共16G),wa 10~13(我同时用 “iotop” 查看了不是磁盘产生的 iowait,数值高原因未知)。“Unigine Heaven 4.0”基准测试的结果是“FPS:28.1,Score:707”。

启动虚拟机后在宿主机上用 Remmina 连接它。虚拟机使用 P106-100 显卡,“top” 命令查看 CPU 占用近 100%,内存占用 10.1%(约 803MiB,物理内存共8G),wa 0。“watch nvidia”命令查看 P106-100 显卡状态:温度约 69度,功率 90W/120W,GPU 利用率 70~80%,GPU 内存占用 580MiB。“Unigine Heaven 4.0”基准测试的结果是“FPS:112.0,Score:2821”。测试结果约是宿主机下面的4倍。

3、游戏“SuperTuxKart”

多平台开源 3D 游戏“SuperTuxKart”( https://supertuxkart.net/zh_CN/Main_Page )。
游戏设置“图形特效等级”为最高的“6”,勾选“垂直同步”,分辨率为“1280x800”。在剧情模式下测试。

宿主机使用 CPU HD4600核芯显卡,“top” 命令查看 CPU 占用约 50%,内存占用 1.1%(约 175MiB,物理内存共16G),wa 15~20(我同时用 “iotop” 查看了不是磁盘产生的 iowait,数值高原因未知)。剧情模式下帧率显示2/3/4,画面极卡顿,几乎不能动弹。偶有成排黑点闪烁。且造成整个操作系统响应极缓慢。

启动虚拟机后在宿主机上用 Remmina 连接它。虚拟机使用 P106-100 显卡,“top” 命令查看 CPU 占用约 43%,内存占用 6.8%(约 541MiB,物理内存共8G),wa 0。“watch nvidia”命令查看 P106-100 显卡状态:温度约 57 度,功率 约 60W/120W,GPU 利用率 75~78%,GPU 内存占用约 499MiB。剧情模式下帧率显示105/108/111,画面极流畅。整个操作系统响应正常。

四、Linux 用 Wine 安装 Windows 游戏应用

1、系统设置

1)、宿主机 Deepin Linux 20.9 设置

与前面 Linux 原生游戏应用不同的设置要点有:

(1)、不要通过 x11vnc 使用虚拟机桌面,而直接使用 virt-manager 的 spice 图形显示控制台。可能是因为 wine 的原因,wine 下安装的游戏是可以正常调用 p106-100 显卡加速的。

(2)、除了切换控制虚拟机的鼠标,要直通一个专门在虚拟机里玩游戏的物理鼠标。我这里是直通的 usb 鼠标。方法是“添加硬件”->“USB 主机设备”。不直通物理鼠标的话,有的游戏鼠标会无法控制。

(3)、通过游戏的虚拟化检测设置。有的游戏检测到在虚拟机中会不能运行。我是通过在虚拟机的 xml 配置文件中添加 cpu 节的设置达到的。具体文件如:/etc/libvirt/qemu/deepin.xml

具体内容如下:

<cpu mode='host-model' check='partial'>
  <topology sockets='1' dies='1' cores='4' threads='2'/>
  <feature policy='disable' name='hypervisor'/>
</cpu>

网上也有说这样的:

<cpu mode='host-passthrough' check='none'>
	...
    <feature policy='disable' name='hypervisor'/>
</cpu>

2)、虚拟机 Deepin Linux 20.9 内设置

与前面运行 Linux 原生游戏不同的地方是去掉 /etc/X11/xorg.conf 这个配置文件就行。

2、Deepin Linux 20.9 虚拟机中 wine 安装 Windows 游戏测试

这里我使用的是 flatpak 版本的 Lutris,在上面成功安装运行过“英雄联盟国际服版”、“天下3”,没有安装上“英雄联盟国内服版”。我听说在 Linux wine 里安装运行 Windows 游戏有可能导致封号,所以,建议各位自行取舍,避免损失贵重的数字资产。

1)、游戏安装要点:

各个游戏具体的安装方法就不说了,大家自行百度。我这里说说在 Deepin Linux 20.9 上用 Lutris 安装上述游戏碰到的几个问题的解决要点。

(1)、报告找不到 xdelta3 程序而中止安装。我明明已经安装了,找不到原因,最后用了一个粗暴简单的方法把检测程序给屏蔽了。修改的文件是“/var/lib/flatpak/app/net.lutris.Lutris/x86_64/stable/2e580c2d27b44e1d2313ad7c73df33c2705aec8ef4b030e5a209278c0e0771e1/files/lib/python3.10/site-packages/lutris/installer/interpreter.py”,修改的内容如下:

                if not any(installed_binaries.values()):
                    pass
                    #raise ScriptingError(_("This installer requires %s on your system") % _(" or ").join(dependency))
            else:
                if not system.find_executable(dependency):
                    pass
                    #raise ScriptingError(_("This installer requires %s on your system") % dependency)

希望知道真正正确解决方法的朋友能提示一二。谢谢。

(2)、在安装程序中下载不了或下载不正确相关文件。这可以另外手动下载下来,再放到指定的地方就行。如字体文件。

(3)、安装程序中途中断。可以在 Lutris 安装的游戏下面选择“在 Wine 容器中运行 EXE”运行安装程序。

2)、游戏运行效果测试

总的来说,我成功安装运行的上述2个游戏画面正常,速度正常,没有卡顿等异常现象。具体的就不写了。总的来说,用 P106-100 显卡可以在 Linux 下玩一些流行的 Windows 游戏,但需要一定的 Linux 基础技能来折腾。且由于其存在网上所说的封号风险,所以对于真正的游戏党来说还是慎入为好。

One thought on “P106-100矿卡在Linux系统下算力及游戏应用小结”

发表评论

电子邮件地址不会被公开。 必填项已用*标注