X86 Skylake中干净缓存线的写回?

X86 Skylake中干净缓存线的写回?,x86,intel,cpu-architecture,cpu-cache,X86,Intel,Cpu Architecture,Cpu Cache,我观察到Skylake SP在真实硬件上写回干净的缓存线 @Leeor对此帖子的回答是 从Skylake开始,一些CPU(服务器段)不再具有包含性L3,而是具有非包含性(以支持增加的L2)。这意味着,在L2之外老化时,干净的行也可能被写回,因为L3通常不保存它们的副本 我不明白为什么三级缓存的非包容性使得二级缓存线被写回,有人能给我解释一下吗 编辑: 我终于找到了一种方法来测量那些干净的写回的数量。在30亿次读取中,只有20次使用性能计数器实现了对DRAM的干净写回 Performance c

我观察到Skylake SP在真实硬件上写回干净的缓存线

@Leeor对此帖子的回答是

从Skylake开始,一些CPU(服务器段)不再具有包含性L3,而是具有非包含性(以支持增加的L2)。这意味着,在L2之外老化时,干净的行也可能被写回,因为L3通常不保存它们的副本

我不明白为什么三级缓存的非包容性使得二级缓存线被写回,有人能给我解释一下吗

编辑:

我终于找到了一种方法来测量那些干净的写回的数量。在30亿次读取中,只有20次使用性能计数器实现了对DRAM的干净写回

 Performance counter stats for 'system wide':                                    
                                                                                 
     3,697,263,307      uncore_imc_1/event=0x4,umask=0x3/   /* cas_count_read */               
                20      uncore_imc_1/event=0xb8,umask=0x11/ /* wr_cas_rank0 BG0 */
                                                                                 
    1826.846941108 seconds time elapsed

另一件事是,我只在双套接字平台上观察到这些干净的写回。

我认为这是一个错误,我认为Leeor的意思是“可能会丢失”,即不再存在于任何级别的缓存中。好吧,你是对的,干净的行永远不需要写回。当然,九个L3并不意味着独占;L3很有可能在L2中仍然保存的副本,例如,如果一个内核在2MiB阵列上重复循环,您可能会期望它的大部分在L3中保持热状态。由于每个核心的L2仅为1MiB,您可能会遇到大部分L2未命中。或者Leeor建议L3可以充当L2的牺牲品缓存,并为L2正在逐出的干净线路分配空间。(IIRC Skylake SP也不这样做。)我看到几年前我对这个答案发表了评论,询问添加时的“写回干净的缓存线”措辞。我的第一个问题是正确的:我确实观察到Skylake SP上干净缓存线的写回,这意味着@Leeor的说法可能是正确的。但是,是非包容性特性导致了这些干净的写回,还是其他原因呢?我们是在DRAM处理器中开发的,这就是我观察到的。所谓写回,我的意思是将干净的缓存线写入DRAM。