I have seen Cache coherency(MESI protocol) between different levels of cache namely L1, L2 and L3, but my question is slightly different and more specific.
In a system where each core has private L1 and L2 caches and all the cores have a single shared write-back L3 cache, what coherency protocol should L3 cache use?
MOESI protocol is touted as better than MESI simply because of the added O state. This state, Owner, allows cache-to-cache line transfer, reducing the number of memory access. But is that useful in a single L3 cache? As far as I can see, in its level, L3, if it has no cache on the same level to transfer lines to, there is no use of state O. Is this a wrong assumption?
Similarly, MESI is supposed to be better than MSI because of the extra state Exclusive. It's supposed to reduce memory access as well, by facilitating caches on the same level to transfer lines between them instead of through memory. But if there is only one cache on a level, this doesn't help matters, does it?
I suppose my confusion is in the phrase "caches on the same level." When MESI and MOESI talks about facilitating cache-to-cache transfer, do they mean caches on the same level or all available caches through all levels?