gpt4 book ai didi

caching - 如何在 ARM Cortex-A7 的内核之间划分 L2 缓存?

转载 作者:行者123 更新时间:2023-12-01 12:34:52 27 4
gpt4 key购买 nike

背景和目标

我想在运行 ARM Cortex-A7 的 Olimex A20 Lime 平台上运行两个完全独立的应用程序。目标是将一个核心专用于每个应用程序。到现在为止还挺好。

现在我想通过以下方式在内核之间划分 L2 缓存:

       L2 cache (256KB)
---------------------------
| CPU0 | CPU1 |
| (128KB) | (128KB) |
---------------------------

因此,每个核心只能访问 他的私有(private) 128KB 二级缓存。

问题

How can I divide the L2 cache between the cores on a ARM Cortex-A7?



据我了解,在以前的 SoC 上,经常使用像 PL310 这样的外部缓存 Controller 。现在,Cortex-A15 和 Cortex-A7 等较新的 SoC 使用集成缓存 Controller 。该 Controller 以某种方式集成到 SCU 组件中。

我在 CP15 系统中发现了一些与缓存相关的寄存器,例如 CSSELR、CCSIDR、CLIDR 等,甚至还有系统控制寄存器 (SCTLR)。但是他们似乎都没有让我为每个核心配置一个大小。那还有可能吗?

谢谢你的帮助。

编辑

在这里,我所说的独立应用程序实际上是指 Linux 操作系统 .所以目标是将一个核心专用于一个操作系统。因此,每个操作系统都在(参见)下面的单处理器系统上运行。整个框架已经在运行,到目前为止一切顺利。

多亏了我收到的答案,我现在明白,即使它们是不使用相同虚拟映射的独立操作系统,内核也可以使用 L2。实际上,它确实与拥有虚拟地址空间的 2 个进程相同。

然而,困扰我的最后一件事是安全方面:

If both cores share the whole L2 cache, is it technically possible for one core to access cached data of the other core?



引用
  • ARM Cortex-A7 MPCore TRM
  • 关于 L2 内存系统 (7.1)
  • 识别寄存器 (4.2.18)
  • 最佳答案

    不使用相同物理内存的两段代码不会导致任何缓存冲突,因为缓存在 A7 处理器(任何具有虚拟化扩展的 ARM 处理器)上进行了物理标记。

    在 A7 上,缓存行也带有 VM id 标记。因此,如果您想强制在两个内核上运行的代码之间进行分离,您可以为每个内核设置第二阶段的分页表,并用不同的 VM id 标记它们。 EL0/1 对地址空间的任何违反都会导致 EL2(管理程序)陷入陷阱。这与 EL1 如何强制分离 EL0 地址空间非常相似。

    要进行配置,您必须有权访问引导代码。通常从安全 EL1/EL3 引导代码直接切换到非安全 EL1 模式。您将不得不修改此流程并改为切换到 EL2 模式。在 EL2 模式下设置并为每个内核启用不相交的第二阶段页表。还要设置一个 EL2 向量表来捕获您的第二阶段 MMU 异常。

    这将导致性能略有下降。这将比使用 KVM 更有效(上次我检查 KVM 不是很适合 ARM v7 并且由于设计而导致大量开销)。 XEN 更适合 ARM,但需要您进行大量设置。

    如果您不打算使用虚拟化扩展/第二阶段页表/SMP;您也可以关闭 ACTLR.SMP 位。由于 L1 缓存并发 block 将被关闭,这可能会给您带来一点性能提升。

    注:此答案适用于已编辑的问题

    关于caching - 如何在 ARM Cortex-A7 的内核之间划分 L2 缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30612687/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com