【问题标题】:What does it mean by cold cache and warm cache concept?冷缓存和热缓存的概念是什么意思?
【发布时间】:2014-05-10 11:14:37
【问题描述】:

我阅读了一篇论文,其中使用了 cold cachewarm cache 这两个术语。我用谷歌搜索了这个术语,但没有找到有用的东西(只有一个线程here)。

这些术语是什么意思?

【问题讨论】:

    标签: caching linux-kernel filesystems ext2


    【解决方案1】:

    TL;DR 可以类比汽车的冷发动机和暖发动机。冷缓存 - 没有任何值,也无法为您提供任何加速,因为它是空的。暖缓存有一些价值,可以为您提供加速。

    缓存是一种结构,它保存一些值(索引节点、内存页、磁盘块等)以加快查找速度。

    缓存通过将某种短引用存储在快速搜索数据结构(哈希表、B+ 树)或更快的访问介质(RAM 内存与 HDD、SSD 与 HDD)中来工作。

    为了能够进行这种快速搜索,您需要缓存来保存值。让我们看一个例子。

    假设您有一个带有一些文件系统的 Linux 系统。要访问文件系统中的文件,您需要知道文件在磁盘上的起始位置。此信息存储在 inode 中。为简单起见,我们说 inode 表存储在磁盘上的某个位置(所谓的“超级块”部分)。

    现在想象一下,您需要读取文件 /etc/fstab。为此,您需要从磁盘读取 inode 表(10 毫秒),然后解析它并获取文件的起始块,然后读取文件本身(10 毫秒)。总计 ~20ms

    这操作太多了。因此,您要在 RAM 中以哈希表的形式添加缓存。 RAM 访问时间为 10ns - 快了 1000(!) 倍。该哈希表中的每一行包含 2 个值。

    (inode number or filename) : (starting disk block)
    

    但问题是一开始你的缓存是空的——这样的缓存被称为冷缓存。要利用缓存的好处,您需要用一些值填充它。它是如何发生的?当您在查找某个文件时,您会在 inode 缓存中查找。如果您在缓存中没有找到 inode(cache miss),那么您说“好的”并通过 inode 表读取、解析和读取文件本身进行完整的读取循环。但是在解析部分之后,您将保存 inode 编号并在缓存中解析起始磁盘块。这一直在继续——你尝试读取另一个文件,你在缓存中查找,你得到缓存未命中(你的缓存是冷的),你从磁盘读取,你在缓存中添加一行。

    所以冷缓存不会给您任何加速,因为您仍在从磁盘读取。在某些情况下,冷缓存会使您的系统变慢,因为您正在做额外的工作(在表中查找的额外步骤)来预热缓存。

    一段时间后,您的缓存中会有一些值,并且在您尝试读取文件时,您会在缓存和 BAM 中查找!您找到了 inode(缓存命中)!现在你有了启动磁盘块,所以你跳过读取超级块并开始读取文件本身!您刚刚节省了 10 毫秒!

    该缓存被称为 warm cache - 使用一些值进行缓存,可以为您提供缓存命中。

    【讨论】:

    • 这很好解释。非常感谢!
    • Nit:10ns 比 10ms 快 10^6 倍
    【解决方案2】:

    背景:

    Cache 是一个小而快的memory,这有助于避免CPU 访问main memory(更大更慢)以节省时间(cache 读取速度比~100 x 读取速度快main memory )。但这仅在您的程序需要的数据是cached(从main memory 读取到cache)并且有效的情况下才有帮助。此外,cache 会随着时间的推移填充数据。所以,cache 可以是:
    1.空,或
    2. 可以包含不相关数据,或
    3. 可以包含相关数据。


    现在,回答您的问题:

    冷缓存:cache 为空或有无关数据时,CPU 需要从main memory 进行较慢的读取以满足您的程序数据要求。

    热缓存:cache 包含相关数据,并且您的程序的所有读取都来自cache 本身。

    所以,热缓存是可取的,冷缓存不是。

    【讨论】:

      【解决方案3】:

      非常好的回复@avd。

      Cold Cache 只是一个空白缓存或具有陈旧数据的缓存。

      Hot Cache 另一方面,维护系统所需的有用数据。它可以帮助您实现更快的处理;它主要用于近乎实时的请求处理。有些系统/流程在开始满足用户请求之前需要手边的某些信息;例如交易平台,它需要市场数据/风险信息/安全信息等才能处理用户请求。如果对于每个请求,进程都必须查询数据库/服务以获取此关键信息,这将非常耗时。所以缓存它是个好主意;这通过 Hot Cache 是可行的。 此缓存应定期维护(更新/删除等);否则,在此期间,您的缓存可能会因不必要的数据而增大,您可能会注意到性能下降。

      要创建热缓存,一种方法是缓存的惰性填充,我的意思是,当您收到请求时,您会填充缓存;在这种情况下,初始请求会很慢,但后续请求会更快。另一种方法是在进程启动时(或在用户请求开始之前)加载数据并保持缓存直到进程存在。

      【讨论】:

        【解决方案4】:

        Web前端开发中也有类似的概念,现在几乎所有好的js前端框架都做WarmCaching。

        冷缓存:前端应用首次调用后端服务器。

        暖缓存:前端第一次获取数据后,将其保存在本地缓存中。所以下次它尝试调用后端时,它会从本地缓存中获取项目。

        参考:Caching Data in frontend

        【讨论】:

        • 冷/暖是一对的一部分...缓存开始冷并在数据填充到其中后被加热。这可以称为“拉式”缓存,因为我们正在通过它读取我们的信息,并且它会保留下一次答案的副本。在数据被预取、自暖或源主动将数据推入缓存的情况下,我们将其称为“热”,因为缓存数据始终准备就绪。在 F/E 上下文中,我倾向于使用 pre-warmed 表达式,因为数据不是独立加载到缓存中,而是与读取操作耦合。不是很热,但很接近。
        【解决方案5】:

        在多程序环境中,如果任务保留了之前执行的大部分工作集,则缓存称为暖缓存

        没有先前执行历史的缓存称为冷缓存

        【讨论】:

          猜你喜欢
          • 2014-04-19
          • 2023-03-12
          • 2015-01-17
          • 2012-09-18
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 2015-03-22
          • 1970-01-01
          相关资源
          最近更新 更多