充分利用Linux上的英特尔集成GPU

2020-11-08 13:27:22

大约一年前,我买了一台新笔记本电脑:2019年末的Razer Blade Stealth 13。它配备了英特尔i7-1065G7,配备了英特尔最好的Ice Lake显卡,以及NVIDIA GeForce GTX 1650。除了需要ACPI盖子和这里描述的电源管理问题外,它到目前为止还是一款很棒的笔记本电脑,Linux体验非常流畅。不幸的是,我的新笔记本电脑开箱即用的集成图形性能并不出色。我使用新笔记本电脑的第一个任务是在Linux端口《古墓丽影》中调试一个渲染问题,结果证明这是游戏中的一个错误。在这个过程中,我发现游戏内置基准的性能几乎是Windows的一半。在一些游戏上,我们不时会遇到一些MESA的性能问题,但其中一半似乎有点极端。我用gputop查看系统级性能数据后发现,尽管GPU一直很忙,但GPU的时钟频率无法达到最大值的60%-70%。为什么?*GPU无法获得足够的电力。当我解决了电源管理问题后,我发现,GPU的时钟频率无法达到最高值的60%-70%。*为什么?*GPU在某些游戏上时不时会遇到一些性能问题,但其中一半似乎有点极端。当我解决了电源管理问题后,基准测试的速度从Windows的50%-60%提高到了104%(是的,超过100%)。这篇博文旨在作为了解内存吞吐量和电源管理问题以及正确配置系统以充分利用英特尔集成GPU的指南。*并非本文中的所有内容都会影响所有笔记本电脑,因此您可能需要对系统进行一些实验,以确定哪些问题重要,哪些问题不重要。我也不能说这篇文章已经完成;几乎可以肯定的是,还有其他我不知道或已经忘记的配置问题。这是不言而喻的,但如果你想让你的硬件发挥出最好的性能,总是建议你运行最新的驱动程序。对于刚刚发布的硬件来说尤其如此。通常,对于显卡来说,大部分性能的大幅提升都会在MESA中实现,但你的Linux内核版本也会起到同样重要的作用。就英特尔冰湖处理器而言,一些电源管理功能直到Linux 5.4才会启用。我不打算在这里给你的驱动更新一个完整的指南。如果你运行的是像Arch这样的发行版,很可能你已经在运行与最新版本非常接近的东西了。如果你使用的是Ubuntu,Padoka PPA提供了用户空间组件的版本(Mesa,X11等)。(如果你是在Ubuntu上,Padoka PPA提供了用户空间组件的版本(Mesa,X11等)。)。这通常不会超过一周的时间,但是升级你的内核要复杂得多。其他的发行版可能也有类似的东西,但我会把它留给读者作为练习。这并不意味着你需要痴迷于更新内核和驱动程序。如果你对系统的性能和稳定性感到满意,那就别管它了。但是,如果你有全新的硬件,想要确保你有足够多的新驱动程序,那么尝试更新可能是值得的。或者,如果你有耐心,你可以只等6个月,等待下一个发行版发布周期,希望能赶上发行版的更新。3D渲染应用程序中的一大瓶颈是内存带宽。大多数标准显示器的分辨率为1920x1080,刷新率为60 Hz。1920x1080 RGBA(32bpp)图像的大小不到8 MiB,如果GPU以60 FPS的速度渲染,那么每帧图像的写入所需的内存带宽总计约为474 MiB/s。如果您的图像分辨率为1920x1080 RGBA(32bpp),则每一帧的图像写出所需的内存带宽总计约为474 MiB/s。如果你使用的是4K显示器,乘以4,你会得到大约1.8GiB/s。这些数字只针对最终的彩色图像,假设我们只将图像的每一个像素写入一次,然后Don';不考虑任何其他内存访问。即使在简单的3D场景中,除了正在写入的彩色图像之外,还有其他图像,如深度缓冲区或辅助gBuffer,每个像素通常被写入一次以上,这取决于应用程序的过度绘制,而着色通常涉及从统一的缓冲区和纹理读取。现代3D应用程序通常还具有深度预传递、光照传递和用于景深和/或运动模糊的后处理过滤器等功能。其结果是,用于渲染3D场景的实际内存带宽可以。由于3D渲染所需的带宽令人难以置信,所以离散GPU使用针对带宽进行了优化的内存。这些内存有不同的名称,如GDDR6或HBM2(在撰写本文时是当前的),但它们都使用极宽的总线,并并行访问许多位的内存以获得最大吞吐量。另一方面,CPU内存通常是DDR4(撰写本文时的当前内存),它运行在较窄的64位总线上,因此总体最大内存带宽较低。这是一种权衡。

在我的笔记本电脑(2019年末的Razer Blade Stealth 13)上,BIOS的CPU配置为35W,开箱即用。(是的,35W比TDP-UP高,我从来没有见过它消耗那么多电量;我不知道为什么它是这样配置的。)这意味着我们不需要DPTF,冷却也足够好,我也不真的需要热插头。相反,它的电源管理问题来自于主板的功率平衡。

.