pcie带宽

PCIe传输速率和可用带宽(吞吐量)计算
转载 https://blog.youkuaiyun.com/s_sunnyy/article/details/79027379

ex. PCIE(X4) generation 2,
line speed is 5GT/s,
line width is 4,
code format is 8B/10B,
so the total bandwidth is 5 x 4 /(10/8) = 16Gbps = 2GB/s,
and the user interface will have 125MHz x 128bits = 16Gbps = 2GB/s

====================================================================

PCI Express 版本

编码方案

传输速率

吞吐量

×1

×4

×8

×16

1.0

8b/10b

2.5GT/s

250MB/s

1GB/s

2GB/s

4GB/s

2.0

8b/10b

5GT/s

500MB/s

2GB/s

4GB/s

8GB/s

3.0

128b/130b

8GT/s

984.6MB/s

3.938GB/s

7.877GB/s

15.754GB/s

4.0

128b/130b

16GT/s

1.969GB/s

7.877GB/s

15.754GB/s

31.508GB/s

5.0

128b/130b

32 or 25GT/s

3.9 or 3.08GB/s

15.8 or 12.3GB/s

31.5 or 24.6GB/s

63.0 or 49.2GB/s


几个概念:

传输速率为每秒传输量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 吞吐量(可用带宽)计算方法:

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


例如:PCI-e2.0 协议支持 5.0 GT/s,即每一条Lane 上支持每秒钟内传输 5G个Bit;但这并不意味着 PCIe 2.0协议的每一条Lane支持 5Gbps 的速率。

为什么这么说呢?因为PCIe 2.0 的物理层协议中使用的是 8b/10b 的编码方案。 即每传输8个Bit,需要发送10个Bit;这多出的2个Bit并不是对上层有意义的信息。

那么, PCIe 2.0协议的每一条Lane支持 5 * 8 / 10 = 4 Gbps = 500 MB/s 的速率。

以一个PCIe 2.0 x8的通道为例,x8的可用带宽为 4 * 8 = 32 Gbps = 4 GB/s。


同理,

PCI-e3.0 协议支持 8.0 GT/s, 即每一条Lane 上支持每秒钟内传输 8G个Bit。

而PCIe 3.0 的物理层协议中使用的是 128b/130b 的编码方案。 即每传输128个Bit,需要发送130个Bit。

那么, PCIe 3.0协议的每一条Lane支持 8 * 128 / 130 = 7.877 Gbps = 984.6 MB/s 的速率。

一个PCIe 3.0 x16的通道,x16 的可用带宽为 7.877 * 16 = 126.031 Gbps = 15.754 GB/s。


由此可计算出上表中的数据



### 在 Ubuntu 系统中检查 PCIe 带宽使用情况 在 Ubuntu 系统中,可以通过多种工具和命令来查看 PCIe 设备的带宽使用情况及相关信息。以下是一些常用的方法和工具: #### 1. 使用 `lspci` 查看 PCIe 设备的基本信息 `lspci` 是一个常用的命令,用于列出系统中的所有 PCIe 设备及其基本信息。可以结合 `-vvv` 参数获取更详细的设备属性。 ```bash sudo lspci -vvv ``` 该命令会显示设备的厂商、型号、修订版本以及链接速度等信息[^1]。 #### 2. 检查 PCIe 链接速度和位宽 要检查特定 PCIe 设备的链接速度和位宽,可以使用以下命令: ```bash sudo lspci -nn -d <VendorID:DeviceID> -vvv | grep -i width ``` 例如,如果设备的 Vendor ID 和 Device ID 为 `10de:2204`,则可以运行: ```bash sudo lspci -nn -d 10de:2204 -vvv | grep -i width ``` 这将返回设备的位宽信息,如 `LnkCap: Port #0, Speed 8GT/s, Width x16`,表示该设备支持的最大链接速度为 8GT/s,位宽为 x16[^1]。 #### 3. 使用 `ethtool` 查看网卡的 PCIe 链接速度 对于 PCIe 网卡,可以使用 `ethtool` 工具来查看其链接速度和状态。首先需要安装 `ethtool`: ```bash sudo apt-get install ethtool ``` 然后运行以下命令查看网卡的详细信息: ```bash sudo ethtool <网卡名称> ``` 例如,如果网卡名称为 `enp4s0`,则运行: ```bash sudo ethtool enp4s0 ``` 输出中可能会包含类似 `Speed: 1000Mb/s` 的信息,表示网卡当前的链接速度[^2]。 #### 4. 使用 `pciutils` 获取更详细的 PCIe 性能数据 `pciutils` 是一组用于管理和调试 PCIe 设备的工具。可以通过以下命令安装: ```bash sudo apt-get install pciutils ``` 安装完成后,可以运行以下命令查看 PCIe 设备的性能统计信息: ```bash sudo lspci -s <Slot> -xxx ``` 其中 `<Slot>` 是设备的插槽号,例如 `01:00.0`。该命令会返回设备的寄存器值,从中可以分析出 PCIe 链接的实际使用情况。 #### 5. 使用 `pcitop` 实时监控 PCIe 带宽 `pcitop` 是一个专门用于实时监控 PCIe 带宽使用情况的工具。虽然它不是默认安装的工具,但可以通过以下方式安装和使用: - 下载源代码并编译安装(具体步骤请参考项目文档)。 - 安装完成后,运行以下命令开始监控: ```bash sudo pcitop ``` 该工具会以表格形式显示每个 PCIe 设备的读取和写入带宽,便于分析性能瓶颈[^3]。 #### 6. 使用 `nmon` 综合监控系统资源 `nmon` 是一个多功能的系统监控工具,可以用来查看 CPU、内存、磁盘以及 PCIe 设备的性能。可以通过以下命令安装: ```bash sudo apt-get install nmon ``` 运行 `nmon` 后,按键盘上的 `P` 键切换到 PCIe 监控模式,查看设备的带宽使用情况。 --- ### 示例代码 以下是一个简单的脚本,用于自动化获取 PCIe 设备的速度和位宽信息: ```bash #!/bin/bash device_id="10de:2204" lspci_output=$(sudo lspci -nn -d $device_id -vvv) width_info=$(echo "$lspci_output" | grep -i width) speed_info=$(echo "$lspci_output" | grep -i speed) echo "PCIe 设备信息:" echo "位宽:$width_info" echo "速度:$speed_info" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值