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

JCIP 的书的第11章(性能和可伸缩性)和名为 上下文切换的章节开始:

当一个新线程切换进来时,它所需要的数据不太可能是 在本地处理器缓存中,因此上下文切换会导致 高速缓存失败,因此线程运行时会稍微慢一些 第一次安排。

  1. 有人能用一种简单易懂的方式解释 缓存未命中的概念及其可能的对立面(缓存命中)吗?
  2. 为什么上下文切换会导致大量缓存丢失?
85292 次浏览

有没有人可以用一种容易理解的方式来解释高速缓存丢失的概念及其可能的对立面(高速缓存命中) ?

缓存 小姐通常是指在缓存中查找某些内容而没有找到的情况——缓存中不包含正在查找的项。缓存 击中是当您在缓存中查找某些内容时,它将 曾经是存储该项并能够满足查询。

为什么上下文切换会导致大量缓存丢失?

在内存方面,每个处理器都有一个 内存缓存——一个小部分主存的高速拷贝。当一个新线程被上下文切换到处理器时,本地缓存内存是空的,或者它不符合线程所需的数据。这意味着新线程执行的所有(或大部分)内存查找都会导致缓存丢失,因为它需要的数据是存储在本地内存缓存中的 没有。然后,硬件必须向 总台内存发出许多请求,以填充本地内存缓存,这会导致线程最初运行较慢。

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

每当处理器想要从主存中获取数据时,它首先会查看缓存缓冲区,以确定缓冲区中是否存在相应的地址。如果存在,它将使用缓存执行操作; 不需要从主内存中提取。这就是所谓的“缓存命中”。

如果该地址在缓存中不存在,则称为“缓存未命中”。如果发生了缓存丢失,这意味着处理器必须去主存取地址,而且需要更多的时间。

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

如果所需的数据在 L1中,那么它是一个缓存命中。如果所需的数据位于另一个缓存内存级别,那么就是缓存丢失。