前言
在开始之前先声明一下,我看底下评论好像有点不大对劲,本文面向的是PCIe故障导致的PCIe带宽严重瓶颈的现象,例如PCIe 因为硬件故障缩水到3.0 x2 3.0x4等情况。正常情况下就算用PCIe3.0 x8也很难满足本文的条件
友军先别开火,我不是卖 PCIe 5.0 板子的,也不是说不用 PCIe 5.0 就会有性能损失的无良商家,我只是一个科普 PCIe 知识的
起因是最近在黑盒看到一些盒友说自己游戏帧数低,内存硬盘显卡CPU全查了一遍一点问题没有,跑分测试和甜甜圈也没问题,但是比同配置的人卡很多,这种情况一般就是 PCIe 带宽不足或者连接问题导致的。
那么,PCIe 带宽不足导致的游戏卡顿症状有哪些呢?这里列出几个
GPU和CPU负载都不高,平均帧还行,但1% LOW帧没眼看
一到换场景或者BOSS换阶段就特别卡
TimeSpy和Furmark测试基本正常,看不出问题
如果你有以上症状,并且其他组件已经基本查了一遍,那么就要怀疑是不是 PCIe 带宽瓶颈了
为什么会这样呢?
原理
我们先来解释一下原因,知道了原因才好解决这个问题,而且遇到类似问题也更好分析原因和解决
首先,这里是一个现代 PC 数据流动的极简流程图(肯定是不严谨,但是好理解):
一个简化了一切总线和南北桥的示意图
当你的电脑渲染一帧画面时,在上图中的数据大致经历了如下流动:
CPU 向硬盘请求读取需要渲染的画面内容
硬盘将数据写入内存后通知 CPU
CPU 根据数据计算需要渲染的内容具体有哪些,怎么渲染,用哪些资源
CPU 把计算得到的结果写入内存,通知显卡读取并执行
显卡通过 PCIe 总线读取内存,将执行内容和有关资源写入显存
GPU 核心从显存中获取执行内容和资源,渲染画面并输出
经历如上 6 步,你的 GPU 成功输出了一帧画面如果一直这样效率肯定高不了,所以第二次执行时,流程会变为:
CPU 从内存或缓存中得到需要渲染的内容具体有哪些,怎么渲染,用哪些资源
CPU 把计算得到的结果写入内存,通知显卡读取并执行
显卡通过 PCIe 总线读取内存,将执行内容和显存中不存在的资源写入显存
GPU 核心从显存中获取执行内容和资源,渲染画面并输出
虽然是4步,看起来也很多,但现在你的游戏就会流程很多了,因为上述过程中最慢的是硬盘,其次是内存,最快的是显存,现在硬盘直接休息了,内存也只需要读取少量数据,显卡几乎只和显存沟通,所以渲染能力大幅提升
那么 PCIe 带宽瓶颈会导致什么问题呢?请看第一个流程的第5步:
显卡通过 PCIe 总线读取内存,将执行内容和有关资源写入显存
这一步有大量数据需要经过 PCIe 总线传输,而PCIe总线的速度是多少呢?
PCIe 4.0 x16 是单向 32GB/s,PCIe 5.0 x16 是 64GB/s
可以发现现代的 PCIe 总线一般能在几十毫秒内完成这个任务,所以如果你的 PCIe 带宽正常的话你不会有任何感知
但是假如你的 PCIe 带宽存在问题,例如金手指接触不良导致变成了 PCIe 4.0 x4,那么此时的PCIe总线则需要几百毫秒才能完成这个任务
看起来还是很短但是第一套流程在每次场景切换或者画面大变化时都会进行一次,每次卡一下积少成多就卡了
但是这也不会很卡啊?
是的,如果只是这样的确不会很卡,最多场景切换卡一下。但实际中问题远比这要大,这是为什么呢?
因为上述原理解释建立在一个大前提上:你的显卡显存完全足够加载并储存所有内容,并且可被缓存的资源远大于绘制指令
在当今这个 AI 时代,消费级显卡的显存比黄金还贵,这个前提的前半部分是很难成立的。并且这样显存中会存在大量用不到的冷数据,白白浪费显存,怎么办呢?
把冷数据放到内存里不就行了吗
是的,这就是解决方法。在你的显卡显存即将不足时,游戏不会直接崩溃,而是会主动把并非正在用的资源尽可能往内存里面放,需要的时候再读出来,让显卡使用。那么读取和写入走的是哪个通道呢?
PCIe 总线
和上面的流程一样,显卡在 PCIe 传输的数据未完全就位之前是无法进行渲染的,只能空转或者进行辅助工作等待传输完成,在这期间显卡几乎无法渲染输出任何一帧,因此你的1% LOW 帧和GPU占用会特别低,因为显卡根本就没有工作可做,在等 PCIe 传输数据
我这里用GPU-Z和某六字游戏做了一下测试:
《六字:是个游戏》测试内容
可以发现Bus interface load也就是PCIe总线负载程度是100%,其实这就是PCIe瓶颈但是我手里这张卡已经是PCIe 5.0 x16了,瓶颈也没办法
这在网游中非常常见,尤其是FPS类游戏,因为耗费 PCIe 带宽的主要是CPU发送的绘制指令而非资源,而绘制指令无法被显存缓存,只能依靠 PCIe 来回跑,带宽低了指令传不过去,显卡就只能空转等待传输完成
所以前提的后半部分在网游中也很难满足
当然,如果你主玩 3A 的话感知不会这么明显,但是 3A 容易爆显存,还是得PCIe总线把资源从RAM拉到显存再拉回去,还是会占很多带宽,刚好把前提的前半部分给否决了
那么到现在,我们已经能完全推理出症状的原因了:
PCIe 瓶颈导致 GPU 无法全力工作,导致平均帧数低,1% LOW 帧完全没法看
换场景时PCIe传不过来,都给卡住了
第三点是因为什么呢,我们跑一个furmark看看:
furmark(我忘点RESET了,两个擎天柱中间的是测试值)
可以发现全程只有开头结尾PCIe跑满了,中间的过程中平均值在15%,即使带宽变为原来的25%仍然不会出现卡顿,TimeSpy同理,因为它们的目的都是测试显卡本身,而非测试显卡的综合运行条件,PCIe带宽作为无关量被尽可能排除
排查和解决
说了半天原理,接下来来点干货,如何排查修复
首先你需要一个GPU-Z,下载下来之后打开它
这是我的
很复杂,但是我们不需要看那些,就看Bus interface这个值
如果这个值at符号的前后一致,证明你的显卡PCIe没有任何问题,如果不一致的话,我们分成两类讨论
但在讨论之前,先明确PCIe版本应该是什么值。正常而言,是如下内容取最小值:
显卡的物理金手指通道数和 PCIe 版本
主板的 PCIe 版本和插槽支持通道数
例如你的显卡是RTX 5060,支持PCIe 5.0 x8,主板支持PCIe 4.0 x16,最终显卡应该运行在PCIe 4.0 x8上,你的at后面的值应该和这个值比较,而不是GPU-Z提示的值
版本低
如果是PCIe版本低(即这个小数小,如1.1或3.0)此时运行一个高负载程序,如游戏或者furmark,运行中查看此参数是否变为应变为的值
如果不是,检查主板中配置的 PCIe 版本是否为最高,主板电气性能是否存在问题
通道少
如果是通道少,那么原因有很多:
主板PCIe插槽拆分设置错误或未将显卡安装在推荐插槽
PCIe金手指接触不良
CPU针脚损坏或本身损坏(你没看错,CPU损坏是一个原因)
显卡内部 PCB 损坏
根据对应情况自行排查
后记
这是本人第一次在小黑盒上发表文章,希望各位盒友们海涵,如果有事实性错误给我一个改正的机会
因为本人不打FPS所以缺少FPS类的数据,FPS更容易出现PCIe瓶颈是根据网上的帖子反推的,可能存在问题
文章里面对于PCIe速率的表达为了保证简明性直接使用了GB/s这个单位,实际中肯定会低于这个数
从文章内实验结果来看,使用5060、5070和5080等显存容量瓶颈更严重的GPU时应该搭配具有更高PCIe版本的主板,也许是板卡搭配的一个建议
另外盒友们的封面都是怎么生成的,求教
更多游戏资讯请关注:电玩帮游戏资讯专区
电玩帮图文攻略 www.vgover.com