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

Reply via email to