linux buffer 与 cache 的区别

来源:互联网 发布:程序员的数学 线性代数 编辑:程序博客网 时间:2024/05/22 10:48
2017直通软考,拿证无忧    程序员简历优化指南!      程序员1月书讯   云端应用征文大赛,秀绝招,赢无人机!

linux buffer 与 cache 的区别

2876人阅读 评论(0)收藏举报
本文章已收录于:
分类:
作者同类文章X
    linux buffer 与 cache 的区别。
    A buffer is something that has yet to be "written" to disk.
    A cache is something that has been "read" from the disk and stored for later use.
    两者都是RAM中的数据。简单来说,buffer(缓冲)是即将要被写入磁盘的,而cache(缓存)是被从磁盘中读出来的

    缓冲(buffers)
    缓冲区,一个用于存储速度不同步的设备或优先级不同的设备之间传输数据
    的区域。通过缓冲区,可以使进程之间的相互等待变少,从而使从速度慢的设备读入数据 时,
    速度快的设备的操作进程不发生间断

    是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写磁盘),也可以通过sync命令手动清空缓冲。举个例子吧:我这里有一个ext2的U盘,我往里面cp一个3M的 MP3,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等上几秒钟。

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

    其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有 内存可用。
    如果你希望手动去释放Cache Memory也是可以的

    如何手工释放Cache Memory(缓存内存), 用下面的命令可以释放Cache Memory:
    To free pagecache
         $sync; echo 1>/proc/sys/vm/drop_caches
    To free dentries and inodes:  
         $sync; echo 2>/proc/sys/vm/drop_caches
    To free pagecache, dentries and inodes:
         $sync; echo 3>/proc/sys/vm/drop_caches
    注意,释放前最好sync一下,防止丢失数据。

    2. 解释 free 命令
    free命令中的buffer和cache:(它们都是占用内存):
           buffer : 作为buffer cache的内存,是块设备的读写缓冲区
           cache: 作为page cache的内存, 文件系统的cache


    #这个命令行用来调查谁在加数据入page_cache
    [root@my031045 ~]# stap -e 'probe vfs.add_to_page_cache {printf("dev=%d, devname=%s, ino=%d, index=%d, nrpages=%d/n", dev, devname, ino, index, nrpages )}'
    ...
    dev=2, devname=N/A, ino=0, index=2975, nrpages=1777


      $ free

          total                used                 free                   shared               buffers             cached  
    Mem: 255268               238332               16936                       0               85540               126384
    -/+ buffers/cache:        26408                228860
    Swap: 265000              0                    265000

      Mem:表示物理内存统计

      -/+ buffers/cached:表示物理内存的缓存统计
      Swap:表示硬盘上交换分区的使用情况,这里我们不去关心。
      系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并不是第一行free 标记的 16936Kb,它仅代表未被分配的内存。
      我们使用total1、used1、free1、used2、free2 等名称来代表上面统计数据的各值,1、2 分别代表第一行和第二行的数据。
      total1:表示物理内存总量。
      used1:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
      free1:未被分配的内存。
      shared1:共享内存,一般系统不会用到,这里也不讨论。
      buffers1:系统分配但未被使用的buffers 数量。
      cached1:系统分配但未被使用的cache 数量。buffer 与cache 的区别见后面。
      used2:实际使用的buffers 与cache 总量,也是实际使用的内存总量。
      free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。

      可以整理出如下等式:
      total1 = used1 + free1
        total1 = used2 + free2
        used1 = buffers1 + cached1 + used2
        free2 = buffers1 + cached1 + free1
    可见,used2 是真正使用的, 比used1 小, used1 包含分配但未使用内存。
          free2 是真正可使用的。比free1 大,free1 未包含分配但未使用内存
    实验:
    读程序  看cache 会越来越大
    写程序  看buffer 会越来越大


    0
    0
     
     

    我的同类文章

    http://blog.csdn.net
    • 创建, 读取,修改img文件 (以ext4 为例)2016-11-23
    • minix 文件系统学习.2016-08-25
    • linux 下 软raid 操作实例。2013-11-07
    • 杂项2013-10-12
    • 设计一个新文件系统。2013-09-04
    • 最简单的elf文件分析2016-09-26
    • elf 格式快速掌握2015-01-18
    • reiser4progs 的 configure 问题及解决方法。2013-11-06
    • romfs 文件系统学习2013-09-27

    参考知识库

    img

    Linux知识库

    更多资料请参考:
    猜你在找
    Linux操作系统及常用命令实战和进阶
    Linux操作系统及常用基础命令深入讲解
    2016高薪Linux培训教程-系统组成、文件系统及基础命令
    红帽Linux系统企业内部实训
    Linux根文件系统-file system详解
    linux cache buffer区别
    Linux系统下buffer内存与cache内存的区别
    linux 内存中buffer 和cache 的区别
    linux内存中buffer与cache的区别
    Linux内存buffer和cache的区别
    关闭
    查看评论

      暂无评论

    发表评论
    • 用 户 名:
    • yuanxiaoggang2014
    • 评论内容:
    • 插入代码
      HTML/XMLobjective-cDelphiRubyPHPC#C++JavaScriptVisual BasicPythonJavaCSSSQL其它
        
    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    快速回复TOP
    核心技术类目
    全部主题HadoopAWS移动游戏JavaAndroidiOSSwift智能硬件DockerOpenStackVPNSparkERPIE10EclipseCRMJavaScript数据库UbuntuNFCWAPjQueryBIHTML5SpringApache.NETAPIHTMLSDKIISFedoraXMLLBSUnitySplashtopUMLcomponentsWindows MobileRailsQEMUKDECassandraCloudStackFTCcoremailOPhoneCouchBase云计算iOS6RackspaceWeb AppSpringSideMaemoCompuware大数据aptechPerlTornadoRubyHibernateThinkPHPHBasePureSolrAngularCloud FoundryRedisScalaDjangoBootstrap
    0 0
    原创粉丝点击