Caching gem5中的缓存方式是显式的还是隐含的/派生自缓存集的数量和缓存大小?

Caching gem5中的缓存方式是显式的还是隐含的/派生自缓存集的数量和缓存大小?,caching,simulator,gem5,Caching,Simulator,Gem5,我正在尝试实现一个gem5版本的HybCache,如HybCache:可信执行环境的混合侧通道弹性缓存(可在中找到)中所述 HybCache的一个简要总结是,所有缓存的一个子集被保留供安全进程使用,并且是隔离的。这是通过在进程处于“隔离”模式时使用有限的缓存方式子集来实现的。非隔离进程通常使用缓存操作,可以访问整个缓存,并使用配置中给出的替换策略和关联性。缓存方式的隔离子集使用随机替换策略,并且是完全关联的。这是一张展示这个想法的图片 路径6和7为灰色,表示隔离的缓存路径 因此,我需要以这些方

我正在尝试实现一个gem5版本的HybCache,如HybCache:可信执行环境的混合侧通道弹性缓存(可在中找到)中所述

HybCache的一个简要总结是,所有缓存的一个子集被保留供安全进程使用,并且是隔离的。这是通过在进程处于“隔离”模式时使用有限的缓存方式子集来实现的。非隔离进程通常使用缓存操作,可以访问整个缓存,并使用配置中给出的替换策略和关联性。缓存方式的隔离子集使用随机替换策略,并且是完全关联的。这是一张展示这个想法的图片

路径6和7为灰色,表示隔离的缓存路径

因此,我需要以这些方式处理数据的放置。我的问题是,既然我在gem5代码中没有提到缓存方式,这是否意味着缓存方式只在逻辑上存在?也就是说,我是否必须手动计算每个缓存路径的位置?如果gem5中使用了缓存方式,那么是否使用了缓存方式?文件名是什么


非常感谢您的帮助。

此答案仅对(src/mem/cache/)有效

在gem5中,缓存方式的数量是根据缓存大小和关联性自动确定的。检查src/mem/cache/tags/indexing_policies/中的文件,以获取相关代码(特别是base.cc的构造函数)

有两种方法可以解决此实现问题:

1-创建一个新类,该类继承自BaseTags(例如HybCacheTags)。此类将包含是否应在安全模式下工作以及如何工作的决策(即何时调用哪个索引和替换策略)。根据本文提出的其他建议,您可能还需要从缓存中派生来创建HybCache

  • 每个操作模式需要一个新标签。一个是常规(SetAssociative),另一个是从SetAssociative派生的,其中参数assoc使numSets变为1(使其完全关联)。派生函数还必须重写至少一个函数getPossibleEntries(),以仅允许选择所需的方式。您可以检查skewed_assoc.cc以了解更复杂的位置选择示例

  • 每个操作模式需要一个新标签。您可能只会使用替换策略文件夹中的策略

2-您可以基于具有两个标记的缓存类创建一个HybCache,一个是常规标记(即BaseSetAssoc),另一个是基于FALRU类(重写为用作标记,例如FARandom

我相信第一种选择更简单,也更少硬编码FALRU尚未被拆分为索引策略和替换策略,因此如果需要更改其中一个,则必须重新实现它

在实施过程中,您可能会遇到一致性错误。如果发生这种情况,很可能是索引逻辑中的一个问题,我不会试图在一致性模型中找到问题