Pav*_*sev 4 cpu-cores cpu-cache
当前的英特尔CPU缓存架构由本地L1和L2缓存以及共享的包含L3缓存组成.我有两个类似的问题:
更新:请注意,英特尔Skylake具有新的L3缓存架构,该架构不具备包容性.
这两个问题的答案都是肯定的.
第二个更简单,让我们从那里开始 - L3缓存的主要好处是它是共享的.这种共享的目的是允许您在需要时通过单个线程利用更多的缓存容量,而不是在核心之间拆分相同资源而不是共享它们.
换句话说,如果所有N个核都是活动的和平衡的,并且数据是均匀分布的(即没有对齐问题),那么每个核的LLC将获得完全相同的份额(1/N).但是,如果一个核心的缓存更多,那么它就有可能以牺牲当前缓存较少的其他核心为代价来增长.当然,在极端情况下,您可以通过单个进程利用整个L3,而忽略了体系结构决定保留L3专用于某个任务(非常常见)或某个核心(非常不常见)的某些子集的情况.
至于第一个问题 - 如果L3是包容性的(如大多数常见CPU中的情况,主要用于有效的窥探过滤),并且其中一个线程成为主导并完全接管它,那么其他核心放置的数据(不太活跃的)必须被驱逐到存储器中,并且为了实现包容性 - 这些线路也必须被迫从相应的核心L1和L2中被驱逐出去.如果你保留数据(打破包容性),你将失去一致性.
在不包含L3的系统上,不会发生此行为,并且活动较少的核心将能够在L1/L2内部保留其数据.然而,这样的系统可以采用包容性窥探过滤器,其可能遭受相同的问题(并且再次强制驱逐) - 取决于确切的高速缓存协议.