pcie 理解

相关名词

RCRoot Complex
BARBase Address Register
BDFBus+Device+Function组成ID用来定义pci设备id。PCIe系统,最大支持256条Bus,每条Bus上可以挂最多32个Device,而每个Device最多又能实现8个Function,而每个Function对应着4KB的配置空间。上电的时候,这些配置空间都是需要映射到Host的内存空间,因此,需要占用内存空间是:256*32*8*4KB =256MB。
TLPTransaction Layer Packet 。TLP都是生于发送端的事务层(Transaction Layer),终于接收端的事务层。

pcie 速率

GT/s —— Giga transation per second (千兆传输/秒)

真实的传输速率和编码方案有关系,例如pcie2.0使用8b/10b编码方案,即每次发送8个bit需要发送10个bit,其中2个bit对上层是没用的。所以 PCIe 2.0协议的每一条Lane支持 5 * 8 / 10 = 4 Gbps = 500 MB/s 的速率。 

网卡速率可以通过lspc  -s 00.05.0 -vvv 查看speed。从speed可以反推pcie 的版本。

pcie 理解

Type 0是Endpoint的配置,Type 1是Bridge(PCIe时代就是Switch)的配置。

Device ID,Vendor ID,Class Code(表明类别网卡、bridge等)和Revision ID(修订版本),是只读寄存器。

Endpoint Configuration(Type 0),提供了最多6个BAR,而对Switch(Type 1)来说,只有2个。

这6个BAR是为了不同的功能而划分的不通空间。一般是3种不通的功能。 

- memory BAR  位于内存空间,可以通过mmap 映射访问

- io BAR  位于io空间,需要特殊访问io指令访问

- msi-x BAR  用于msi-x中断向量配置空间

BAR空间通过/sys/bus/pci/devices/[pci_addr]/resource 接口展示,有三列. 只读

第一列为PCI BAR起始地址

第二列为PCI BAR终止地址

第三列为这个PCI BAR的标识

对应这struct resource

上图中resource0 表示 BAR0的空间的 , resource2表示 BAR2空间 。可读写

下图描述pci_dev 和 resource 及dpdk中igb_uio 结构体之间的关系。

从crash 工具中可以看到resource 结构中的成员变量

 可以看大name其实就是我们常说的pci 号,

flags 用来标识属于什么类型等,例如flags中含有0x200 标识memoy BAR。 ioport.h中定义了很多flag 宏

 parent则是父 pci bus

sibling是相邻的另外一个pci resource 

  

这3中BAR空间会根据位数的不同而又不同布局,例如:32位可能分别对应1,3,5 剩下的的2,4,6则预留。64位则每种空间2个。

由于256位无法描述pcie的强大,pcie扩展为4KB, 前256位保持不变。

 cpu要读去EP的内容需要经过以下几个步骤

1) RC通过TLP(经过switch)交互获取数据

2)RC将获取的数据保存在内存中

3) CPU通过访存的方式间接的获取EP的内容。

引用

https://www.cnblogs.com/jungle1996/p/12398915.html  

http://www.ssdfans.com/?p=8210

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值