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

时间:2013-09-01 14:24:05

标签: concurrency language-agnostic cpu cpu-architecture cpu-cache

从第11章(性能和可伸缩性)和JCIP book上下文切换部分开始:

  

当切换新线程时,它所需的数据不太可能   在本地处理器缓存中,因此上下文切换引起了一连串的冲击   缓存未命中,因此线程运行时会慢一些   第一次安排。

  1. 有人可以用一种易于理解的方式解释缓存未命中的概念及其可能的相反(缓存命中)吗?
  2. 为什么上下文切换会导致很多缓存丢失?

5 个答案:

答案 0 :(得分:91)

  

有人可以用一种易于理解的方式解释缓存未命中的概念及其可能的相反(缓存命中)吗?

缓存未命中通常是在缓存中查找某些内容并且未找到时 - 缓存中不包含正在查找的项目。缓存 hit 就是当您在缓存中查找某些内容并且 存储该项目并且能够满足查询时。

  

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:-2)

如果所需数据在L1中,那么它就是缓存命中。如果所需数据位于另一个高速缓存存储器级别,那么它就是高速缓存未命中。