在ARM体系结构手册中,提到缓存可以是瞬态的,也可以是非瞬态的,并且是实现定义的。我无法理解关于缓存的瞬态内存的概念和使用。我正在尝试编写用于启用MMU的软件,我已经启用了L1和L2缓存。我正在使用LPAE。我知道MAIR寄存器控制着这个属性。我没有得到任何关于它的好文件。
我想知道这个概念,以便我想检查将它应用于当前设计的可行性。
arm-v7-a-r第134页
“对于包含大型物理地址扩展的ARMv7-A实现,是否实现了可缓存的正常内存区域是否支持Transient属性的实现。如果实现支持此属性,则为Normal的可能的可缓存性属性集合记忆区域变为:
•直写可缓存,非瞬态
•回写可缓存,非瞬态
•Write-Through Cacheable,Transient
•回写可缓存,瞬态
•不可缓存。“
答案 0 :(得分:4)
ARM ARM在您引用的部分后不久说:
transient属性表明缓存的好处是相对较短的时间段,因此限制分配可能更好,以避免可能会丢弃其他不太短暂的条目。
换句话说,它是对缓存系统的暗示。 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)似乎根本没有提到它,所以在没有任何特定的实现特定定义的情况下,我猜他们也可能会忽略它(特别是因为他们也提到了伪随机缓存替换策略)。我不知道Qualcomm Krait或任何其他实现,因为公共文档不会即将发布。
从我对CPU设计的了解很少,瞬态属性的印象是这些功能之一不仅在非常特殊的利基之外没有任何好处,而且还增加了相对较大的设计和验证成本。换句话说,我怀疑没有特定要求的人会去那里,尽管它存在于架构中这一事实几乎可以肯定某些硬件在那里运行一些最好的实施工作量。除非你已经知道你拥有那些硬件和工作量,否则我会倾向于忘掉它。