PCIe原子操作(Atomic Operation)

1. PCIe原子操作介绍

  原子操作(Atomic Operation, AtomicOp)是指不可被中断的一个或一系列操作,即该操作执行完毕前不会被任何其他事务或事件打断。PCIe进行原子操作时,发送单笔transaction即可完成 ① 读取目的地址原始值、② 修改原始值、③ 返回原始值这三步操作,且该三步不可被打断。原子操作有以下三种:


  1. FetchAdd。该请求包含一个操作数,即需要累加的值A。该请求对应四步操作:读取目的地址原始值O -> 两数补码相加求和(O+A,忽略仅为与溢出) -> 把求得的和sum写入目的地址 -> 返回目的地址原始值O。

  2. Swap。该请求包含一个操作数,即需要交换的值S。该请求对应三步操作:读取目的地址原始值O -> 把值S写入目的地址 -> 返回目的地址原始值O。

  3. CAS(Compare and Swap)。该请求包含两个操作数,即需要比较的值C及需要交换的值S。该请求对应四步操作:读取目的地址原始值O -> C与O进行比较 -> 若O=C即把S写入目的地址 -> 返回目的地址原始值O。


  Atomic操作操作数位宽有32/64/128 bit三种,FetchAdd、Swap、CAS均支持32bits及64bits,目前(PCIe 5.0)仅CAS支持128bits操作数。Atomic操作的返回值位宽与操作数位宽相同。


  PCIe中原子操作能力是可选的,软件可以通过读取完成者PCIe设备能力2寄存器来获知完成者是否具备原子操作能力及原子操作路由能力,在发送原子操作请求之前也必须软件使能发送者PCIe设备控制2寄存器中的相关控制位。按照原子操作的请求者及完成者分类,PCIe原子操作可分为三类,分别为RC-to-EP, EP-to-RC, EP-to-EP。原子操作的发送者、完成者及原子操作包途径的所有交换节点均需具备原子操作的能力才能完成原子操作。为了防止原子操作请求包被推送到不相关的路由节点,可以软件配置设备控制2寄存器的原子出口阻塞比特位,这样不相关路由节点在接收到原子操作请求后会把其当作畸形包处理。需要注意的是,PCIe到PCI/PCI-X桥之间是不支持原子操作的,此时可以采用目标锁定的方式发送locked transaction实现跟原子操作相同的功能。


  说到底,PCIe原子操作是一种存储器操作,所有存储器空间管理标准亦适用于PCIe原子操作。

PCIe Device Capabilities 2 Register

PCIe Device Capabilities 2 Register

在这里插入图片描述

PCIe Device Control 2 Register

2. PCIe原子操作优点及应用场景

  跟PCIe目标锁定请求相比,PCIe原子操作时延更低、可扩展性更强、对其他PCIe报文影响更小。尤其在对高级同步算法的良好支持方面,PCIe原子操作为高性能SMP应用到PCIe互联多处理器(紧耦合加速器、协处理器或通用图形处理器GPGPU等)系统的快速移植提供了可能。

3. PCIe原子操作报文协议相关总结

  • PCIe原子操作是非转发内存读取事务(NP Mrd),支持32bit及64bit地址格式;
  • 原子操作的三种类型(FetchAdd, Swap, CAS)分别采用独立的类型码;
  • 完成者根据原子操作请求包中的length域及类型码来获知其需要返回的操作数位宽;
  • 若请求者支持自动地址转换(ATS),其发出的原子操作中的地址可以是转换后的地址;
  • 原子操作完成者收到原子操作请求包后,若其在访问目的地址或执行原子操作时出现不可纠正的错误,完成者需反馈CA;
  • 若原子操作完成者收到了其不支持的操作请求或操作数长度,按照UR进行处理;

4. 随时更新。。。


参考

  1. PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)

版本描述时间
v0.1初稿,PCIe原子操作基本介绍2021.09.02 ❤️🔥😄

  • 37
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 40
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MangoPapa

请作者喝瓶可乐吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值