42

从11章(性能和可伸缩性),并命名为上下文切换的JCIP book部分:什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存未命中?

当一个新的线程切换的,它需要的数据不太可能在 本地处理器缓存,所以上下文切换导致缓存未命中,因此线程运行速度稍慢一些,当它们是 首次安排。

  1. 有人能在一个简单的解释理解的方式缓存未命中及其可能相反(缓存命中)的概念?
  2. 为什么上下文切换会导致大量缓存未命中?
+2

缓存命中 - **在缓存中找到**,而不必“进一步”(进入内存,磁盘等)。没有其他的东西了。 –

+0

另请参阅[程序员应该了解的内存](http://www.akkadia.org/drepper/cpumemory.pdf)。这是旧的,但仍然相关,除了有关预取线程和软件预取的部分。这部分大多只适用于Pentium4,但其他所有关于多级缓存的内容仍然适用于本地化和顺序访问。 –

回答

72

有人能在一个简单的解释理解的方式高速缓存未命中的概念及其可能相反(缓存命中)?

缓存小姐,通常,当东西在缓存中查找,并没有发现 - 缓存不包含的项目正在抬头。缓存点击是当您在缓存中查找某些内容时,它存储该项目并且能够满足查询。

为什么上下文切换会导致大量缓存未命中?

就内存而言,每个处理器都有一个memory cache--主存的一小部分的高速拷贝。当一个新线程上下文切换到一个处理器时,本地缓存是空的,或者它不对应于该线程所需的数据。这意味着由新线程所做的所有(或大部分)内存查找都会导致缓存未命中,因为它需要的数据是而不是存储在本地内存缓存中。然后硬件必须向主存内存发出一些请求,以填充本地内存缓存,这会导致线程初始运行速度变慢。

+2

我在这个问题中增加了第二部分。 – Geek

+0

“每个处理器都有一个内存高速缓存” - 这个内存高速缓存与L1,L2等高速缓存不同,还是相同? –

+0

相同@RajeevMehta。 – Gray

1

您还应该观察一下,如果上下文切换导致先前运行的线程返回到可访问缓存数据的处理器上的活动状态,则有可能需要的“工作集”仍在缓存中。这是真的可能性取决于缓存大小(和结构)。这也取决于工作量:在线程空闲或等待期间有多少缓存需求,以及闲置或等待期持续多长时间。

0

每当处理器想要从主存储器中取数据时,首先会查看缓存缓冲区,以查看缓存区中是否存在相应的地址。如果它在那里,它将通过使用缓存来执行操作;不需要从主内存中获取。这被称为“缓存命中”。

如果该地址不在缓存中,则称为“缓存未命中”。如果发生高速缓存未命中,这意味着处理器已经转到主内存来获取地址,并且需要更多时间。

0

如果处理器发现内存位置在缓存中,我们说缓存命中,否则我们说缓存未命中。

-2

如果所需数据在L1中,那么它是缓存命中。如果所需的数据处于另一个缓存内存级别,那么这是一个缓存未命中。

+0

在L1中未命中但在L2中命中的访问通常不会被称为“缓存未命中”。这是一个L1错过,但不仅仅是一个不合格的“缓存未命中”。 –

相关问题