On Dec 10, 2007 7:51 AM, Jiayuan <[EMAIL PROTECTED]> wrote: > > - You shouldn't be receiving responses from two different caches to a > > ReadExRequest no matter what is going on with MemInhibit. Only the > > owner cache should be responding, and there shouldn't be more than one > > owner at a given point in time. > > Why is that? The ReadExRequest can be sent from the L1 to the L1-L2 bus > after a write miss. At > The mean time, this requested cache block might be shared in other L1 > caches, as well as the L2. Because other L1s are snooping the bus, each > cache(L1/L2) containing a copy should send a ReadExResponse back while > invalidating its own copy theoretically, (although M5 uses the global > pointer to the packet to ensure there is only one response).
All the caches that snoop the packet should invalidate their copies, but only the owner should send a response. If there's no owner, then main memory will send the response. The fact that there's a single shared packet object is used only to emulate two wired-OR lines (MemInhibit and Shared). The former is used only to suppress main memory from responding, and the latter is used only for setting the E state. Those flags are not intended to provide any prioritization or arbitration among the caches on the bus (since a real wired-OR line isn't capable of that). There's no need for explicit invalidation acknowledgments since the bus provides orderin Your mesh may need that (since you don't have a central ordering point), but then that's a different coherence protocol. Note that if you want to have multiple responses for a given packet, each responder will have to allocate a new Packet... I just wrote up a little blurb on memroy allocation for Packets here: http://www.m5sim.org/wiki/index.php/Memory_System#Packet_allocation_protocol Steve _______________________________________________ m5-users mailing list m5-users@m5sim.org http://m5sim.org/cgi-bin/mailman/listinfo/m5-users