Caching 冷缓存和热缓存概念是什么意思?

Caching 冷缓存和热缓存概念是什么意思?,caching,linux-kernel,filesystems,ext2,Caching,Linux Kernel,Filesystems,Ext2,我读了一篇论文,它使用了术语冷缓存和热缓存。我在谷歌上搜索了这些术语,但没有找到有用的东西(只有一条线索) 这些术语是什么意思 TL;DR有一个比喻是汽车的冷引擎和暖引擎。冷缓存-没有任何值,不能给你任何加速,因为它是空的。热缓存有一些值,可以给你加速 缓存是一种结构,它保存一些值(索引节点、内存页、磁盘块等),以便更快地查找 缓存通过在快速搜索数据结构(哈希表、B+树)或更快的访问介质(RAM内存与HDD、SSD与HDD)中存储某种短引用来工作 为了能够进行这种快速搜索,您需要缓存来保存值。让

我读了一篇论文,它使用了术语冷缓存热缓存。我在谷歌上搜索了这些术语,但没有找到有用的东西(只有一条线索)


这些术语是什么意思

TL;DR有一个比喻是汽车的冷引擎和暖引擎。冷缓存-没有任何值,不能给你任何加速,因为它是空的。热缓存有一些值,可以给你加速

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

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

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

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

现在想象一下,您需要读取文件/etc/fstab。要做到这一点,您需要从磁盘读取inode表(10毫秒),然后解析它,获取文件的开始块,然后读取文件本身(10毫秒)。总计约20毫秒

这是太多的操作了。因此,您正在RAM中以哈希表的形式添加缓存。RAM访问速度为10ns,比以前快1000倍。该哈希表中的每行包含2个值

(inode number or filename) : (starting disk block)
但问题是,在开始时,您的缓存是空的—这种缓存称为冷缓存。要利用缓存的优势,您需要用一些值填充它。这是怎么发生的?当您查找某个文件时,可以在inode缓存中查找。如果在缓存中找不到inode(缓存未命中),则表示“好”,并通过inode表读取、解析和读取文件本身执行完整的读取周期。但在解析部分之后,您正在缓存中保存inode编号和解析的起始磁盘块。这种情况一直在发生——你试图读取另一个文件,你在缓存中查找,你得到缓存未命中(你的缓存是冷的),你从磁盘读取,你在缓存中添加一行

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

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

该缓存被称为热缓存-具有一些值的缓存,这些值可以提供缓存命中率。

背景:

Cache
是一个小而快的
内存
,它有助于避免
CPU
访问
主存
(更大更慢)以节省时间(
Cache
读取速度比
主存
读取速度快100倍)。但是,只有当程序所需的数据已被
缓存
(从
主存
读取到
缓存
)且有效时,这才有帮助。而且,
cache
会随着时间的推移填充数据。因此,
缓存可以是:
1.空的,或
2.可以包含不相关的数据,或
3.可以包含相关数据


现在,请回答您的问题:

冷缓存:
缓存为空或具有无关数据时,因此
CPU
需要从
主存执行较慢的读取,以满足您的程序数据需求

热缓存:
缓存
包含相关数据,并且从
缓存
本身满足程序的所有读取时


因此,热缓存是可取的,冷缓存不是。

非常好的响应@avd

冷缓存只是一个空缓存或包含陈旧数据的缓存

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


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

在前端Web开发中有一个类似的概念,现在几乎所有好的js前端框架都在运行

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

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


参考:

在多道程序环境中,如果任务保留了上次执行时的大部分工作集,则缓存将被删除