linux cpu文件夹中文件的含义

linux cpu文件夹中文件的含义

文件夹中的文件是什么意思/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
  1. 它们的含义是什么?
  2. 我如何知道 L2 缓存是否共享。如果是,我如何知道它与哪个 CPU 共享?
  3. 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 缓存。

相关内容