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

Concurrency 什么是缓存命中和缓存未命中?为什么上下文切换会导致缓存丢失?,concurrency,language-agnostic,cpu,cpu-architecture,cpu-cache,Concurrency,Language Agnostic,Cpu,Cpu Architecture,Cpu Cache,从第11章(性能和可伸缩性)和“上下文切换”部分: 当一个新线程被切换时,它需要的数据不太可能被删除 在本地处理器缓存中,因此上下文切换会导致一系列 缓存未命中,因此线程在被缓存时运行得稍慢一些 第一个预定的 是否有人能以一种易于理解的方式解释缓存未命中的概念及其可能的对立面(缓存命中) 为什么上下文切换会导致大量缓存丢失 是否有人能以一种易于理解的方式解释缓存未命中的概念及其可能的对立面(缓存命中) 通常,缓存未命中是指在缓存中查找某个内容但未找到—缓存中未包含正在查找的项目。缓存命中是指当您

从第11章(性能和可伸缩性)和“上下文切换”部分:

当一个新线程被切换时,它需要的数据不太可能被删除 在本地处理器缓存中,因此上下文切换会导致一系列 缓存未命中,因此线程在被缓存时运行得稍慢一些 第一个预定的

  • 是否有人能以一种易于理解的方式解释缓存未命中的概念及其可能的对立面(缓存命中)
  • 为什么上下文切换会导致大量缓存丢失
  • 是否有人能以一种易于理解的方式解释缓存未命中的概念及其可能的对立面(缓存命中)

    通常,缓存未命中是指在缓存中查找某个内容但未找到—缓存中未包含正在查找的项目。缓存命中是指当您在缓存中查找某个内容时,它正在存储该项,并且能够满足查询

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


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

    您还应该注意,如果上下文切换导致在有权访问缓存数据的处理器上,先前运行的线程返回活动状态,则所需的“工作集”仍在缓存中。这是否为真取决于缓存大小(和结构)。这还取决于工作负载:线程空闲或等待期间对缓存的需求量,以及空闲或等待期间的持续时间。

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


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

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

    如果所需数据在一级缓存中,则称之为缓存命中。”。如果所需数据位于另一个缓存级别,则为缓存未命中。

    缓存命中-在缓存中找到,无需“进一步”(进入内存、磁盘等)。没有什么其他的了。另请参见。它很老,但仍然相关,除了关于预取线程和许多软件预取的部分。这一部分主要只适用于奔腾4,但关于多级缓存以及为本地和顺序访问布局数据的所有其他内容仍然适用。我在这个问题上添加了第二部分。“每个处理器都有一个内存缓存”-这个内存缓存与一级缓存不同吗,L2 etc缓存还是相同?相同的@RajeevMehta。我只是在
    x-cache
    上做一些测试。我看到了一些意想不到的行为。尽管这是我第一次
    获取图像,但我仍然获得了
    命中率
    .1。
    HIT
    是指客户端上的
    HIT
    缓存,还是指服务器上的
    HIT
    即您可以从CDN获得缓存结果?因为我得到了“来自cloudfront的信息”并查找了它,发现cloudfront是一个CDN。我只是说我不知道,你应该问另一个问题,特别是关于CDN如何处理缓存头的问题。我的答案是关于内部线程/处理器内存缓存的。在L1中未命中但在L2中命中的访问通常不会被称为“缓存未命中”。这是一个一级未命中,但不仅仅是一个不合格的“缓存未命中”。