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类型的配置空间如下:
PCIE 简记 - 图1
关键寄存器含义

  • Vendor ID,Device ID:标记了一个设备的生产厂商和具体的设备
  • command:命令寄存器, 在pci设备使能pci_enable_device时会配置该寄存器。主要时负责使能或关闭pci设备的I/O 访问,memory访问和INTx中断等。
  • PCIE 简记 - 图2
  • status: 状态寄存器,用于保存pci设备的状态,如中断状态或运行产生错误时的状态。
  • PCIE 简记 - 图3
  • 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 简记 - 图4

  • 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)。
PCIE 简记 - 图5