首先感谢 @木头龙 和 @XZiar 给予指正和帮助,让我明白了CPU I5 6500的PCIe总通道数是20条,之前查到存在显卡和固态硬盘抢带宽导致游戏卡顿的情况,误以为I5 6500的PCI Express 3.0 16条通道包括DMI 3.0的4条通道,实际上两者是独立的,即CPU直连的PCI Express16条通道(一般是给显卡),CPU通过DMI 3.0通道(基本可以视为PCIe 3.0×4)连接主板南桥芯片再分配给显卡以外的PCI-E插槽。(I5 6500属于SKYLAKE架构,具体架构见:Skylake (client) - Microarchitectures - Intel - WikiChip)
目前在主板BIOS里将PEG X设置为GEN2,同时DMI设置为GEN3,游戏没有卡顿现象了。现在游戏卡顿原因还不好判断,目前推测,可能是主板BIOS里PEG X、DMI同时设置为AUTO引发的问题,另外显卡驱动也更新过了,也不排除是显卡驱动的问题,GTX 960的驱动好像专门为PEG X设置为GEN3出了一个补丁,让显卡在GEN3下更稳定的运行。
之前分析错误的原文:
一、电脑配置(2016年配的)
实在忍受不了机械硬盘的拉跨了,鉴于30系、6000系显卡价格太贵,决定做等等党,暂时先升级下存储。
主板:微星B150M MORTAR(迫击炮)
CPU:英特尔酷睿6代 I5-6500
固态硬盘(SSD):西部数据SN850 1T黑盘(接的PCIE转M.2扩展卡,因为主板太旧没有M.2 SSD接口,只有M.2网卡接口。)
二、CPU的直连PCIe通道数(Lane)
CPU的直连PCIe通道是PCIe 3.0 ×16,即16条通道,PCIe 3.0(即GEN3)每条通道最大带宽为:8gbps。位转换为字节,即1Gb/s,16条通道的最大带宽为:16Gb/s,分配方式有3种,1×16,2×8,1×8+2×4。
三、主板PCIe通道配置
查看主板的产品手册(厂商官方网站可以下载),根据结构图和PCIe扩展插槽的说明,得出以下结论。
1. 显卡插在PCI_E1插槽上,使用的直连CPU且显卡专用PCIe总线,插槽的配置是PCIe 3.0×16,最大带宽为16Gb/s。
2. 剩余三条PCIe插槽是先连到主板芯片组,再通过DMI 3.0连接到CPU,3条PCIe插槽分配方式可以是1×4,1×1+1×1+1×2。
DMI是主板南桥芯片与CPU之间的通道,在PCIe总线的基础上演变而来,本质上可以视同PCIe。主板南桥芯片负责把DMI 3.0的带宽分给各个设备,如剩余3条PCIe插槽、SATA硬盘、USB接口及外设等。DMI 3.0能分配给另外3条PCIe插槽的通道数实际上就是PCIe 3.0×4,即总带宽4Gb/s。
固态硬盘通过扩展卡接在PCI_E4插槽上,插槽的配置是PCIe 3.0×4,最大带宽为4Gb/s。
四、故障分析
玩守望先锋时会突然出现掉帧现象,本来很平滑的帧数突然变得很低,画面一卡一卡的,一会很流畅一会很卡,帧数很不稳定。
分析原因:通过查询互联网得出可能是抢带宽的原因,研究解决办法。
第一步,确认降低显卡PCIe插槽带宽对显卡带来的影响,根据下图得出结论,没什么影响,实际上吃不了很多PCIe的带宽。
第二步,查看主板产品手册,发现可在BIOS里设置降低显卡插槽的PCIe规格,将PCIe 3.0降到2.0。PCIe规格降低一代即带宽缩小一倍,带宽相当于从PCIe 3.0×16降低为PCIe 3.0×8,这样调整的结果就是显卡PCIe+固态硬盘PCIe的总带宽从20Gb/s降为12Gb/s,小于CPU的PCIe总带宽16Gb/s,即20条PCIe通道变为12条通道(显卡8条、固态硬盘4条),小于CPU的PCIe16条总通道。——错误依据得出错误结论。
然后操作之,将PEG X由自动改为GEN2,DMI从自动改为GEN3。既然显卡PCIe的带宽降了,那固态硬盘就不用降了。(PEG即PCI Express for Graphics,显卡专用PCIe总线)
第三步,进入游戏体验,帧数变得稳定了,画面很平滑。
4. 主板对显卡、固态硬盘PCIe抢带宽的最新解决方案
(1)主板支持PCIe Bifurcation即PCIe通道拆分,具体操作为英特尔或AMD厂商在主板芯片组里增加拆分功能,或者主板厂家通过在主板上增加拆分卡等类似操作来支持、
比如可以把CPU的16条通道拆分为1×8+1×8,或者1×8+1×4+1×4,一个给显卡用,一个给固态硬盘用,就OK了。这个办法我认为和我改BIOS的原理是一样的。就是分配好显卡和固态硬盘在PCIe上的道路,各走各路,不准抢道。
但是PCIe通道拆分对PCIe的通道利用率理论上可以达到100%吧,像我改BIOS限制显卡PCIe带宽的改法浪费了PCIe 3.0 ×4的带宽,如果拆分的好,又可以多接一个NVME固态硬盘了;或者提高NVME固态硬盘的PCIe通道数等于提高PCIe带宽,可以更好的发挥NVME固态硬盘的性能。
(2)购买单独的拆分卡来实现PCIe通道拆分,可以装在PCIe插槽上,再转接两个或者多个M.2 SSD。
附录:PCIe通道规范(数据有点小小的误差,可以忽视)
| PCIe单通道规格 | 最大带宽(单位:每秒传输的位数) | 极限速度(单位:每秒传输的字节数) |
|---|---|---|
| PCIe Gen1 | 2gbps | 250Mb/s |
| PCIe Gen2 | 4gbps | 500Mb/s |
| PCIe Gen3 | 8gbps | 1Gb/s |
| PCIe Gen4 | 16gbps | 2Gb/s |
Ps: Gen是Generation的缩写,即一代。Gen3即3代或3.0版。