Memory “理解”;“缓冲区”;及;“缓存”;自由支配

Memory “理解”;“缓冲区”;及;“缓存”;自由支配,memory,linux-kernel,free-command,Memory,Linux Kernel,Free Command,这已经在前面被询问过了,但是不想再次更新同一个线程,因为它是一个旧线程 我想从free命令的输出中澄清一下“缓冲区”和“缓存”列 这就是我的理解 缓冲区是指数据存在于内存中但尚未刷新到磁盘的地方。 数据将通过bdflush守护进程定期刷新到磁盘,或者我们可以通过运行sync命令手动完成 另一方面,高速缓存是加载到内存中但保留在内存中的程序/数据,这样,如果再次需要,它将很快可用 为了理解缓冲区的概念,我尝试了以下实验 这是在我的桌面上读取free命令 [zama@localhost ~]$ fr

这已经在前面被询问过了,但是不想再次更新同一个线程,因为它是一个旧线程

我想从
free
命令的输出中澄清一下“缓冲区”和“缓存”列

这就是我的理解

缓冲区是指数据存在于内存中但尚未刷新到磁盘的地方。 数据将通过
bdflush
守护进程定期刷新到磁盘,或者我们可以通过运行
sync
命令手动完成

另一方面,高速缓存是加载到内存中但保留在内存中的程序/数据,这样,如果再次需要,它将很快可用

为了理解缓冲区的概念,我尝试了以下实验

这是在我的桌面上读取
free
命令

[zama@localhost ~]$ free -m total used free shared buffers cached Mem: 2897 465 2431 0 30 230 -/+ buffers/cache: 204 2692 Swap: 4000 0 4000 [zama@localhost ~]$ sync [zama@localhost ~]$ free -m total used free shared buffers cached Mem: 2897 466 2431 0 30 230 -/+ buffers/cache: 205 2691 Swap: 4000 0 4000 正如预期的那样,缓存值应该增加,free正在确认这一点

@localhost ~]# free -m total used free shared buffers cached Mem: 2897 1466 1430 0 32 1127 -/+ buffers/cache: 306 2590 Swap: 4000 0 4000 然后我更新了
drop\u cache
kernel参数,以便删除缓存vlaue

[root@localhost ~]# cat /proc/sys/vm/drop_caches 0 [root@localhost ~]# echo "1" > /proc/sys/vm/drop_caches [root@localhost ~]# cat /proc/sys/vm/drop_caches 1 所以,我最初说的“缓冲区”是尚未刷新到磁盘的RAM数据,看起来是正确的


请告诉我方向是否正确。

我一直理解的是,内存缓冲区用于临时存储从设备(包括磁盘)读取或写入的数据,虽然内存的缓存区用于加快将来从设备读取的速度。

这是我的理解:缓冲区告诉您为维护块设备保留了多少内存,但缓存告诉您有多少内存用于文件内容

free命令中的列标题有点标记错误,至少从linux用户(与开发人员相反)的角度来看是这样。以下是标题含义的澄清:

总计:是的,这是总ram

使用:这可能是最混乱的一列。这是应用程序使用的内存和其他“临时”(缓冲区+缓存)使用的内存的混合,如果需要,这些内存实际上是可用的。所以从技术上讲,内存是真正被使用的,但是如果应用程序需要,大部分内存都是可用的。如果linux系统可用,“临时”使用的内存将被借用,以帮助提高系统性能,否则系统将更频繁地从磁盘读取。大部分此类内存显示在“缓存”列下。如果应用程序需要内存,linux系统将放弃该内存

自由:是的,这是纯粹的自由和未触及的记忆

共享:专门分配给多个进程使用的内存

缓冲区:用于帮助某些进程的临时内存

缓存:操作系统“借用”的可用内存,有助于加快许多linux操作系统的运行速度。如果应用程序需要该内存,则系统会放弃该内存


-/+buffers/cache开头的行通常比第一行Mem更有用。空闲-/+buffers/cache的交叉点本质上就是“可用”内存。

Linux vm子系统将任何空闲、未使用或未分配的内存视为缓冲区/缓存

因此,运行
echo 1>/proc/sys/vm/drop_caches
会指示内核删除或清理页面缓存(页面缓存)、齿状缓存(slab缓存)和索引节点(slab缓存中),并使内存回收并可用

干净的数据缓存页不会被设计释放。如果或当需要分配额外内存时(malloc/calloc/brk/sbrk和friends),内核可以很容易地回收它们,同时它们包含来自磁盘的有用数据,如果需要,可以再次保存磁盘I/O

sync
命令仅将内存中的任何脏页提交到磁盘,它不会释放缓冲区/缓存。删除缓冲区/缓存的唯一方法是使用
echo“1”>/proc/sys/vm/drop\u缓存
,或者内核为应用程序请求的新分配回收数据页

pdflush
已被使用每个备份设备信息(BDI)的刷新线程所取代。

引用自:

Linux总是尝试使用RAM来加速磁盘操作,方法是使用可用内存来缓存(文件系统元数据)和缓存(包含文件或块设备实际内容的页面)


引用

共享的
/
缓冲区
/
缓存的
:这显示特定用途的内存使用情况,这些值包含在使用的的值中

第二行给出调整后的第一行值。它给出了
已用
的原始值减去总和
缓冲区+缓存
,以及免费的原始值加上总和
缓冲区+缓存
,因此它的标题。这些新值通常比第一行的值更有意义

最后一行
Swap
提供了有关交换空间使用情况的信息。例如,已临时移动到磁盘的内存内容

@localhost ~]# free -m total used free shared buffers cached Mem: 2897 1466 1430 0 10 1127 -/+ buffers/cache: 306 2590 Swap: 4000 0 4000 [root@localhost ~]# cat /proc/sys/vm/drop_caches 0 [root@localhost ~]# echo "1" > /proc/sys/vm/drop_caches [root@localhost ~]# cat /proc/sys/vm/drop_caches 1 [root@localhost ~]# free -m total used free shared buffers cached Mem: 2897 299 2597 0 1 74 -/+ buffers/cache: 224 2672 Swap: 4000 0 4000