Hi George,

The eviction policy for L1 caches is an important part of the coherence protocol. The default protocol for CMPs uses a directory that tracks the precise list of sharers of every block. This requires that the L2 cache be notified when an L1 evicts any cache line, even those which don't need to be written back to the L2 cache.

When simulating a single CMP system, there is no need for the L2 cache to send notifications on clean evictions because there is only one CMP there is no inter-chip coherence protocol.

I believe there is support in Flexus for a coherence protocol that does NOT require using clean evictions from the L1 cache, but I'd have to double check what other changes that might require, I believe that would require a configuration setting to use a slightly different coherence protocol.


The messages you are seeing when the L1 performs an evict represent the message being sent by the L1 and then received by the L2. This is the same eviction, but the communication from L1 to L2 is reported at both ends. This can be useful if debug messages are turned off for one of the components. But you shouldn't be worried, the L2 isn't generating a message here.

Note that in the timing model, evictions from the L1 are acknowledged by the L2 to avoid race conditions. In this case, an EvictClean from an L1 would generate an EvictAck reply from the L2.


Jason




On 11-05-02 8:46 AM, George Ioannidis wrote:
Hello,

Among the cache parameters in user-postload.simics, the following is defined: flexus.set "-L1d:clean_evict" "1" # "Issue clean evictions" (CleanEvictions) -- trace flexus.set "-L1d:allow_evict_clean" "1" # "Cause the cache to evict clean blocks" (EvictClean) -- timing

which is set (1) for L1 caches and cleared (0) for L2 caches. I would like to ask what difference does it make in the eviction policy of the CMP system.

Furthermore, I see in debug.out (vverb debugging) that whenever a block is evicted from L1, a message is generated from the L2 component (examples shown in the end of the post). I would like to ask what kind of messages are these, since such evictions should only take place in the L1 cache (as I have seen).

Thank you,
George


----------
Examples from debug.out


9751 <FastCacheImpl.cpp:308> {1000}- sys-L1d Evict: MemoryMessage[Eviction (dirty)]: Addr:0xp:008947c00 Size:0 Serial: 5 Core: 0 DStream: true Outstanding Msgs: 0 Requires Ack 9752 <FastCMPCacheImpl.cpp:380> {1000}- sys-L2 Received on Port RequestIn[0] Request: MemoryMessage[Eviction (dirty)]: Addr:0xp:008947c00 Size:0 Serial: 5 Core: 0 DStream: true Outstanding Msgs: 0 Requires Ack 9753 <FastCMPCacheImpl.cpp:547> {1000}- sys-L2 Received Eviction (dirty) for 0xp:008947c00 from 0, state = OneSharer, sharers = 0000000000000000000000000000000000000000000000000000000000000001, cache state = Invalid

12696 <FastCacheImpl.cpp:308> {1000}- sys-L1d Evict: MemoryMessage[Eviction (writable)]: Addr:0xp:002c7bc00 Size:0 Serial: 5 Core: 0 DStream: true Outstanding Msgs: 0 Requires Ack 12697 <FastCMPCacheImpl.cpp:380> {1000}- sys-L2 Received on Port RequestIn[0] Request: MemoryMessage[Eviction (writable)]: Addr:0xp:002c7bc00 Size:0 Serial: 5 Core: 0 DStream: true Outstanding Msgs: 0 Requires Ack 12698 <FastCMPCacheImpl.cpp:547> {1000}- sys-L2 Received Eviction (writable) for 0xp:002c7bc00 from 0, state = OneSharer, sharers = 0000000000000000000000000000000000000000000000000000000000000001, cache state = Exclusive

30456 <FastCacheImpl.cpp:308> {3000}- sys-L1i Evict: MemoryMessage[Eviction (clean)]: Addr:0xp:009a7d9c0 Size:0 Serial: 7 Core: 0 DStream: false Outstanding Msgs: 0 Requires Ack 30457 <FastCMPCacheImpl.cpp:361> {3000}- Received on Port FetchRequestIn[0] Request: MemoryMessage[Eviction (clean)]: Addr:0xp:009a7d9c0 Size:0 Serial: 7 Core: 0 DStream: false Outstanding Msgs: 0 Requires Ack 30458 <FastCMPCacheImpl.cpp:547> {3000}- sys-L2 Received Eviction (clean) for 0xp:009a7d9c0 from 1, state = OneSharer, sharers = 0000000000000000000000000000000000000000000000000000000000000010, cache state = Shared

Reply via email to