在《 ARM体系结构手册》中,提到缓存可以是临时的也可以是非临时的,并且它是由实现定义的。我无法理解关于缓存的瞬时内存的概念和使用。我正在尝试编写用于启用MMU的软件,并且已经启用了L1和L2缓存。我正在使用LPAE。我知道MAIR寄存器控制此属性。我没有得到有关它的任何好的文档。

我想知道这个概念,以便检查将其应用于当前设计的可行性。

arm-v7-a-r第134页

“对于包含大型物理地址扩展名的ARMv7-A实现,将由IMPLEMENTATIONATION定义是否为可缓存的Normal存储器区域支持Transient属性。如果实现支持此属性,则Normal存储器区域的可能的可缓存性属性集将变为:
•直写式可缓存,非瞬态
•回写式可缓存,非瞬态
•直写式可缓存,瞬态
•回写式可缓存,瞬态
•不可缓存。”

最佳答案

ARM ARM在您引用该部分之后不久说:

临时属性表示缓存的好处是相对较短的时间,因此限制分配可能会更好,以避免可能抛出其他较少的临时条目。

换句话说,这是对缓存系统的提示。 As Peter suggests in the comments,当缓存具有可预测的替换策略(例如LRU或轮询)时,可以通过直接分配到已经非常接近逐出的位置来实现。另一种选择是将临时/非临时访问仅分配给较低级别​​的缓存,因为这些访问通常表示比L1中热门内容少使用的数据。

从理论上讲,这对某些流类型的工作负载具有好处-例如,通过将大型数据缓冲区映射为可缓存但是瞬态的,通过这些缓冲区工作的处理算法仍可以从访问位置方面受益于缓存(即,同一访问中的多个匹配项)行)和自​​动预取后续行(用于常规访问模式),但不会在其余缓存中影响和破坏指令获取,堆栈访问等。但是,另一方面,大多数现代缓存都足够聪明,至少可以检测到持续的常规访问模式并自动进入非分配流式传输模式,这完全透明地提供了一些相同的好处,而无需程序员费心处理属性。

从实践的角度来看,最重要的问题是根本是否值得担心:总的来说,不是。快速浏览了一些TRM,Cortex-A7 ignores the transient attribute entirely; Cortex-A15 might actually go wrong if you try to use it; Cortex-A12/17和Marvell的v7核心(每个public Armada XP functional spec)似乎根本没有提到它,因此在没有任何特定于实现的特定定义的情况下,我想他们也很可能会忽略它(特别是因为他们还提到了伪随机性)缓存替换策略)。我不知道有关高通Krait或任何其他实现的信息,因为没有公开文档。

据我对CPU设计了解得很少,瞬态属性给人的印象是这些功能之一,不仅在非常特殊的领域之外没有任何好处,而且还增加了设计和验证的成本。换句话说,我怀疑是否有人会没有一个非常具体的要求,尽管事实上它已经存在于体系结构中,这意味着几乎肯定有一些硬件在运行一些更好的工作负载,因此对于实现它来说是更好的选择。除非您已经知道拥有硬件和工作量,否则我倾向于将其遗忘。

10-08 18:51