Ami*_*mir 50 filesystems caching ext2 linux-kernel
我读报纸,它使用的术语冷缓存和温暖的高速缓存.我搜索了这个术语,但我没有找到有用的东西(这里只有一个帖子).
这些术语是什么意思?
Ale*_*oba 85
TL; DR有类似于冷引擎和汽车的温暖引擎.冷缓存 - 没有任何值,也不能给你任何加速,因为它是空的.暖缓存有一些值,可以给你加速.
缓存是一种结构,它包含一些值(inode,内存页,磁盘块等)以便更快地查找.
缓存通过在快速搜索数据结构(哈希表,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)
Run Code Online (Sandbox Code Playgroud)
但问题是,一开始你的缓存是空的 - 这种缓存称为冷缓存.要利用缓存的好处,您需要使用一些值填充它.怎么会发生?当您在寻找某个文件时,您会查看您的inode缓存.如果你没有在缓存(缓存未命中)中找到inode,你会说'好'并使用inode表读取完成读取周期,解析它并读取文件本身.但在解析部分后,您将保存inode编号并在缓存中解析启动磁盘块.而且这种情况一直在继续 - 你试图读取另一个文件,你看缓存,你得到缓存未命中(你的缓存很冷),你从磁盘读取,你在缓存中添加行.
所以冷缓存不会给你任何加速,因为你还在从磁盘读取.在某些情况下,冷缓存会使您的系统变慢,因为您正在执行额外的工作(查找表中的额外步骤)来预热缓存.
一段时间后,你的缓存中会有一些值,有时你会尝试读取文件,你会在缓存和BAM中查找!你找到了inode(缓存命中)!现在你已经启动了磁盘块,所以你跳过阅读超级块并开始自己读取文件!你刚刚节省了10ms!
缓存它称为暖缓存 - 缓存带有一些值,可以为您提供缓存命中.
bro*_*oot 32

背景:
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自身满足.
因此,热缓存是可取的,冷缓存不是.
小智 5
非常好的回复@avd。
冷缓存只是一个空白缓存或带有陈旧数据的缓存。
另一方面,热缓存维护系统所需的有用数据。它可以帮助您实现更快的处理;它主要用于近乎实时的请求处理。有些系统/流程在开始满足用户请求之前需要一些方便的信息;例如需要市场数据/风险信息/安全信息等才能处理用户请求的交易平台。如果对于每个请求,进程必须查询数据库/服务以获取此关键信息,这将是耗时的。所以缓存它是个好主意;这通过热缓存是可行的。应定期维护此缓存(更新/删除等);否则在此期间您的缓存可能会随着不必要的数据而增长,您可能会注意到性能下降。
要创建热缓存,一种方法是缓存的惰性填充,我的意思是当您收到请求时,您填充缓存;在这种情况下,最初的请求会很慢,但随后的请求会更快。另一种方法是在进程启动时(或在用户请求开始之前)加载数据并维护缓存直到进程存活。