1. 请求包 (Request Packets)
这是事务的发起者,携带地址和控制信息。
A. 一致性请求 (Coherent Requests)
这些请求会影响缓存一致性状态。
|----------------------|------|------------|----------------|
| ReadShared | RdSh | 读共享,可能返回数据 | CPU 读,希望获得共享副本 |
| ReadUnique | RdUn | 读唯一,获取独占权限 | 写入前,需要独占所有权 |
| ReadNoSnp | RdNs | 读但不触发侦听 | 无缓存设备读取 |
| ReadOnce | RdOn | 读一次,不缓存 | DMA 读取,不缓存 |
| CleanShared | ClSh | 清理共享副本 | 写回共享行,不保留副本 |
| CleanInvalid | ClIn | 清理并无效化 | 写回并放弃所有权 |
| MakeInvalid | MkIn | 使无效 | 强制其他缓存无效化该行 |
| WriteBackFull | WrBf | 完整写回 | 写回脏数据到内存 |
| WriteEvictFull | WrEf | 写回并驱逐 | 写回后从缓存移除 |
| WriteNoSnpPtl | WrNP | 部分写,不侦听 | 无缓存设备部分写 |
| WriteNoSnpFull | WrNF | 完整写,不侦听 | 无缓存设备完整写 |
| WriteUniquePtl | WrUP | 部分写,获取唯一 | 有缓存设备部分写 |
| WriteUniqueFull | WrUF | 完整写,获取唯一 | 有缓存设备完整写 |
| WriteLineUnique | WrLU | 写行,获取唯一 | 缓存行大小的写操作 |
B. 非一致性请求 (Non-coherent Requests)
这些请求不会影响缓存一致性。
|---------------------|------|---------|
| ReadNoSnp | RdNs | 非一致性读 |
| WriteNoSnpPtl | WrNP | 非一致性部分写 |
| WriteNoSnpFull | WrNF | 非一致性完整写 |
| PCrdReturn | PCrd | 协议信用返回 |
2. 数据包 (Data Packets)
携带实际的数据负载,可以伴随请求或响应。
|---------------------|------|---------|-----------|
| SnpRespData | SnpD | RN → HN | 响应侦听请求的数据 |
| CompData | CmpD | HN → RN | 完成请求的数据 |
| CopyBackWrData | CpWr | RN → HN | 写回数据 |
| NCBWrData | NCWr | RN → HN | 非一致性写数据 |
| WriteData | WrD | RN → HN | 写数据 |
关键点 :数据包是独立的,与请求/响应包分离,允许更灵活的流控。
3. 响应包 (Response Packets)
表示事务状态,不携带数据。
A. 完成响应 (Completion Responses)
表示事务最终完成。
|-------------------|------|---------|----------|
| Comp | Cmp | HN → RN | 事务完成,无数据 |
| CompData | CmpD | HN → RN | 事务完成,带数据 |
| CompDBIDResp | CmpR | HN → RN | 完成+数据库响应 |
| RetryAck | RtyA | HN → RN | 重试确认 |
| PCrdGrant | PCrd | HN → RN | 协议信用授予 |
B. 分离响应 (Snoop Responses)
对侦听请求的立即响应。
|---------------------|------|---------|-----------|
| SnpResp | SnpR | RN → HN | 侦听响应 |
| SnpRespData | SnpD | RN → HN | 侦听响应+数据 |
| SnpRespDataPtl | SnpP | RN → HN | 侦听响应+部分数据 |
C. 数据库响应 (DBID Responses)
用于流控和信用管理。
|-------------------|------|-----------|
| DBIDResp | DBID | 数据缓冲区释放 |
| CompDBIDResp | CmpR | 完成+DBID响应 |
4. 侦听请求包 (Snoop Request Packets)
由 Home Node 发出,查询或修改远程缓存状态。
|------------------------|------|---------|---------|
| SnpOnce | SnpO | 获取数据副本 | 读共享请求 |
| SnpOnceFwd | SnpF | 获取数据并转发 | 优化数据传递 |
| SnpClean | SnpC | 清理数据 | 写回前清理 |
| SnpCleanFwd | SnCF | 清理并转发 | 带转发的清理 |
| SnpNotSharedDirty | SnpN | 检查非共享脏 | 优化操作 |
| SnpSharedFwd | SnSF | 共享转发 | 共享数据转发 |
| SnpUniqueFwd | SnUF | 唯一转发 | 唯一数据转发 |
| SnpMakeInvalid | SnpI | 使无效 | 写入前的无效化 |
5. 特殊/控制包
|------------------|-------------|
| Observe | 观察请求,不影响一致性 |
| PrefetchTgt | 预取目标 |
| Evict | 驱逐通知 |
| CleanUnique | 清理唯一副本 |
| StashOnce | 暂存数据到特定缓存 |