Linux下查看显卡PCIE速率x16x8x4

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

Windows下使用GPU-Z即可查看

在这里插入图片描述

Linux

  1. 确定当前显卡型号

    lspci | grep NVIDIA
    

    返回

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

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

  2. 通过 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的值是会发生变化的,这是因为英伟达的显卡会根据实际使用情况进行自动切换。

  3. 计算带宽

    首先强调几个概念:

    • 传输速率为每秒传输量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。

  1. 修改显卡设置,使其达到最大带宽

    打开NVIDIA设置,可以通过快捷方式打开,也可以通过命令行:

    nvidia-setting
    

    找到 PowerMizer选项
    在这里插入图片描述

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

  2. 此时再此执行

    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。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐