069、PCIE属性字段:缓存、顺序与安全
从一次DMA数据损坏说起
上个月调试一块自研的PCIE采集卡,遇到了一个诡异的问题:主机通过DMA从设备读取图像数据,大部分帧正常,但偶尔会出现局部数据错位,像是缓存没刷干净。用逻辑分析仪抓链路层报文,发现TLP(事务层包)本身完好,但内存中的数据就是不对。排查三天后,终于锁定在设备端TLP的**属性字段(Attribute Field)**配置上——那几位看似不起眼的缓存、顺序控制位,差点让项目延期。
今天我们就拆解PCIE事务头中的这个关键区域,看看它如何影响系统性能与数据安全。
属性字段在哪?长什么样?
PCIE TLP头中有3个比特专门用于属性控制,位于Byte 2的Bit 4~6(对于3DW头)或Byte 1的Bit 4~6(对于4DW头)。别看只有3位,它直接关联到CPU缓存一致性、事务排序、端到端数据完整性这三个底层机制。
这三个比特分别是:
- No Snoop (位4):缓存嗅探开关
- Relaxed Ordering (位5):宽松排序使能
- ID-Based Ordering (位6):基于ID的排序(PCIE 3.0引入)
下面我们逐个拆开说。
缓存控制:No Snoop位
这