cache与buffer解读


cache出现的原因与功能 计算机硬件中CPU、内存、磁盘是最主要的三大部分,其中,CPU发展到今天,执行速度最快,而内存相对CPU而言,就慢多了,CPU执行的指令是从内存取出的,计算的结果也要写回内存,但内存的响应速度如果跟不上CPU的话,CPU只能无所事事的等待了。这样一来,再快的CPU也发挥不了效率。

同理,内存中的数据也要回写到磁盘的,相对于机械硬盘HDD,内存的速度可快多了。这就又出现了问题,磁盘的低速读写速度,相比内存条的二进制电压变化速度,那就是蒸汽机和火箭速度的差别。这样巨大差异,即使内存读写速度再快,还是要被磁盘的低速读写拖后腿。

可以看到CPU,内存,磁盘读写速度都是不同的。

假设有两个需要交互的设备A和B,a用来交互的接口速率假设为1000m/s,b用来交互的速率为500m/s,这会出现两种情况。

a从b当中取1000m的文件,结果就需要2s,对于a来说本来1s就要完成的工作,但是还需要额外的等待1s,等待b取出剩余500m的空闲时间内,这个a只能无所事事什么都干不了,这是一种情况。

第二种情况就是a给b一个1000m的文件,它的结果也是需要2s,对于a来说本来也是需要1s来完成的工作却由于b的接受速度太慢,1s内只能接受500m,那么剩下的500m还得等剩下的1s读取,这样a又浪费1s的时间什么也干不了。

产生这样的结果主要是因为b跟不上a的脚步。

可以在a和b之间加一个区域,加了一个cd这样的区域,这样能够跟上a的脚步,也能够照顾b的感受。其实就是在cd上加两个交互的接口,一个是c接口,一个是d接口。c接口的速率是接近于c设备的,d接口的速率接近于d设备。

所谓Cache,就是“为了弥补高速设备和低速设备之间的矛盾”而设立的一个中间层。因为在现实里经常出现高速设备要和低速设备打交道,结果被低速设备拖后腿的情况。

buffer出现的原因以及与cached的比较


buffer,它存在的目的适用于速度快的设备往速度慢的设备输出东西。例如内存的数据要写到磁盘,cpu寄存器里的数据写到内存。缓冲(buffers)是根据磁盘的读写设计的,它把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。

总结:

1)、cached是cpu与内存间的,buffer是内存与磁盘间的,都是为了解决速度不对等的问题

2)缓存(cached)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘。

3)buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的

4)在应用场景上,buffer是由各种进程分配的,被用在如输入队列等方面。

Linux内存管理中page cache与buffer cache机制


下面我们结合cpu、内存、磁盘IO来看一下这种读、写缓存模型,如右图所示:

从图中可以看出,有读、写两条线。磁盘数据会被读取到Page cache进行缓存,程序要读取数据的时候,可以直接从Page cache读取,这是读取数据的一条线路。

此外,当page cache的数据需要刷新时,page cache中的数据会交给buffer cache,而Buffer cache中的所有数据都会定时刷新到磁盘。这些写入数据的另一条线。

page cache是文件系统层面的缓存,它从磁盘里面读取的内容都会存储在这里,这样应用程序在读取磁盘的内容就会非常的快,因为直接从pagecahce里面读取就行了,比如通过find命令查找某些文件,某些内容的时候,第一次查找的速度比较慢,第二次执行的时候瞬间就完成了,原因就是查找的文件都被缓存到pagecahce里面去了,再次查找就从内存里面读取这些文件,这样速度就会快很多。

buffer其实是磁盘和块设备的一个缓冲,这部分内存数据是最终要写入到磁盘的,不是及时写入磁盘的,它是等系统空闲或者buffer达到了一定大小的时候,统一写到磁盘当中的,所以系统断电的时候这部分数据可能会丢失。所以为了防止数据的丢失,在关机的时候多执行几次sync的命令,这样做的就是立刻将buffer中数据写入磁盘,操作系统也有定时同步的机制,它也会定时的去执行sync命令将内存 buffer/cahce数据刷到磁盘。

pagecache示例


示例 应用程序读取数据 

现在有个python脚本,比较简单

执行之前先清空缓存,再执行两次脚本

第一次1.162,第二次0.046,这就是pagecahe的功能,因为第一次执行没有pagecahe缓存到page cache里面,所以时间就比较长,第二次执行因为数据缓存到pagecache里面了,那么再次执行从pagecache里面读取数据。

示例 打开文件

可以打开一个文件,文件里面的内容就被缓存到pagecache里面了,所以可以看到cache增加了。(缓存具体文件的内容)

示例 块设备内容

可以看到缓存的是块设备的内容,将块设备的内容,缓存到buffer里面去。

cache与buffer解读


free命令中buffers和cached的解读 先看一张图:

Linux是最大限度的将物理内存映射到缓存,待需要使用内存的时候,可以以最快的速度获取内存并使用,在available和buff/cache两列值的对比,可以看出,available是在buff/cache基础上减去了shared以及buffer内存损耗剩下的内存资源,这部分内存资源可以留给应用程序使用。所以查看内存是否充足,只需要关注available一列即可。

Linux buffer/cache解读相关推荐

  1. linux buffer cache 过高_你真的理解Linux的内存监控吗?

    如果你平时工作使用Windows系统,对Windows的内存监控应该不陌生,在"任务管理器"中显示90%的内存占用,这些内存就全部由进程占用了,如果这时产生了新的进程,没有内存可用 ...

  2. Linux buffer/cache 内存占用过高的原因以及解决办法

    表现现象 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个 CoreOS 的系统上,free命令的显示内容大概是这样一个状态: core@localhost ~ $ free ...

  3. Linux buffer/cache异同

    buffers与cached 1).异同点 在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序:当需要往文件中 ...

  4. linux buffer cache 过高_怎么理解内存中的Buffer和Cache?

    1|0缓存 从 free 命令可以看到,缓存其实就是 Buffer 和 Cache 两部分的总和 字面意思,Buffer 是缓存区,Cache 是缓存,两者都是数据再内存中的临时存储 2|0Buffe ...

  5. linux buffer cache 过高_工作中经常用的linux命令 free

    free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区,不带参数默认将会以kb单位展示 CentOS 7.6上显示如下 free -m 以M为单位显示 total:表 ...

  6. linux cache buffer区别,Linux buffer/cache异同

    buffers与cached 1).异同点 在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序:当需要往文件中 ...

  7. linux buffer/cache手动释放

    内存使用情况 [root@tst-yangsq2-2 ~]# free -htotal used free shared buff/cache available Mem: 7.6G 1.0G 1.2 ...

  8. Linux系统中的Page cache和Buffer cache

    Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...

  9. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

最新文章

  1. 移动端python开发_python前端之移动端库、框架及自动化和优化
  2. ストアドプロシージャ(存储过程)
  3. 如何设置wiki权限
  4. centos服务器解决vsftp连接时的“550 Create directory operation failed.”错误
  5. mysql join子查询_MySQL的多表join中,子查询伤不起啊!
  6. 《ERP原理》期末复习——第一章 初识ERP(企业资源计划)
  7. Eclipse主题插件之Darkest Dark Theme with DevStyle
  8. 手写SSH2服务器连接池
  9. 信息通信网络机务员三级(高级)复习知识点
  10. AI留给教练的时间已经不多了
  11. jar包+注册码 破解Jetbrains IDEA 2017.2.1版本
  12. 华脉智联电力行业技术解决方案
  13. perl里嵌套shell命令转义符_Linux-包教包会系列之-shell
  14. 惯性技术【力学基础】
  15. 云计算大行其道 变革传统IT服务
  16. 背包问题的搜索解法(转自冰尘碎雨)
  17. Windows XP 下如何播放蓝光ISO镜像?Windows XP UDF 2.5 补丁下载!
  18. 未来视频会议技术发展趋势
  19. 解决WARNING: Error loading config file: /home/kang/.docker/config.json: stat /home/kang/.docker/conf
  20. oracle rac通讯,连接Oracle RAC 的tnsname.ora设置

热门文章

  1. idea 点,不提示方法
  2. 第六章、Zigbee模块组网实例
  3. clickhouse doris 实时OLAP数据库的对比与选型
  4. ppt编辑器android,AndrOffice editor DOC XLS PPT
  5. 这次我们来到了上上届世界杯主办城市|全时南非“巡礼”
  6. 任何计算机病毒一定会有清楚的办法,计算机病毒及其防治等级考试练习题
  7. 【网站备案】2019年以后的阿里云备案以及公安备案流程最佳实践(详细)
  8. 免秘登陆linux_linux 免密登陆(超简单)
  9. 联想+A916+原版官方稳定精简ROM
  10. Unity第三方库Procedural Circular Health Bar的核心组件添加到Image(UGUI)中时不能正确在Game窗口显示(显示色块)