# pcie是一种点对点的并且有层次的总线协议,为了完成这种属性设计了三种节点模式
- rc 根管理者模式
- ep 终端节点模式
- switch/bridge/pf 调度节点 类似路由器
# pcie的几个实体
- rc属于cpu芯片的单元
- eswitch 属于芯片
- ep属于某个外设
# pcie地址访问转换机制
术语:
ats 在ep或者rc上? 用于想iommu请求转换地址 虚拟地址iova到pa
atc 地址转换缓存 在ep上 需要ep支持或开启该功能
at tlp报文中2个bit标记是否已经转换
pcie是基于信任的报文,意思是说ep标记at完全靠诚信 也可能没有atc他也标记了
at 是pcie报文中两个bit表示当前访问是否经过了iommu转换了 一般第一次ats转换后 由atc中缓存,下次使用直接atc取然后tlp报文at标记已转换 所以是基于信任的 当然同时带来了问题
pcie,报文里面访问的地址可能是虚拟地址,也可能是物理地址
如果是虚拟地址 就需要到iommu去做地址转换 需要转换就标记at
如果是atc里面存了 就是已转换地址 标记at已转换
at在全链路路由 到达eswitch 如果at标记已转换 且目的落在本域 直接p2p,如果不在网上层送 类似路由器
# acs作用
acs: 地址控制服务
pcie因为基于信用 带来问题就是可能不诚信 让ep访存绕过iommu 也就绕过一些检查
怎么办?就需要在调度节点添加一个类似acl的功能
acs就是在调度节点如果开启 那么在路由前 会做检查 如果配置了不允许p2p 就算at标记已转换 也得送到rc到iommu
acs相当于一个安全补丁
总结:
rc ep是节点,不同模式的节点 类似主从的关系节点
ats atc是地址转换的两种功能 s是第一次在rc去请求转运地址 c是第一次转换后的缓存 类似cpu的tbl
at是pcie tlp报文中的字段2bit 表示这个报文是否已经转换地址 如果atc查到就会标记为已转换 同时也可能被恶意标记
acs是类似解决恶意标记等问题 在bridge上打的补丁 哪怕标记at也得到rc走一圈 过iommu的一些安全策略
atc acs都是可开关的功能 简单理解atc在ep上 acs在eswitch上 ats在rc上
以上勘误后期逐渐完善
以上参考来自wikipedia和《软硬件融合 超大规模云计算架构创新之路》