Deferrable Memory WriteDMWr背景简介DMWr是PCIe gen6中正式引入的一种TLP类型PCIe设备可以通过DMWr机制让多个software/virtual machines的请求共享一个work queue并且因为不需要保序完成不会对后续命令形成阻塞可以从整体上提高性能和效率。简单理解就是系统上可以将对timing/latency和操作顺序不敏感的写操作与其他写操作区分开在bus繁忙时优先服务哪些对时延和顺序敏感的写操作从而可以更高效的利用系统的写带宽此外共享work queue的机制也可以在多个VM场景下减少对硬件资源的占用主要应该是内存如果有对这个应用背景更清楚的朋友欢迎评论区补充。实现细节DMWr的TLP header的format和type编码如下图所示DMWr是non-posted mem write request也就是一种memory写操作但是需要对端返回completion与原子操作类似DMWr要求操作过程保证原子性。在发送端不能将一个DMWr操作进行拆分接收侧需要按照原子操作进行地址写入同时只能返回一个completion。DMWr completers需要遵从以下规则1 functions需要正确配置Device Capabilities 2 Register中的DMWr Completer Supported和DMWr Lengths Supported2 格式正确的DMWr请求如果长度超出completer支持范围或者操作地址越界completer需要按照Completer Abort (CA)处理并且不操作目标地址3 支持DMWr Routing但不支持DMWr completer的switch如果收到DMWr请求也按照Completer Abort (CA)处理并且不操作目标地址4 如果completer因为一些暂时性的原因无法完成操作可以返回Request Retry Status (RRS)状态的Completion。Completer可以基于自己的具体实现决定什么场景下返回RRS completion5 Completer如果返回了Successful Completion (SC)则必须保证更新的memory粒度不小于64B或者request的size取两者中较小的6 多function的device允许只有部分function支持DMWr操作7 如果completer在操作memory过程中出现uncorrectable error需要按照CA处理。支持DMWr routing的RC或switch需要遵从以下规则1 RC或这switch ports需要正确设置DMWr Request Routing SupportedDevice Capabilities 3 Register中和DMWr Lengths Supported2 如果一个switch的某个port支持DMWr routing则所有的port都必须支持3 如果DMWr的地址越界比如分布在两个不同的destinationsRC或者switch需要直接返回UR completion4 RC对DMWr的P2P操作是否支持是optional的协议不做具体要求5 如果一个RC或者RP支持routing但是路由的目标port不支持DMWr也需要将DMWr当作UR处理。DMWr Requesters需要遵从以下规则1 需要正确设置Device Control 3 register中的DMWr Requester Enable bit2 如果收到RRS completionrequester可以选择重发DMWr request也可以不重发。DMWr是带data的NP请求按照PCIe序的规则Posed请求可以越过NP请求而且NP请求间也没有保序要求。基于此规则completer可以延迟处理DMWr请求所以叫deferrable memory write。由于DMWr要求原子性所以不推荐操作太长的数据会导致性能问题。这里需要关注一下DMWr和atomicop的区别DMWr 的原子性单条 DMWr TLP 载荷要么完整全部写入目标地址要么完全不写入外部任何其他事务永远看不到 “只写了一半” 的中间残缺状态。 它只保证单次写包内部完整性不锁定地址、不阻塞同地址其他读写、没有读 - 改 - 写复合逻辑。DMWr 原子性包完整性原子作用范围单条 64B 写包内部地址锁无地址排他锁同一地址可同时穿插其他 MRd/MWr/DMWr操作语义只有纯写入没有读、运算、比较逻辑解决问题保证加速器队列描述符不会残缺、不会出现半截非法任务并发缺陷多设备同时写同一个队列入口会发生覆盖丢失无同步保护。AtomicOp 原子性地址排他 RMW 原子作用范围目标内存地址全局总线锁地址锁操作期间锁定目标地址所有其他访问排队等待操作语义单 TLP 完成「读原值→运算→写回→返回旧值」完整 RMW解决问题多设备共享变量并发同步计数器、自旋锁并发优势硬件隔离竞争不会丢失更新。转载(2 封私信) PCIe协议学习-DMWr和UIO - 知乎