Hi Daecheol, You're correct that MESI_Three_Level, like MESI_Two_Level has a shared (banked) LLC.
The L2 cache is chosen based on the function "mapAddressToRange" (see https://gem5.googlesource.com/public/gem5/+/refs/heads/stable/src/mem/ruby/protocol/MESI_Three_Level-L1cache.sm#403 ). The mapAddressToRange function is a simple simple function that grabs a few bits to select the machine type. There is a "cluster" option, but I don't know if it's used in any protocols. (See https://gem5.googlesource.com/public/gem5/+/refs/heads/stable/src/mem/ruby/slicc_interface/RubySlicc_ComponentMapping.hh#50 ) Cheers, Jason On Mon, Sep 28, 2020 at 4:34 AM Daecheol You via gem5-users < gem5-users@gem5.org> wrote: > Hi all, > > I am making a system consisting of multiple CPU clusters using > MESI_Three_Level. > Since the MESI three level enable users to make multiple clusters, and > each cluster can have multiple L2 caches, I just thought that L1 caches > within the cluster can only access the L2 cache in the same cluster. > If r/w request from L1 cache cannot be satisfied by L2 cache in the same > cluster, I thought that the request is sent to the directory controller and > directory controller forwards it to other cluster which has the requested > cached block. (Two level directory structure, L2 directory works within the > cluster, directory controller works between the clusters) > > However, I noticed that directory and L2 cache controller of > MESI_Two_Level were re-used in MESI_Three_Level. Since L2 cache in MESI two > level is global shared cache with directory function, it seems that > directory controller just sends FETCH request to memory controller when it > receives GETS or GETX from the L2 cache. > > I wonder if the directory controller does not support forwarding requests > to other cluster, how cache coherene is maintained in MESI three level > protocol. > > My guess is L2 cache is not private to a given cluster (cluster has > meaning at all), but it can be accessed by all L1 caches in the system. > (maybe this is reason why L1 cache is also connected to Ruby network). > Thus, requests from L1 cache are routed to the L2 cache, which is > responsible for the requested blocks, and it handles the request directly > or forwards it to proper L1 sharers or the L1 owner. > > Is my understanding right? If it is, I am also curious how requests from > L1 are routed to a proper L2 cache. (Each L2 has its own address range?) > > > Thanks, > > Daecheol. > _______________________________________________ > gem5-users mailing list -- gem5-users@gem5.org > To unsubscribe send an email to gem5-users-le...@gem5.org > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
_______________________________________________ gem5-users mailing list -- gem5-users@gem5.org To unsubscribe send an email to gem5-users-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s