在ARM体系结构手册中提到缓存可以是瞬态的,也可以是非瞬态的,并且是实现定义的。我没有理解关于缓存的瞬变内存的概念和使用。我正在尝试编写支持MMU的软件,我已经启用了L1和L2缓存。我在用LPAE。我知道MAIR寄存器控制这个属性。我没有得到任何关于这件事的好文件。
我想知道这个概念,所以我想检查一下在目前的设计中应用它的可行性。
arm-v7-a-r页134
“对于包含大物理地址扩展的实现ARMv7 7,实现定义了是否支持可缓存的正常内存区域的瞬态属性。如果实现支持此属性,则正常内存区域的可能缓存属性集如下:
·写入可缓存的、非瞬态的
·写回可缓存、非瞬态的
·可写、可缓存、瞬态的
·写回可缓存的、瞬态的
·不可缓存。“
发布于 2016-07-30 00:05:50
手臂说,在你引用的部分之后不久:
瞬态属性表明缓存的好处是时间相对较短,因此最好限制分配,以避免舍弃其他不太短暂的条目。
换句话说,这是对缓存系统的提示。正如彼得在评论中所暗示的,当缓存有一个可预测的替换策略(例如LRU或循环),这可以通过直接分配到已经非常接近驱逐的位置来实现。另一种选择是短暂/非时态访问只分配到较低级别的缓存中,因为这些访问所代表的数据通常比L1中的热门数据更少使用。
这对某些流类型的工作负载具有理论上的好处--例如,通过将大型数据缓冲区映射为可缓存但短暂的,处理算法在访问局部性(即同一行中的多次命中)和为常规访问模式自动预取后续行等方面仍然可以受益于高速缓存,但不会在缓存的其余部分破坏和破坏指令获取、堆栈访问等。另一方面,大多数现代缓存都足够聪明,至少可以检测到持续的定期写入访问模式,并自动进入非分配流模式,这在完全透明的情况下提供了一些相同的好处,而不需要程序员使用属性来打发时间。
从实际角度来看,最重要的问题是,它是否值得担心:总的来说,它并不值得担心。在快速浏览了一些TRMs、Cortex-A7 完全忽略瞬态属性。、Cortex-A15 如果你尝试使用它,可能会出错。、皮质-A12/17和Marvell的v7 core (per 公共无敌舰队XP功能规范)之后,我想,如果没有任何具体的实现--具体的定义--我猜他们也可能会忽略它(尤其是因为他们还提到了伪随机缓存替换策略)。我不知道Qualcomm或任何其他实现,因为公共文档还没有发布。
从我对CPU设计知之甚少的情况来看,瞬态属性给人的印象是,它不仅在特定的领域之外没有任何好处,而且为设计和验证增加了相对较大的成本。换句话说,我怀疑在没有一个非常具体的需求的情况下,任何人都会去那里,尽管它存在于体系结构中,这意味着几乎可以肯定有一些硬件在运行一些工作负载,更好地实现它。但是,除非您已经知道您有那个硬件和那个工作负载,否则我会倾向于简单地忘记它。
https://stackoverflow.com/questions/38636326
复制相似问题