通过打开以下文件,可以以编程方式找到缓存层次结构的完整图片/sys
(系统文件系统)。
每个“线程”或“逻辑处理器”由一个子目录表示/sys/devices/system/cpu/
。在该目录中,您将找到一个缓存目录。例如,可以在此处找到第一个逻辑处理器的缓存信息:
$ ls /sys/devices/system/cpu/cpu0/cache/
index0
index1
index2
index3
power
uevent
与该逻辑处理器关联的每个缓存实体由一个index[0-9]*
目录。索引后的数字does not代表水平。相同的高速缓存实体可以在不同的逻辑处理器下多次列出。在这些目录中,您可以找到缓存实体的所有属性(级别、集合、行大小等)。
$ ls /sys/devices/system/cpu/cpu0/cache/index0
coherency_line_size
level
number_of_sets
physical_line_partition
power
shared_cpu_list
shared_cpu_map
size
type
uevent
ways_of_associativity
可以找到完整的文档here https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-system-cpu.
最重要的是,为了获得您想要的输出,您需要检查shared_cpu_list
:
$ cat /sys/devices/system/cpu/cpu0/cache/index0/shared_cpu_list
0,28
这将向您显示哪些逻辑处理器共享此缓存实体。通过检查所有实体(/sys/devices/system/cpu/cpu*/cache/index*/
),并使用消除重复项shared_cpu_list
,您可以通过编程方式访问所需的所有数据。
请注意,您的虚拟机管理程序不需要传递准确的信息。这只会显示来宾内核看到的缓存层次结构。