问题描述
对于现代末级缓存,它们根据 slices
进行划分。但是看了一些关于它的介绍,还是没搞明白是怎么按地址划分的。
这是对论文中切片的介绍。行偏移以外的位用于散列以获取切片 ID。当然,LLC 通常是通过物理地址来索引的。 我的服务器缓存的参数如下。它有24个物理内核,所以它有24个切片,每个切片都接近一个内核。
LEVEL1_ICACHE_SIZE 32768
LEVEL1_ICACHE_ASSOC 8
LEVEL1_ICACHE_LInesIZE 64
LEVEL1_DCACHE_SIZE 32768
LEVEL1_DCACHE_ASSOC 8
LEVEL1_DCACHE_LInesIZE 64
LEVEL2_CACHE_SIZE 262144
LEVEL2_CACHE_ASSOC 8
LEVEL2_CACHE_LInesIZE 64
LEVEL3_CACHE_SIZE 31457280
LEVEL3_CACHE_ASSOC 20
LEVEL3_CACHE_LInesIZE 64
LEVEL4_CACHE_SIZE 0
LEVEL4_CACHE_ASSOC 0
LEVEL4_CACHE_LInesIZE 0
它有两个插槽,每个插槽有 12 个物理内核。
NUMA node0 cpu(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46
NUMA node1 cpu(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47
根据以上参数,我的LLC大小为31457280Byte。每个缓存行是 64Byte。它是一个 20 路集合关联结构。所以有 31457280/64/20=24576
个缓存集。每个 SOCKET 有 12 个物理内核,它们共享一个 LLC。因此,每个切片共有 24576/12=2048
个缓存集。
我的以下哪些理解是正确的?我更喜欢第一个是正确的。
-
每个切片上的集合索引都是独立编号的。因此,物理地址的第 6-16 位用于索引缓存集。然后使用除行偏移以外的所有位通过哈希找到切片id。
-
所有切片上的集合索引都是统一编号的。但是 24576 需要 14 位进行索引(这似乎并不完全对应)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)