文件夹中的文件是什么意思/sys/devices/system/cpu/cpu0/cache/index0
?我在文件夹中看到这些文件:
coherency_line_size number_of_sets shared_cpu_list size ways_of_associativity
level physical_line_partition shared_cpu_map type
- 它们的含义是什么?
- 我如何知道 L2 缓存是否共享。如果是,我如何知道它与哪个 CPU 共享?
- index0 index1 .. index3 是什么意思。index3 代表 L3 缓存,index2 代表 L2 缓存吗?
其中/sys/devices/system/cpu/cpu0/cache/index3
包含以下文件:
cache_disable_0 level shared_cpu_list subcaches
cache_disable_1 number_of_sets shared_cpu_map type
coherency_line_size physical_line_partition size ways_of_associativity
为什么我在 index1 或 index2 中看不到子缓存?并且 shared_cpu_list 显示 0_7。这是否意味着此缓存与 cpu0 至 cpu7 共享?
答案1
index0、index1 等中的数字含义不一定与级别相对应;它们只是编号。如果您想知道它是哪个级别的缓存,请查看级别文件。1 表示 L1,2 表示 L2,3 表示 L3。它们往往按从最低级别到最高级别进行编号,但我不知道是否有任何要求。
要知道 L2 是否共享,首先确定哪个缓存是 L2。然后查看该缓存的 shared_cpu_list。它将是共享的起始编号和结束编号。(我不知道当它不共享时是什么样子,因为我的计算机只有共享缓存,但我猜它只是一个数字或类似“0-0”的数字。)例如,在我的四核超线程 Sandy Bridge 上,如果我查看 L2 的 shared_cpu_list,我会看到“2-3”,这告诉我它与 cpu2 共享(由于超线程,它实际上是同一个物理 CPU,因此它实际上不是共享缓存)。
对于我的 L3 缓存,所有缓存只有一个,我看到“0-7”,因此我认为这意味着它由所有 CPU 0 到 7 共享。但我从未在其中一个文件中看到下划线。
其他一些含义:
- 类型——“指令”表示仅用于缓存指令(代码),“数据”表示仅用于存储数据(变量等),“统一”表示没有这种分离,可以存储任意一种。
- coherency_line_size-一个缓存行中有多少字节,它是从主内存读取和写入内存的单位。
- ways_of_associativity-给定行可以映射到多少个不同的缓存槽。值越高越好(这意味着您不太可能拥有小于缓存但无法同时位于缓存中的工作集,因为大量数据想要位于相同的缓存行中),但很难实现,尤其是在必须更快的低级缓存中。对于 L1,8 非常常见。
答案2
在我的计算机上,index0 的类型为数据,index1 的类型为指令,因此意味着这两个对象的 L1 缓存是不同的,而它们共享 L2 和 L3 缓存。