我想问一下关于内存buff/cache的问题
假设我们有带有磁盘的 Linux 机器,以及一些将数据写入磁盘 /var/data 的应用程序
根据我的理解,当应用程序将数据写入磁盘时,该数据也将保存在内存缓存中
一段时间后,X时间后应用程序数据将从内存缓存中删除
是否可以强制将特定数据保存在内存缓存上而不是磁盘上?
我的问题的原因 - 是因为我们想要快速读/写,而磁盘对此非常慢
答案1
保存在内存缓存中
确实不存在这样的事情。你从这开始增益/缓存:
]# free -g
total used free shared buff/cache available
Mem: 7 0 3 0 3 6
Swap: 0 0 0
这给出了当前用作缓冲区或高速缓存的 RAM 量。内核这样做正是因为磁盘速度很慢,而且通常(如图所示)有足够的 RAM。
如果您想为某些文件保留一部分 RAM,您可以将它们放入 RAM 磁盘 ( mount -t tmpfs ...
)。但随后您必须记住将它们复制回磁盘。
答案2
我认为您可能对内存层次结构的工作原理有误解。层次结构从最接近 CPU/最快到最慢:
CPU寄存器 > 高速缓冲存储器 > RAM/主存 > 磁盘
高速缓存位于 CPU 和主存之间,访问速度比主存快。通常,当访问内存位置时,附近的数据块(即地址范围块的副本)被复制到高速缓存中。然后,下次访问内存位置时,首先检查高速缓存,查看数据是否已经存在,并且无需访问主内存即可节省时间。
所以,我认为你的问题不太有意义。主内存和磁盘之间通常没有中间存储或高速缓存。当前使用的数据存储在 RAM 中,这是存储和访问数据的最有效方式。如果您想保存它以供以后使用,请在计算机关闭后将其复制到磁盘(因为这是您唯一的选择)。如果您想立即快速访问数据,则除非必须,否则您不想触摸磁盘。
我不知道有什么方法可以轻松地覆盖缓存管理并将某些内容存储到缓存中,但明确不存储到 RAM 中。通常已经有非常好的、高效的系统来管理内存缓存。
另外,我不相信 X 时间后数据会从缓存中删除。通常,它会被 CPU 想要访问的最新数据推出。