buffer和cache的主要区别
Buffer(缓冲区)
定义:缓冲区是一种临时存储区域(RAM),通常是内存(memory)中的一块,其实质就是内存的一部分。在等待从输入设备输入数据或输出数据到输出设备时,将数据项放在其中。 它主要用于输入/输出过程。 例如,如果你要打印一份很长的文档,你肯定不希望你的CPU等待你的打印机“准备好再写一段了吗?” 相反,打印机会将要打印的数据填满一个buffer,然后CPU打印buffer里的内容,然后可以释放CPU继续处理其他事情,而不用使CPU等待低效的磁盘IO。
作用:buffer主要是用于协调两个速度差异很大的进程,比如:磁盘IO 和CPU处理速度。
Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。
Cache(缓存区)
cache是一个非常大的概念。有CPU cache(L1 cache,L2 cache),内存cache,磁盘cache,浏览器cache等等。但cache的一个通用的目的就是实现“需要的时候最快的速度拿到”这个目的。
- 比如CPU cache,就是介于CPU和内存之间的,访问速度远高于内存,接近于CPU的一个存储部件。执行计算机程序时,为了CPU能快速取到需要的指令,数据与地址管理部件会预测可能要用到的数据和指令,并将这些数据和指令预先从内存中读出送到Cache。简单来说,CPU Cache就是用来解决CPU与内存之间速度不匹配的问题。CPU有L1 cache,L2 cache等,cache越大,级数越多,越能发挥CPU快速的能力。
- 再比如内存cache,解决是内存与磁盘之间速度不匹配的问题。将热数据存到内存cache。使用程序执行时,从内存加载比从磁盘加载要快很多。
- 再比如硬盘cache,硬盘的cache作用就类似于CPU的cache,它解决了总线接口的高速需求和读写硬盘的矛盾以及对某些扇区的反复读取。
- 再比如浏览器缓存(Browser Caching),解决的是本地磁盘加载资源的速度比从网络加载资源的速度不匹配的问题。是为了解决网络缓慢的问题和节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,而不用再通过网络从服务器加载需要的资源。
定义:缓存(cache)是计算机中介于CPU和主存之间的一种较小且快速的存储部件。其实质是比内存更快的一种存储组件。这比整个将内存组件替换为快速组件更经济一些。
作用:Cache的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。
简单来说就是buffer偏重于写,而cache偏重于读。
主要区别:
比较项 | buffer | cache |
---|---|---|
作用 | 用于补偿在交换或使用数据的两个进程之间的速度差异。 | 缓存是计算机中较小且最快的存储部件。 |
场景 | 最常用于IO处理,偏重于写 | 主要用于解决尽快读取到需要的数据,偏重于读 |
实质 | 内存区域 | 快于内存的一种存储部件 |
数据 | 它存储数据的原始副本 | 它存储原始数据的副本。 |
linux的buffer和cache
buffer和cache 可以通过free
命令查看,也可以通过cat /proc/meminfo
查看
# free -b
total used free shared buff/cache available
Mem: 4294967296 1869250560 150822912 0 2274893824 2425716736
Swap: 0 0 0
- total:表示服务器可用的总内存;
- used:表示各种应用程序占用的内存,在释放前不能被其他程序使用的内存;
- free:表示未被分配给任何应用的内存空间,是“完全干净的内存”;
- shared:被多个进程共享的内存,临时文件系统使用的内存(支持于:kernels 2.6.32, displayed as zero if not available)
- buff/cache: 缓冲区和缓存区大小
- available:等于“free+buff/cache”,表示程序可以用到的内存。当程序需要的内存超过free的大小时,可以根据算法释放一部分buff/cache的内存空间,提供给新申请内存的程序使用。这才是OS可用的内存空间
Linux缓存管理
如何清理linux cache?
每个Linux系统都有三个选项可以在不中断任何进程或服务的情况下清除缓存。
proc是一个虚拟文件系统,我们可以通过修改 /proc中的文件,来对当前kernel的行为做出调整
我们可以通过调整/proc/sys/vm/drop_caches
来释放内存
drop_caches的值为是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存:sync;echo 1 > /proc/sys/vm/drop_caches
2:释放dentries和inodes:sync;echo 2 > /proc/sys/vm/drop_caches
3:释放所有缓存:sync; echo 3 > /proc/sys/vm/drop_caches
----这个命令在线上环境不建议执行,会严格影响性能。
PS:sync
命令的作用是:将文件系统buffer刷新到磁盘,更新磁盘块,超级块等信息
如何清理linux swap space?
使用如下命令清理:swapoff -a && swapon -a
参考资料:
https://www.geeksforgeeks.org/difference-between-buffer-and-cache/