这是我不时看到的一个老问题。我对它的理解相当有限(很久以前就读过这些差异,但所涉及的事实从未真正陷入困境)。
据我了解,
缓冲器
由具有活动 I/O 操作的程序使用,即等待写入磁盘的数据
缓存
是已完成 I/O 操作的结果,即已刷新缓冲区或从磁盘读取数据以满足请求。
后人能得到一个明确的解释吗?
这是我不时看到的一个老问题。我对它的理解相当有限(很久以前就读过这些差异,但所涉及的事实从未真正陷入困境)。
据我了解,
缓冲器
由具有活动 I/O 操作的程序使用,即等待写入磁盘的数据
缓存
是已完成 I/O 操作的结果,即已刷新缓冲区或从磁盘读取数据以满足请求。
后人能得到一个明确的解释吗?
“缓存”总数还将包括一些其他内存分配,例如任何 tmpfs 文件系统。要查看此效果,请尝试:
并且您将看到复制到基于 ram 的文件系统的 100Mb 的“缓存”值下降(假设有足够的空闲 RAM,如果机器已经过度提交,您可能会发现其中一些最终以交换方式结束内存使用)。每次调用 free 之前的 "sync; echo 3 > /proc/sys/vm/drop_caches" 应该在所有写缓冲区(同步)中写入任何挂起的内容,并从内存中清除所有缓存/缓冲的磁盘块,这样 free 只会读取其他“缓存”值中的分配。
虚拟机(例如在 VMWare 下运行的那些)使用的 RAM 也可能计入免费的“缓存”值,当前打开的内存映射文件使用的 RAM 也会计入(这将取决于您使用的管理程序/版本和也可能在内核版本之间)。
因此,它不像“缓冲区计数挂起的文件/网络写入和缓存计数最近读取/写入 RAM 中保存的块以保存将来的物理读取”那么简单,尽管对于大多数目的,这个更简单的描述可以做到。
棘手的问题。当您计算可用空间时,您实际上需要将缓冲区和缓存都加起来。这是我能找到的
缓冲区是尚未“写入”到磁盘的东西。缓存是从磁盘“读取”并存储以备后用的东西。
http://visualbasic.ittoolbox.com/documents/difference-between-buffer-and-cache-12135
我正在寻找关于缓冲区的更清晰的描述,我在
"Professional Linux® Kernel Architecture 2008"
RedHat解释:
缓存页面:
缓存是内存的一部分,它透明地存储数据,以便可以更快地处理未来对该数据的请求。内核使用此内存来缓存磁盘数据并提高 i/o 性能。
Linux 内核的构建方式是,它将使用尽可能多的 RAM 来缓存来自本地和远程文件系统和磁盘的信息。随着时间的推移,系统上执行了各种读取和写入操作,内核试图为系统上运行的各种进程或将在不久的将来使用的相关进程的数据保留存储在内存中的数据。进程停止/退出时不会回收缓存,但是当其他进程需要更多内存而不是可用内存时,内核将运行启发式算法通过存储缓存数据并将该内存分配给新进程来回收内存。
当请求任何类型的文件/数据时,内核将查找用户正在操作的文件部分的副本,如果不存在这样的副本,它将分配一个新的高速缓存页面并用从磁盘中读出相应的内容。
存储在缓存中的数据可能是先前计算的值,或者是存储在磁盘中其他位置的原始值的副本。当请求某些数据时,首先检查缓存以查看它是否包含该数据。从缓存中检索数据比从其源源中检索数据更快。
SysV 共享内存段也算作缓存,尽管它们不代表磁盘上的任何数据。可以使用 ipcs -m 命令检查共享内存段的大小并检查字节列。
缓冲器:
缓冲区是存储在页面缓存下的数据的磁盘块表示。缓冲区包含位于页面缓存下的文件/数据的元数据。示例:当请求页面缓存中存在的任何数据时,内核首先检查缓冲区中的数据,其中包含指向页面缓存中包含的实际文件/数据的元数据。一旦从元数据中知道了文件的实际块地址,内核就会将其拾取以进行处理。
释放缓冲区/缓存
警告这解释了不推荐在生产服务器上使用的强方法!所以警告你,如果出现问题,不要怪我。
为了理解,您可以强制系统委派尽可能多的内存,而
前言cache
不是删除缓存的文件:在进行测试之前,您可以打开另一个窗口点击:
用于实时跟踪交换的演变。
注意:您必须在当前目录中处理尽可能多的可用磁盘,您有 mem+swap
演示注意,我所做的主机被强烈使用。这在真正安静的机器上会更加重要。