ARM中瞬态和非瞬态存储器的概念和优势?

concept and advantages of Transient and Non-Transient memory in ARM?

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

我想知道这个概念,所以我想检查一下将它应用到现在的设计中的可行性。

arm-v7-a-r 第 134 页

“对于包含大型物理地址扩展的 ARMv7-A 实现,可缓存普通内存区域是否支持瞬态属性由实现定义。如果实现支持此属性,则可能的可缓存属性集普通内存区域变为:
• 直写可缓存、非瞬态
• 回写缓存,非瞬态
• 直写可高速缓存,瞬态
• 回写缓存,瞬态
• 不可缓存。”

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

The transient attribute indicates that the benefit of caching is for a relatively short period, and that therefore it might be better to restrict allocation, to avoid possibly casting-out other, less transient, entries.

也就是说,这是对缓存系统的提示。 ,当缓存具有可预测的替换策略(例如 LRU 或循环法)时,这可以通过直接分配到已经非常接近驱逐的位置来实现。另一种选择是 transient/non-temporal 访问仅分配到较低级别的缓存中,因为这些通常表示最近使用的数据少于 L1 中的热数据。

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

从实际的角度来看,最重要的问题是它是否值得担心:一般来说,它是不值得的。快速浏览了一些 TRM,Cortex-A7 ignores the transient attribute entirely; Cortex-A15 might actually go wrong if you try to use it; Cortex-A12/17 and Marvell's v7 core (per the public Armada XP functional spec) 似乎根本没有提到它,所以在没有任何特定于实现的特定定义的情况下,我猜他们也可能会忽略它(特别是因为他们还提到了伪随机缓存替换策略)。我不知道 Qualcomm Krait 或任何其他实现,因为 public 文档尚未发布。

从我对 CPU 设计的了解来看,transient 属性给人的印象是这些功能之一,它不仅在非常特殊的利基市场之外没有任何好处,而且还会增加相对较大的成本设计和验证。换句话说,我怀疑有人会在没有非常具体的要求的情况下去那里,尽管它存在于架构中这一事实意味着几乎可以肯定 一些 硬件在那里 运行 一些 的工作量更适合实施它。不过,除非您已经知道您拥有那种硬件和那种工作量,否则我倾向于简单地忘记它。