In PCI-X, before the Address Phase, there’s an extra time slot called the Attribute Phase.
Here, the requester provides:
- Byte Count (how much data will be transferred).
- Requester ID (Bus:Device:Function number → who’s making the request).
- Extra control bits, like:
- No Snoop (NS)
- Relaxed Ordering (RO)
These attributes let the system make smarter decisions about how to handle the transaction.
No Snoop (NS) Bit
Normally, when memory is accessed:
- The CPU must check ("snoop") its internal caches to see if that memory address is already cached.
- If cached:
- Cache may need to write back (if dirty).
- Or invalidate the cached copy (to avoid stale data).
- This snooping adds latency.
👉 But if the requester knows the target memory region is uncacheable (like DMA buffers for I/O devices), snooping is a waste.
- Setting NS = 1 tells the system:
“Skip cache snooping — this memory access won’t hit CPU caches anyway.”
✅ Benefit: Lower latency, faster DMA.
Relaxed Ordering (RO) Bit
By default, PCI/PCI-X follows Strong Ordering:
- Transactions must complete in the same order they were issued.
- This prevents hazards like:
- Write → Read to the same address (must keep order).
But not all transactions depend on each other. For example:
- Write packet to NIC buffer A.
- Write packet to NIC buffer B.
These two are independent.
👉 Setting RO = 1 tells bridges/buffers:
“This transaction doesn’t depend on the earlier ones — it can be reordered.”
✅ Benefit: Improves throughput, especially under heavy I/O loads, because the bus/bridges can reorder independent transactions for efficiency.