1 前情提要
电脑上的PCI-E接口大家即便没有深入了解过,也应该听过很多,毕竟显卡、WiFi蓝牙模块等设备都是接在PCI-E接口上的;大家在选购台式机时应该也会关注主板上PCI-E插槽的个数、版本、通道数等参数,毕竟这是与显卡性能发挥的一个重要指标。由于关于PCI-E的参数较多,且它们之间又有容易混淆的部分,而自己在工作站上折腾显卡、M2硬盘的时候也因为通道数弄错过,所以想在此记录一下。
2 PCI-E介绍
2.1 简介
先来一段Wikipedia上的介绍:
Peripheral Component Interconnect Express,简称PCI-E,官方简称PCIe,是计算机总线的一个重要分支,它沿用既有的PCI编程概念及信号标准,并且构建了更加高速的串行通信系统标准。
总之,PCIe(方便起见,下文就使用简称PCIe了)是一种高速串行计算机扩展总线标准(物理接口标准),于2003年推出了1.0版本,用来替代旧的PCI、PCI-X等总线标准的,现在已经得到了广泛应用,比如前文提到的显卡、WIFI蓝牙模块等设备都是使用该接口与主板相连接的。截止到2024年,最新版本已经是6.0版本了。
2.2 PCIe版本与带宽计算
各个版本的性能列表如下所示(限于在当前日常生活中的应用,我们只列到5.0版本):
版本 | 编码 | 传输率 | x1 | x4 | x8 | x16 |
---|---|---|---|---|---|---|
1.0 | 8b/10b | 2.5 GT/s | 0.250 GB/s | 1.000 GB/s | 2.000 GB/s | 4.000GB/s |
2.0 | 8b/10b | 5.0 GT/s | 0.500 GB/s | 2.000 GB/s | 4.000 GB/s | 8.000 GB/s |
3.0 | 128b/130b | 8.0 GT/s | 0.985 GB/s | 3.938 GB/s | 7.877 GB/s | 15.754 GB/s |
4.0 | 128b/130b | 16.0 GT/s | 1.969 GB/s | 7.877 GB/s | 15.754 GB/s | 31.508 GB/s |
5.0 | 128b/130b | 32.0 GT/s | 3.938 GB/s | 15.754 GB/s | 31.508 GB/s | 63.015 GB/s |
现在对表格中的参数进行介绍:
- 版本:不多介绍,就是我们看主板参数时常说的PCIe3.0、PCIe4.0,这与该接口的最大传输速率直接相关;
- 编码:是不同的编码格式,8b/10b指的是每10个比特只有8个是有效数据,目的是为了方便在串行传输时达到直流平衡;
- 传输率:表示每秒传输的次数,常用单位为GT/s(Giga transmission per second),注意该单位与Gbps的区别,两者没有成比例的换算关系,下文会解释;
- 带宽(单向):这里的x1~x16指的是PCIe插槽的通道数(Lane),常见的有单通道、4通道、8通道、16通道,它们之间的带宽关系就是通道数的乘积。
接下来介绍一下带宽的计算方式:传输率 x Lane数量 x 编码方案效率。以PCIe 1.0为例,其单通道的传输带宽为:
同样地,对于PCIe 3.0 x16通道来说,其传输带宽为:
根据计算公式可以看到,PCIe接口的带宽是由三方面决定的:
- 传输率:由PCIe版本决定;
- Lane数量:由设备和PCIe接口的通道数决定;
- 编码方案效率:由PCIe版本决定。
这里需要注意的是,PCIe接口的通道(Lane)数和物理接口规格是容易混淆的地方:
- 通道(Lane)数:指的是数据传输的链路数;
- 物理接口规格:指的是PCIe接口的物理长度,常见的长度有x1、x4、x8、x16。
需要注意的是,物理接口规格不等于通道数,会存在物理接口规格大于实际通道数的情况:比如有的PCIe物理接口是x16的,但是其实际只支持x8通道,后面压根没有金属触点与排线,因此该接口最多只能支持x8通道的数据传输。此外,不同物理接口规格的PCIe接口是可通用的,比如说,WiFi模块是PCIe x1接口的,但也可以插在x16、x8、x4上使用,只不过会浪费接口罢了。
上图是不同物理规格的PCIe接口,可以从长度上直观地看出来;至于通道数就没那么好认了,需要看主板上的丝印或者使用说明书。
如下面两张图所示,这是我工作站主板上的PCIe接口,可以看到这5条PCIe接口都是PCIe 3.0版本、x16规格的,但是支持的最大通道数不同,从丝印上可以看出:slot1最高支持x8通道;slot2被挡着了,是x16通道;slot3是x1通道;slot4是x16通道;slot5是x4通道。
3 Ubuntu系统下查看PCIe设备参数
首先,在Ubuntu上可以利用dmidecode
命令查看电脑主板的PCIe接口信息:
1 | -❯ sudo dmidecode | grep "PCI" |
可以看到本人工作站主板上的所有PCIe接口信息,与主板丝印上的信息完全对应。
然后,可以利用lspci
命令进一步查看显卡设备信息、硬盘信息:
1 | -❯ sudo lspci | grep -i nvi |
可以看到我的工作站上安装了两块RTX A4000的显卡。
进一步地,还可以使用dmesg
命令查看PCIe设备的带宽信息:
1 | -❯ sudo dmesg | grep Gb |
可以看到,前两条信息对应的是两个显卡,它们的带宽都是126.016 Gb/s,也就是15.752 GB/s,由8.0 GT/s可以看出是PCIe 3.0版本,x16通道,跟表格中的信息是吻合的;而括号内显示的是该显卡最高可支持的PCIe版本与带宽信息,从16 GT/s可以看出该显卡是支持PCIe 4.0版本的,x16通道的带宽对应为252.048 Gb/s,也就是31.506 GB/s。
第三条信息对应的是使用PCIe转接卡安装的M2硬盘,可以看到该硬盘实际工作于PCIe3.0 x4通道的31.504 Gb/s,而其最高支持的带宽是PCIe 4.0 x4通道的63.012 Gb/s。