Linux - buff和cache的区别

free -h命令可以查看内存的使用情况

[root@zabbix-server ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        432M        894M         10M        492M        1.2G
Swap:          2.0G          0B        2.0G

为什么free 比 available要小?

free = total - used - shared - buff/cache

available=total -used

为什么需要buff/cache?

计算机三大核心组件:cpu,内存,硬盘

cpu的吞吐量每秒可以达到1000G以上

        每秒可以写入1000G的数据,同时可以往外吐1000G的数据

内存的吞吐率比cpu要低很多,虽然比cpu吞吐率低,但是也有每秒几千MB/s

硬盘的吞吐率:例如sata接口的硬盘吞吐率最大600MB/s ,

硬盘上存储了大量的程序,一个程序要执行,首先要把数据从硬盘读到内存,然后从内存读到CPU,cpu进行逻辑运算,然后将运算结果返回给内存,内存再写入硬盘,CPU是不能直接从硬盘读取数据的,原因之一就是CPU和硬盘之间的吞吐率差距太大了,CPU直接从硬盘读取数据效率太低了,此外,CPU在进行运算的时候是有会产生很多临时数据的,如果CPU先把数据写到内存再写到硬盘,内存中是有回收机制的,会自动清理掉临时数据,如果直接写入硬盘,那么临时数据也会写入硬盘保存起来,要清理只能手动清理,种种原因下,CPU是不会直接写数据到硬盘的。

 虽然CPU不直接将数据写入硬盘,但是CPU,内存,硬盘之间的吞吐率还是十分不对等,于是buff和cache就发挥了作用

内存的吞吐率由几千MB/s,而硬盘(sata)的吞吐率600M/s,内存往硬盘里面写数据的时候,处在内存和硬盘之间的buff缓冲区就起到了作用,内存往外吐数据的速度是很快的,硬盘往里面写的数据是很慢的,如果直接写的话肯定是会堵塞的,假设内存往硬盘写数据的速度是6000MB/s而硬盘往里面写数据的速度是600MB/s,那么数据肯定是不能及时写入的,如果一直就这么等待写入,数据是肯定有丢失的风险的,buff缓冲区就起到了一个水池的作用,内存先将数据写入缓冲区,然后再慢慢的写入硬盘,当然buff缓冲区的容量也是有极限的,如果一个程序产生了大量的数据将缓冲区也填满了的话,那就只能等待慢慢写入了。所以buff缓冲区就在内存和硬盘之间的一个不同吞吐率起到了一个平衡作用。

cache缓存区与buff缓冲区的方向相反, 内存写入数据的速度是很快的,但是硬盘往外面吐数据的数据相对来说还是比较慢的,如果内存一直等着硬盘将程序的数据读出来,那么程序就会一直处于等待状态,程序就会处于很卡的状态,影响程序的执行效率,cache缓存就是为了解决这个问题的,将经常需要从硬盘中读出的数据提前将它放到cache缓存区里面,然后内存需要数据的时候直接从cache缓存区获取数据,这样就能降低内存载入数据的时间,从而提高程序的执行效率。

 

猜你喜欢

转载自blog.csdn.net/qq_48391148/article/details/129398374
今日推荐