0%

PCI-E接口简介及Ubuntu查看相关信息教程

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接口的带宽是由三方面决定的:

  1. 传输率:由PCIe版本决定;
  2. Lane数量:由设备和PCIe接口的通道数决定;
  3. 编码方案效率:由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
2
3
4
5
6
7
8
9
10
11
-❯ sudo dmidecode | grep "PCI"
PCI is supported
Internal Reference Designator: Mini-SAS PCIe SSD-0
Internal Reference Designator: Mini-SAS PCIe SSD-1
Type: x8 PCI Express 3 x16
Type: x16 PCI Express 3 x16
Type: x1 PCI Express 3 x16
Type: x16 PCI Express 3 x16
Type: x4 PCI Express 3 x16
Type: 32-bit PCI
Description: PCIE_AMB

可以看到本人工作站主板上的所有PCIe接口信息,与主板丝印上的信息完全对应。

然后,可以利用lspci命令进一步查看显卡设备信息、硬盘信息:

1
2
3
4
5
6
7
-❯ sudo lspci | grep -i nvi
0000:17:00.0 VGA compatible controller: NVIDIA Corporation GA104GL [RTX A4000] (rev a1)
0000:17:00.1 Audio device: NVIDIA Corporation GA104 High Definition Audio Controller (rev a1)
0000:65:00.0 VGA compatible controller: NVIDIA Corporation GA104GL [RTX A4000] (rev a1)
0000:65:00.1 Audio device: NVIDIA Corporation GA104 High Definition Audio Controller (rev a1)
-❯ sudo lspci | grep -i samsung
10000:01:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd Device a80c

可以看到我的工作站上安装了两块RTX A4000的显卡。

进一步地,还可以使用dmesg命令查看PCIe设备的带宽信息:

1
2
3
4
5
6
-❯ sudo dmesg | grep Gb
[ 0.469880] pci 0000:17:00.0: 126.016 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x16 link at 0000:16:00.0 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
[ 0.473133] pci 0000:65:00.0: 126.016 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x16 link at 0000:64:00.0 (capable of 252.048 Gb/s with 16.0 GT/s PCIe x16 link)
[ 1.029961] pci 10000:01:00.0: 31.504 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x4 link at 10000:00:00.0 (capable of 63.012 Gb/s with 16.0 GT/s PCIe x4 link)
[ 1.033869] ahci 0000:00:17.0: AHCI 0001.0301 32 slots 8 ports 6 Gbps 0xff impl SATA mode
[ 1.539399] ata7: SATA link up 1.5 Gbps (SStatus 113 SControl 300)

可以看到,前两条信息对应的是两个显卡,它们的带宽都是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。

参考文章