【发布时间】:2021-05-28 05:18:36
【问题描述】:
我需要找出 CPU 上禁用了哪些内核。我怎样才能以 C/C++ 的方式做到这一点?我知道读取 CAPID6 寄存器是其中一种方法,但我不确定如何完成它。有没有我需要注意的系统调用或技巧?
我的操作系统是 Ubuntu。我有 Xeon Skylake CPU。我可以通过检查 /sys/devices/system/cpu/cpu*/online 来查看特定内核是脱机还是联机,以查看文件是否包含 0 或 1,分别表示脱机或联机。
我还检查了下面的链接:
我理解 John McCalpin 的回答,但同样,我正在寻找一种 C/C++ 方式来做到这一点。
【问题讨论】:
-
您说的是 PCI 设备上的硬件寄存器。读取它是一项特权操作,您不能直接从用户空间代码中进行读取。您必须从内核中获取这些信息,并且打开和解析
/sys文件对我来说似乎是一种很好的方法。没有什么能阻止你从 C/C++(fopen / fscanf / fclose等)执行此操作。 -
我猜你可以使用
ioperm(2)之类的东西来获得读取和写入这些端口的权限,但这似乎更麻烦,而不是特别“更多的 C/C++ 方式”。跨度>
标签: intel cpu-architecture micro-architecture