Linux下查看显卡PCIE速率x16x8x4

由于linux软件并不是很齐全所以查看显卡占用PCIE的带宽并不直观,所以本文介绍如何查看。

Windows下使用GPU-Z即可查看

bios如何获取PCIE的线宽 bios查看pcie速率_bios如何获取PCIE的线宽

Linux

  1. 确定当前显卡型号
lspci | grep NVIDIA

返回

02:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

可以看出显卡型号为 GeForce GTX 960M

  1. 通过 lspci 指令查看:
sudo lspci -vv

在返回的结果信息中找到与自己显卡相同的型号,如下:

02:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)
 Subsystem: Dell GM107M [GeForce GTX 960M]
 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
 Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
 Latency: 0
 Interrupt: pin A routed to IRQ 131
 Region 0: Memory at de000000 (32-bit, non-prefetchable) [size=16M]
 Region 1: Memory at c0000000 (64-bit, prefetchable) [size=256M]
 Region 3: Memory at d0000000 (64-bit, prefetchable) [size=32M]
 Region 5: I/O ports at e000 [size=128]
 [virtual] Expansion ROM at df000000 [disabled] [size=512K]
 Capabilities: [60] Power Management version 3
 	Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
 	Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
 Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
 	Address: 00000000fee00338  Data: 0000
 Capabilities: [78] Express (v2) Endpoint, MSI 00
 	DevCap:	MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 <64us
 		ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 75.000W
 	DevCtl:	Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
 		RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
 		MaxPayload 256 bytes, MaxReadReq 512 bytes
 	DevSta:	CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
 	LnkCap:	Port #1, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <512ns, L1 unlimited
 		ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
 	LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
 		ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
 	LnkSta:	Speed 2.5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

主要信息是其中的 LnkCap 为显卡理论的传输速率上限,LnkSta为显卡当前实际的传输速率,切记 LnkSta的值是会发生变化的,这是因为英伟达的显卡会根据实际使用情况进行自动切换。

  1. 计算带宽
    首先强调几个概念:
  • 传输速率为每秒传输量GT/s,而不是每秒位数Gbps,因为传输量包括不提供额外吞吐量的开销位; 比如 PCIe 1.x和PCIe 2.x使用8b / 10b编码方案,导致占用了20% (= 2/10)的原始信道带宽。
  • GT/s —— Giga transation per second (千兆传输/秒),即每一秒内传输的次数。重点在于描述物理层通信协议的速率属性,可以不和链路宽度等关联。
  • Gbps —— Giga Bits Per Second (千兆位/秒)。GT/s 与Gbps 之间不存在成比例的换算关系。

PCIe 吞吐量(可用带宽)计算方法:

吞吐量 = 传输速率 *  编码方案

在计算之前需要知道 编码方案,大家可以查表,如下:

bios如何获取PCIE的线宽 bios查看pcie速率_bios如何获取PCIE的线宽_02

所以我们根据图中可以看出GTX 960M理论支持PCIE3.0,所以PCIE3.0每一条Lane支持:

8 * 128 / 130 = 7.8769Gbps = 984.6MB/s

所以理论上显卡是支持PCIE3.0 X16的,并且总带宽为:15.8 GB/s。

但是LnkSta值也就是实际值为2.5GT/s,那就是PCIE1.0,并且只使用了8根PCIE通道,说明没有跑满,即PCIE1.0 X8。

  1. 修改显卡设置,使其达到最大带宽
    打开NVIDIA设置,可以通过快捷方式打开,也可以通过命令行:
nvidia-setting

找到 PowerMizer选项

bios如何获取PCIE的线宽 bios查看pcie速率_linux显卡pcie通道_03

然后调节Preferred Mode(优先级模式)为 Prefer Maximum Performance

  1. 此时再此执行
sudo lspci -vv
LnkCap:	Port #1, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <1us, L1 <4us
 		ClockPM+ Surprise- LLActRep- BwNot- ASPMOptComp+
 	LnkCtl:	ASPM Disabled; RCB 64 bytes Disabled- CommClk+
 		ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
 	LnkSta:	Speed 8GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-

可以看出 LnkSta 已经变化,这是此显卡在本PC上发挥的最大带宽,PCIE3.0 X8。