02—怎么理解内存中的Buffer和Cache?

02基础篇:怎么理解内存中的BufferCache

1. BufferCache区别

    在读写普通文件时,I/O 请求会首先经过文件系统,然后由文件系统负责,来与磁盘进行交互。而在读写块设备文件时,会跳过文件系统,直接与磁盘交互,也就是所谓的 I/O”这两种读写方式使用的缓存自然不同。文件系统管理的缓存,其实就是 Cache 的一部分。而裸磁盘的缓存,用的正是 Buffer

    总而言之,Buffer 是对磁盘数据的缓存,而 Cache 是文件数据的缓存,它们既会用在读请求中,也会用在写请求中。

 

2. /proc/meminfo

    proc 文件系统同时也是很多性能工具的最终数据来源。比如我们刚才看到的 free ,就是通过读取 /proc/meminfo ,得到内存的使用情况。即对 BuffersCachedSReclaimableSUnreclaim这几个指标的详细定义:

  1. Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。
  2. Cached 从磁盘读取文件的页缓存,也就是用来缓存文件的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。
  3. SReclaimable Slab 的一部分。Slab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录。

 

3. vmstat查询内存使用情况

    输出界面里, 内存部分的 buff cache ,以及 io 部分的 bi bo 就是我们要关注的重点。

  1. buff cache 就是我们前面看到的 Buffers Cache,单位是 KB
  2. bi bo 则分别表示块设备读取和写入的大小,单位为块 / 秒。因为 Linux 中块的大小是 1KB,所以这个单位也就等价于 KB/s

 

4. 缓存命中率

    所谓缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。

 

5. cachestatcachetop

    cachestat 提供了整个操作系统缓存的读写命中情况。

    cachetop 提供了每个进程的缓存命中情况。

  1. TOTAL ,表示总的 I/O 次数;
  2. MISSES ,表示缓存未命中的次数;
  3. HITS ,表示缓存命中的次数;
  4. DIRTIES 表示新增到缓存中的脏页数;
  5. BUFFERS_MB 表示 Buffers 的大小,以 MB 为单位;
  6. CACHED_MB 表示 Cache 的大小,以 MB 为单位。

    它的输出跟 top 类似,默认按照缓存的命中次数(HITS)排序,展示了每个进程的缓存命中情况。具体到每一个指标,这里的 HITSMISSES DIRTIES ,跟 cachestat 里的含义一样,分别代表间隔时间内的缓存命中次数、未命中次数以及新增到缓存中的脏页数。而 READ_HIT WRITE_HIT ,分别表示读和写的缓存命中率。

 

6. 总结

    今天,我们一起探索了内存性能中 Buffer Cache 的详细含义。Buffer Cache 分别缓存磁盘和文件系统的读写数据。

  1. 从写的角度来说,不仅可以优化磁盘和文件的写入,对应用程序也有好处,应用程序可以在数据真正落盘前,就返回去做其他工作。
  2. 从读的角度来说,既可以加速读取那些需要频繁访问的数据,也降低了频繁 I/O 对磁盘的压力。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值