因为配置了一台新电脑,用来做kvm服务器,本想着通过GPU Passthrough,利用上 GTX1060(6G)显卡来用于虚拟机的显卡,但是我的显卡是和CPU在一个总线上,分为了1个组,无法完成。 各种搜教程,看到高版本的内核可以支持直接映射,但是是4.7以上的kernel才行,所以为 centos8编译了最新的稳定版内核。
1.最新版内核的下载、编译
如何编译内核,有比较多的教程,这里推荐看下面链接的
https://www.makeuseof.com/tag/compile-linux-kernel/
值得一提的是,使用 # make menuconfig 后,建议选择到 load,将从 /boot 下复制出来,重命名为“.config”的配置文件进行加载,再进行适当修改。 我这里因为要用到NTFS格式的硬盘分区,所以就将这个功能编译进了内核。 可以参考下列文章
https://www.linuxidc.com/Linux/2017-11/148276.htm
建议使用键盘上的 TAB 按键,先选择Load选项,加载 .config文件
需要编译一个仅用于当前系统配置情况的,比较精简的内核的,可以使用命令: # make localmodconfig
这将创建一个名为.config的文件,该文件告诉GCC从内核源代码进行编译的内容。 make localmodconfig命令检测当前正在运行的内核组件,并将其标记为要编译。
2.可能出现的问题
2.1.在配置好 “.config”文件, 开始使用命令: # make -j 8 (根据你的CPU的核心数量更改一下数字)后,可能出现如下原因引起的错误:
make[1]: *** No rule to make target 'certs/rhel.pem', needed by 'certs/x509_certificate_list'. Stop.
则直接用命令: # vi .config 对.config这个配置文件进行修改,利用vi编辑工具的查找功能,找到 certs/rhel.pem 字符, 将这一行和下面的两行前面都加上 “#”,将这共计3行给注释掉,再进行编译。
我的机器是8核的,感觉只用了不到10分钟就编译完了。
2.2.还有可能因为需要提供 X.509 key之类的停止。 这个比较简单,只需要按键盘上的 “ENTER”键,让编译程序继续下去就可以了。
3.查看默认的启动内核和调整其顺序
参看下列链接的文章
https://www.golinuxcloud.com/boot-with-old-kernel-version-rhel-8-grubby/
总结起来就是:
3.1 查看目前系统内所有的可启动内核及其版本号:
# ls -l /boot/vmlinuz-*
显示效果如下:
我这里编译了两个,分别是5.4.8和4.9.208 两个版本的。 感觉5.4.8的更快
3.2 查看当前所使用了内核版本:
# uname -a
查看更详细的内容,
# grubby --info=/boot/vmlinuz-5.4.8-0108_X64
3.3 查看当前使用的内核在启动列表中所排的顺序(也可能出现在启动时,手动选择了旧的内核,则显示的数字不同)
# grubby --default-index
显示数字0,说明当前的内核 5.4.8-0108_X64是首选启动内核, 如果显示是1,2,3之类的数字,则说明你手动选择了非默认内核,并且你的系统中的内核数量较多
3.4 将某个内核设定为首选启动内核,例如我们选择centos8系统原来的 vmlinuz-4.18.0-80.11.2.el8_0.x86_64成为默认首选启动内核
# grubby --set-default=/boot/vmlinuz-4.18.0-80.11.2.el8_0.x86_64
然后重新启动,则就会自动加载4.18.0-80.11.2.el8_0.x86_64了。
4. 新内核下GPU透传
更换了内核,目前还没有将GPU透传设定成功。 可能最主要的原因,是 GPU直接挂栽在CPU的PCIE总线上,这样的好处是游戏性能更好吧。
4.1贴一下我的硬件的图和 IOMMU 组的图
4.2 与GPU透传相关的,比较有价值的文章的连接合集
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
https://pve.proxmox.com/wiki/Pci_passthrough
下面这2篇,讲了如何打补丁 ACS patch,可惜我不会。有会的大神,希望能实验一下,放个中文版的教程
https://forums.linuxmint.com/viewtopic.php?f=231&t=212692&start=200#p1270255