Hi, Can you please explain the difference between WriteReq and WriteAllocate. (and also between UpgradeReq and UpgradeAllocate)
Thanks - Mrinal Thomas Wenisch wrote: > Hi, > > > On Thu, 14 Sep 2006, Mrinal Nath wrote: > >> Hi, >> >> I wanted to know the difference between "snoop" and "request". > > > In general, Snoop messages have to do with coherence, while Request > messages initiate new memory transactions. Both the Snoop and Request > channels travel "down" the cache hierarchy (from the CPU towards memory). > > The reason we separate the two channels again has to do with our DSM > coherence protocol. The key requirement for the coherence protocol to > work is that invalidations and downgrades cannot be blocked by request > messages (that is; an invalidation reply has to be sent even if there > are request messages that were issued before it that are waiting to be > serviced by the memory system). If the invalidation/downgrade were > stuck in a queue behind a request, the protocol can deadlock. > > Thus, we separate requests and coherence messages into two virtual > channels, Snoop and Request. Each channel has separate queue and > buffering resources. Messages in the Snoop channel can bypass messages > in the request channel (i.e., a snoop message may be processed by the > cache before a request message even if the request message arrived > earlier). However, Requests may not bypass snoops (a snoop message that > arrives earlier *must* be processed before any new request messages). > > Note that in some cases, when a snoop bypasses a request, it modifies > the request message. The simplest example of this arises when a clean > line is upgraded. Initially the line is present in L1D and clean, and > the CPU stores to the line. The L1D sends an UpgradeRequest to L2. > Now, while the Upgrade is still pending, an invalidation arrives for the > line, and L1D invalidates its copy. When the InvalidationAck is > processed by L2, the UpgradeRequest is changed to a WriteRequest, > because L1 now needs data as well as permission for the line. > > As a side note, all messages which carry data away from the CPU (e.g., > InvUpdateAck, EvictDirty, ...) travel in the Snoop channel. You can see > exactly which messages use the snoop channel in > Common/Slices/MemoryMessage.hpp. Look for the usesSnoopChannel() function. > > Let me know if you have questions about specific message types in > MemoryMessage.hpp. Note that there are some message types in there that > are not used in the simulation models we have released publicly (e.g., > the FlushReq). > > Regards, > -Tom Wenisch > Computer Architecture Lab > Carnegie Mellon University > >> >> By looking at the function 'runSnoopProcess' in CacheController.hpp, >> it seems to me that snoops are only related to instruction fetches. >> >> Also, can someone please clarify the flow of messages in the cache >> hierarchy. (who sends what types of messages to whom under what >> conditions?) >> >> Any help will be greatly appreciated. >> Thanks >> - Mrinal >> >> > _______________________________________________ > SimFlex mailing list > [email protected] > https://sos.ece.cmu.edu/mailman/listinfo/simflex > SimFlex web page: http://www.ece.cmu.edu/~simflex From jsmolens+ at ece.cmu.edu Sun Oct 1 21:18:23 2006 From: jsmolens+ at ece.cmu.edu (Jared C. Smolens) List-Post: [email protected] Date: Sun Oct 1 21:18:28 2006 Subject: [Simflex] What is the difference between WriteReq and Message-ID: <[email protected]> Hi Mrinal, The MemoryMessage types are documented in: components/Common/Slices/MemoryMessage.hpp - Jared Excerpts From Mrinal Nath <[email protected]>: Re: [Simflex] What is the differenc: Mrinal Nath <[email protected]> >Can you please explain the difference between WriteReq and >WriteAllocate. (and also between UpgradeReq and UpgradeAllocate) Jared Smolens ----------- Electrical and Computer Engineering www.rabidpenguin.org ------------- Carnegie Mellon University jsmolens AT ece.cmu.edu ------ HH A-313 ------ Pittsburgh, PA
