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

我读了一篇论文,它使用术语 冷藏室温存。我在谷歌上搜索了这些术语,但没有找到有用的东西(只有一个线程 给你)。

这些术语是什么意思?

45510 次浏览

汽车的冷发动机和暖发动机有一个类比。冷缓存-没有任何值,不能给你任何加速,因为,好吧,它是空的。暖缓存有一些值,可以为您提供加速。

缓存是一种结构,它保存一些值(inode、内存页、磁盘块等) ,以便更快地进行查找。

缓存通过在快速搜索数据结构(哈希表,B + 树)或更快访问媒体(RAM 内存与硬盘,SSD 与硬盘)中存储某种短引用来工作。

为了能够进行这种快速搜索,您需要缓存来保存值。

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

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

手术太多了。因此,您要在 RAM 中以哈希表的形式添加一个缓存。RAM 访问是10ns-也就是1000(!)更快。哈希表中的每一行都包含2个值。

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

但问题是,在开始时,您的缓存是空的-这样的缓存被称为 冷藏室。要利用缓存的好处,您需要用一些值来填充它。怎么会这样?当您在查找某个文件时,可以在 inode 缓存中查找。如果在缓存中没有找到 inode (缓存未命中) ,那么就是说“好的”,并使用 inode 表读取、解析和读取文件本身来完成整个读取周期。但是在解析部分之后,您将在缓存中保存 inode 编号并解析起始磁盘块。这种情况会一直持续下去——你尝试读取另一个文件,你在缓存中查找,你得到缓存丢失(你的缓存是冷的) ,你从磁盘读取,你在缓存中添加一行。

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

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

这个缓存被称为 温存-cache,其中一些值可以提供缓存命中率。

enter image description here

背景:

Cache是一个小而快的 memory,这有助于避免 CPU访问 main memory(大而慢) ,以节省时间(cache读取 ~100 x比从 main memory读取更快)。但是,这只有在程序所需的数据是 cached(从 main memory读入 cache)并且是有效的时候才有帮助。而且,随着时间的推移,cache会被数据填充。因此,cache可以是:
1. 空的,或
可以包含 无关紧要数据,或者
可以包含 相关的数据。


现在,回到你的问题:

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

热缓存: cache包含相关数据,并且程序的所有读操作都从 cache本身得到满足时。

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

非常好的回应。

Cold Cache 只是一个空白缓存或一个带有过时数据的缓存。

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

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

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

Cold Cache : 前端应用程序第一次调用后端服务器。

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

参考资料: 在前端缓存数据

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

没有以前执行历史的缓存称为 冷藏室