【问题标题】:Usermode CPU Data cache invalidation / flush on Linux (Cortex A53)Linux (Cortex A53) 上的用户模式 ​​CPU 数据缓存失效/刷新
【发布时间】:2022-12-01 08:33:10
【问题描述】:

我想在使用异构非一致性缓存(ARM A53 和 ARM M7 内核)的 Linux 平台上找到一种数据(L1/L2)缓存失效和用户模式刷新的方法。我的问题出在运行 SMP Linux 的 A53 端。 M7 内核运行一个裸机程序,我已经在该程序上实施了刷新/失效。

我知道可以为此编写一个内核模块,但在这样做之前,我想知道是否有任何隐藏的 API 可以这样做?我在 Linux 5.10.120 上运行。 如果不是,执行刷新/失效的最有效方法是什么?

我使用了__builtin___clear_cache,但是,我发现这只是为了说明。此外,我希望在操作上有更好的粒度,以避免在不需要时刷新时使行无效。 此外,asm/cachectl.h 中的 cacheflush 函数不可用(我的 CPU / 目标不存在标头)。

免责声明:这个问题被问过很多次。大多数答案都试图通过告诉“你不需要那样做......”来变得聪明。请不要回答这样的问题,因为我问这个问题的上下文需要数据缓存刷新/失效。

【问题讨论】:

    标签: linux caching arm cpu-cache usermode


    【解决方案1】:

    您不能从用户空间执行数据缓存操作;特别是失效是一种破坏性操作,用户空间不信任执行该操作。

    选项是 (1) 编写内核模块,或 (2) 避免使用缓存内存进行 A53<->M7 数据交换。

    我使用了 __builtin___clear_cache,...我希望在操作上有更好的粒度,以避免在不需要时刷新时使行无效。

    比什么更好的粒度? builtin___clear_cache 允许您指定开始和结束,所以您需要更多的粒度吗?

    【讨论】:

      猜你喜欢
      • 2017-09-24
      • 1970-01-01
      • 2011-01-13
      • 2012-07-01
      • 2019-09-23
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多