我是性能工具的新手。我在arm64上使用AlmaLinux 8.8。
我已经安装了 perf: 性能--版本 性能版本4.18.0-513.9.1.el8_9.aarch64
arm_spe 事件似乎丢失了:
性能列表 | grep -i arm_spe
如何启用或修复此事件?
https://man7.org/linux/man-pages/man1/perf-arm-spe.1.html
谢谢
谷歌搜索没有解决
您已尝试列出性能事件,但没有提及 SPE,这意味着该功能丢失或未正确启用,使用:
perf list | grep -i arm_spe
如果 perf 未显示 SPE 事件,则可能意味着您的计算机处于虚拟化状态(即不是裸机)和/或
kpti
功能未禁用。您必须在内核的引导参数中设置 kpti=off
(请参阅第 3 节)。
下面我提供了一些在 Ubuntu 上启用它的案例和示例命令。
您可以输入以下内容:
cat /boot/config-$(uname -r) | grep CONFIG_ARM_SPE_PMU
答案可能是:
y
:已启用 (参见 2.a)m
:使用 LMK(参见 2.b)n
:禁用 (参见 2.c)CONFIG_ARM_SPE_PMU=y
表示内核启用了SPE。如果不起作用,请检查常见的嫌疑人(第 1 节)。
CONFIG_ARM_SPE_PMU=m
表示 SPE 通过可加载内核模块 (LKM) 支持。
在这种情况下,如果您可以尝试以下操作:
# NOTE: on kernel updates you'll need to rerun the below
sudo apt install linux-modules-extra-$(uname -r)
或者,可以重新编译内核以支持 LMK,然后手动安装模块。
您可能需要禁用
kpti
(请参阅第 3 节)。
要检查模块是否已加载并获取更多信息,您可以尝试:
lsmod | grep arm_spe_pmu
modinfo arm_spe_pmu
CONFIG_ARM_SPE_PMU=n
表示您当前的内核是在没有 SPE 支持的情况下编译的。如果您的硬件支持 SPE,那么您可以重新编译一个新内核,将 CONFIG_ARM_SPE_PMU
设置为 y
或 m
,然后按照前面的步骤之一进行操作。为此,您必须遵循发行版的说明。
您可能需要禁用
kpti
(请参阅第 3 节)并使用裸机。
kpti
:根据您的机器和内核,您可能需要禁用 kpti,前提是您愿意这样做。 另请注意,修改启动参数可能会意外地使您的计算机变砖。采取任何相关措施(即能够在启动时进行干预以恢复问题)。
示例说明:
sudo vim /etc/default/grub
# add the below:
GRUB_CMDLINE_LINUX="kpti=off"
# close vim, update config, and restart:
sudo update-grub
sudo reboot now
除了列出性能事件之外,您还可以尝试使用以下方法检查相关输出:
sudo dmesg | grep -E 'kpti|spe'