Ave*_*yne 77 linux memory virtual-memory
这是我不时看到的一个老问题。我对它的理解相当有限(很久以前就读过这些差异,但所涉及的事实从来没有真正卡住过)。
据我了解,
缓冲器
由具有活动 I/O 操作的程序使用,即等待写入磁盘的数据
缓存
是完成 I/O 操作的结果,即已刷新缓冲区或从磁盘读取数据以满足请求。
我能为后代得到一个明确的解释吗?
Dav*_*ett 42
“缓存”总数还将包括一些其他内存分配,例如任何 tmpfs 文件系统。要查看此效果,请尝试:
mkdir t
mount -t tmpfs none t
dd if=/dev/zero of=t/zero.file bs=10240 count=10240
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
umount t
sync; echo 3 > /proc/sys/vm/drop_caches; free -m
Run Code Online (Sandbox Code Playgroud)
并且您将看到“缓存”值下降了 100Mb,您复制到基于 ram 的文件系统(假设有足够的空闲 RAM,如果机器已经过度使用,您可能会发现其中一些最终被交换)内存使用)。每次调用 free 之前的 "sync; echo 3 > /proc/sys/vm/drop_caches" 应该在所有写缓冲区(同步)中写入任何挂起的内容,并从内存中清除所有缓存/缓冲的磁盘块,因此 free 只会读取其他“缓存”值中的分配。
虚拟机(例如在 VMWare 下运行的那些)使用的 RAM 也可以计入 free 的“缓存”值,当前打开的内存映射文件使用的 RAM 也是如此(这将取决于您使用的虚拟机管理程序/版本和也可能在内核版本之间)。
因此,它不像“缓冲区计数挂起的文件/网络写入和缓存计数最近读取/写入的块在 RAM 中保存以保存未来的物理读取”那么简单,尽管对于大多数目的,这个更简单的描述可以做到。
棘手的问题。当您计算可用空间时,您实际上需要将缓冲区和缓存两者相加。这是我能找到的
缓冲区是尚未“写入”磁盘的东西。缓存是从磁盘“读取”并存储以备后用的东西。
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
我正在寻找关于缓冲区的更清晰的描述,我在 "Professional Linux® Kernel Architecture 2008"
第 16 章:页面和缓冲区缓存
相互作用
如果内核的其他部分没有任何好处,那么在页面和缓冲区之间设置链接就没有什么用处。如前所述,一些进出块设备的传输操作可能需要以单位执行,其大小取决于底层设备的块大小,而内核的许多部分更喜欢以页面粒度执行 I/O 操作,因为这样让事情变得更容易——尤其是在内存管理方面。在这种情况下,缓冲区充当两个世界之间的中介。