Linux下查看显卡PCIE速率x16x8x4
由于linux软件并不是很齐全所以查看显卡占用PCIE的带宽并不直观,所以本文介绍如何查看。
Windows下使用GPU-Z即可查看
Linux
-
确定当前显卡型号
lspci | grep NVIDIA
返回
02:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)
可以看出显卡型号为 GeForce GTX 960M
-
通过 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: 0Interrupt: pin A routed to IRQ 131Region 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 3Flags: 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: 0000Capabilities: [78] Express (v2) Endpoint, MSI 00DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s unlimited, L1 <64usExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 75.000WDevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+MaxPayload 256 bytes, MaxReadReq 512 bytesDevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-LnkCap: Port #1, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <512ns, L1 unlimitedClockPM+ 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的值是会发生变化的,这是因为英伟达的显卡会根据实际使用情况进行自动切换。
-
计算带宽
首先强调几个概念:
- 传输速率为每秒传输量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 吞吐量(可用带宽)计算方法:
吞吐量 = 传输速率 * 编码方案
在计算之前需要知道 编码方案,大家可以查表,如下:
所以我们根据图中可以看出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。
-
修改显卡设置,使其达到最大带宽
打开NVIDIA设置,可以通过快捷方式打开,也可以通过命令行:
nvidia-setting
找到 PowerMizer选项
然后调节Preferred Mode(优先级模式)为 Prefer Maximum Performance。
-
此时再此执行
sudo lspci -vv
LnkCap: Port #1, Speed 8GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <1us, L1 <4usClockPM+ 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。