在英特尔的手册中,下面这一节让我感到困惑:
11.5.6.2共享模式下,L1数据缓存在逻辑处理器之间进行竞争性共享。即使逻辑处理器使用相同的CR3寄存器和分页模式,也是如此。在共享模式下,可以对L1数据缓存中的线性地址进行别名,这意味着缓存中的一个线性地址可以指向不同的物理位置。解决混叠的机制可能导致混乱。因此,IA32_MISC_ENABLEbit 24 =0是基于英特尔NetBurst微体系结构的处理器的首选配置,该架构支持英特尔超线程技术。
作为英特尔,使用VIPT(等于PIPT)访问缓存。
缓存混叠是如何发生的?
发布于 2020-11-01 13:18:53
基于Intel 64和IA-32架构优化参考手册,2009年11月(248966-020),第2.6.1.3节:
物理处理器中的大多数资源是完全共享的,以提高资源的动态利用率,包括缓存和所有执行单元。一些线性寻址的共享资源,如DTLB,包括一个逻辑处理器ID位,以区分条目是否属于一个逻辑处理器或另一个逻辑处理器。
第一级缓存可以根据上下文ID位在两种模式下工作:
别名是可能的,因为处理器ID/context-ID位(它只是指示内存访问来自哪个虚拟处理器的位)对于不同的线程和共享模式使用该位是不同的。自适应模式只需使用内存地址,就像人们通常期望的那样对缓存进行寻址。
具体来说,在共享模式下索引缓存时,如何使用处理器ID似乎没有文档化。(具有多个地址位的XORing将提供索引的分散,因此一个硬件线程的相邻索引将映射到另一个线程的更多分离的索引。为不同的线程选择不同的位序是不太可能的,因为这样会增加延迟。在缓存线粒度以上的空间局部性条件下,分散性降低了冲突频率,但小于方式粒度。
https://stackoverflow.com/questions/64622111
复制相似问题