如何解决缓存切片是如何划分的?
对于现代末级缓存,它们根据 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 举报,一经查实,本站将立刻删除。