Write propagation is performed by directly updating all the cached values across multiple processors.
BusUpd takes shorter time when compared to Flush operation, since writes made to caches are faster than to memory.
However, this causes a lot more memory transactions[3] which can slow down the system, especially when multiple processors are writing to the same cache block.
The protocol allows the cache blocks in the Sc state to be replaced silently without any bus activity.
If a broadcast was made to let other caches know that a Sc block is being replaced, they could test the shared line and move to state E if there were no other sharers.
So at the cost of broadcasting the replacements of Sc blocks, we are able to avoid bus update transactions.
In case of Firefly, cache-to-cache transfers of modified blocks are also written back to main memory at the same time.
But since accesses made to the main memory are slower by orders of magnitude when compared to caches, it requires added complexity of performing a write back as a separate bus operation.
[5] This problem is avoided altogether in case of Dragon protocol, since the shared blocks are not written back to memory at all.