【问题标题】:Cache, Branch predictor and TLB maintenance operations缓存、分支预测器和 TLB 维护操作
【发布时间】:2018-10-17 19:10:03
【问题描述】:

关于ARMDSB内存屏障instruction

DSB-

数据同步屏障作为一种特殊的内存 屏障。此指令后无程序顺序指令 执行直到该指令完成。

很好理解,下一个:

此指令完成 什么时候:

此指令完成之前的所有显式内存访问。

在此之前的所有缓存、分支预测器和 TLB 维护操作 指令完成。

等等,缓存、分支预测器和 TLB 维护到底是什么意思?是冲洗的意思吗?这是否意味着DSB 指令本身可以触发这种刷新?还有什么被认为是维护?

【问题讨论】:

  • 我认为它们意味着正常加载/存储指令的所有缓存副作用在 DSB 之后的任何内容之前完成,以及任何显式 TLB 无效指令的影响。
  • @PeterCordes 分支预测器维护怎么样?
  • 如果您在缓存、预测器或 TLB 上执行 CP15 操作时专门执行 mcr cp15...,则这些操作将完成。通常,可能会有几条指令组合在一起,然后根据用例发出DSB。例如,您可能会在更新 MMU 表时使缓存和 TLB 无效。

标签: caching assembly arm cpu-cache memory-barriers


【解决方案1】:

我认为这是英语语法歧义的问题。我认为他们的意思是

  • 缓存操作(加载/存储的所有副作用,或 MMU 操作后的显式刷新/无效)
  • 分支预测器操作(例如,全局启用/禁用分支预测)
  • TLB 维护操作(例如,在更改页表条目后使 TLB 条目无效)

我不认为他们试图将分支预测器操作描述为“维护”,并且“维护”这个词在该句子中只应该与“TLB”一起使用。

(某些分支预测器操作可能被描述为维护,如果 ARM 为 Spectre 缓解添加了分支预测器刷新操作,就像英特尔为其 x86 CPU 提供的方式一样,他们最近的微代码更新添加了一个新的特定于模型的寄存器. (https://access.redhat.com/articles/3311301)。但我不认为这就是他们的句子要在这里表达的意思。)

【讨论】:

  • 某些 ARM CPU 型号(在 Spectre 之前)有分支预测器操作。它们高度依赖模型。有些只允许启用/禁用预测器(这将是一种操作)。
  • @artlessnoise:谢谢。更新。所以这将是一个分支预测器操作,而不是“维护”。
【解决方案2】:

消除歧义的关键是要认识到TLB maintenance 是一个比TLB operation 更常见的术语。 (根据简单的搜索,大约是 3 倍)。

TLB operation 单独使用的地方,它似乎指的是操作过程或特定的识别活动。在指令被描述为与 TLB 交互的地方,这些指令在 TLB maintenance operations 的标题下进行了描述,并且该组形成了一个相当大的集合。这组指令通常不会被描述为 TLB operations,因此您建议的解析需要在文档中拆分一个通用(如果不是明确标准)术语。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 2014-01-03
    • 1970-01-01
    • 2019-04-23
    • 2016-10-30
    • 2015-11-24
    • 2014-10-22
    • 2020-04-26
    • 2023-03-12
    相关资源
    最近更新 更多