在基于 Intel 的 Linux(或 macOS)中,我们可以通过使用
wrmsr
修改 0xa14 寄存器来禁用预取。
我读到,在 ARM Cortex-A53 上,
L1PCTL
寄存器的 CPUACTLR_EL1
部分可以设置为 0 以禁用 L1 预取器。
更改
L1PCTL
部分 CPUACTLR_EL1
注册也会在 M1 上工作吗?更改
部分L1PCTL
注册也会在 M1 上工作吗?CPUACTLR_EL1
不。 M1 使用 Apple 的 Firestorm 和 Icestorm 内核,而不是 ARM 的 Cortex-A53。他们没有这个寄存器。
如何在 Apple M1 中禁用预取?
Apple 之前发布的来源包含以下定义:
#define ARM64_REG_HID5 s3_0_c15_c5_0
#define ARM64_REG_HID5_DisHwpLd (1<<44)
#define ARM64_REG_HID5_DisHwpSt (1<<45)
这会禁用加载(位 44)和存储(位 45)的 L2 硬件预取。我不知道有什么可以在 L1 级别控制这一点,但在许多未记录的系统寄存器之一中可能仍然有一些位。