Buffer和Cache对系统性能有很大影响,在软件开发的过程中,也可以利用这一点,来优化I/O的性能,提生应用程序的运行效率。
缓存命中率
想利用缓存来提升程序的运行效率,应该怎么评估这个效果尼?换句话书,有没有那个指标可以衡量缓存使用的好坏?
缓存的命中率。所谓缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。
命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。
实际上,缓存是现在所有高并发系统必需的核心模块,主要作用就是把经常访问的数据(也就是热点数据),提前读入到内存中。这样,下次访问时就可以直接从内存读取数据,而不需要经过硬盘,从而加快应用程序的响应速度。
这些独立的缓存模块通常会提供查询接口,方便我们随时查看缓存的命中情况。不过Linux系统中并没有直接提供这些接口,有两个工具,cachestat和cachetop,他们正是查看系统缓存命中情况的工具。
- cachestat 提供了整个操作系统缓存的读写命中情况。
- cachetop 提供了每个进程的缓存命中情况。
这两个工具都是bcc软件包的一部分,他们基于Linux内核的eBPF机制,来跟踪内核中管理的缓存,并输出缓存的使用和命中情况。
查看工具的使用配置
cachestat 以1秒的而时间间隔,输出了3组缓存统计数据:
root@VM-4-9-ubuntu:~# cachestat 1 3
TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB
2 0 2 1 17 279
2 0 2 1 17 279
2 0 2 1 17 279
指标从左到右依次表示:
- TOTAL 表示总的I/O次数;
- MISSES 表示未命中的次数;
- HITS 表示命中的次数;
- DIRTIES 表示新增到缓存中的脏页数;
- BUFFERS_MB 表示Buff