1 传输速率
PCIe 吞吐量(可用带宽)计算方法:吞吐量 = 传输速率 * 编码方案
| 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 |
2 配置空间
type0:pcie设备的看配置空间
type1:pcie桥的配置空间,pcie桥在内核扫描注册时,相当于透明的,程序员不需要过多配置;
type0类型的配置空间如下:
关键寄存器含义
- Vendor ID,Device ID:标记了一个设备的生产厂商和具体的设备
- command:命令寄存器, 在pci设备使能pci_enable_device时会配置该寄存器。主要时负责使能或关闭pci设备的I/O 访问,memory访问和INTx中断等。

- status: 状态寄存器,用于保存pci设备的状态,如中断状态或运行产生错误时的状态。

- bar:决定PCI/PCIe设备空间映射到系统内存具体位置的寄存器,cpu需要访问pcie空间时,只需要访问这个映射后的地址即可;
Step1:所谓初始化,就是系统(软件)向整个BAR都写1,来确定BAR的可操作的最低位是哪一位。假设,当前可操作的最低位为12,因此当前BAR可申请的(最小)地址空间大小为4KB。
Step2:完成初始化(写1操作)之后,软件便开始读取BAR的值,来确定每一个BAR对应的地址空间大小和类型。其中操作的类型一般由最低四位所决定。
Step3:最后一步是,软件向BAR的高比特写入地址空间的起始地址(Start Address),完成pcie设备空间到内存空间的映射。
- Capbility Pointer:PCI capbility的地址偏移, capbility用于表示pci设备支持的能力。该寄存器存放Capabilities 结构链表的头指针。例如,pcie总线的MPS(Max Payload Size),MRRS(Max Read Request size)自知则知之
3 PCIE 层次结构
事务层(Transaction Layer),数据链路层(Data Link Layer),物理层(Physical Layer);
- PCIe事务层定义了总线所使用的事务,其中大部分都与PCI总线兼容在PCIe Spec中,规定了四种类型的请求(Request):Memory、IO、Configuration和Messages。
- 数据链路层接收来自事务层的数据报文,添加Sequence Number前缀和CRC后缀。数据链路层使用ACK/NAK协议保证报文的可靠传递。
- 物理层是PCIe总线的最底层,将PCIe设备相互连接在一起。它负责接收和转发各种数据包(TLP,DLLP)。另外它还创建和解码一些专门的序列Ordered-Set Packet或者叫做PLP(Physical Layer Packet),这些序列用于同步和管理链路。物理层还实现了链路训练和初始化的功能,它通过LTSSM来完成(Link Training and Status State Machine)。
注:事物层优先级问题:PCIe标准中为每一个包都分配了一个优先级,通过事务层包的Header中的TC【2:0】进行区别,(Traffic Class,传输等级),TC越大,传输优先级越高,对应的包也会优先发送。通常支持QoS(Quallition of Service)的PCIe总线系统,对于每一个Tc值都会有一个独立的VC(虚拟通道,viatual channel)相对应,VC就是一个buffer缓存,作用是缓存数据包, 在switch端,switch根据优先级进行包传输,即为端口仲裁(Arbitrition of Port)。
