内存缓存

buffer与cache

free的命令中有一栏是buff/cache,buffer和cache都是内存缓存,但是又有区别。

$ free
              total        used        free      shared  buff/cache   available
Mem:       32731868     1170284    28024100      254420     3537484    30824636
Swap:      67108860     3376124    63732736

buffer中缓存的是将要写到磁盘的数据,通过合并写的方式提高写入效率。

cache中缓存的是从磁盘读取的数据。

缓存命中率

BCC中的cachestat和cachetop分别用来查看整个系统的缓存读写命中情况、每个进程的缓存命中情况。

$ 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是总的IO次数,DIRTIES是新增到缓存中的脏页。

$ cachetop
11:58:50 Buffers MB: 258 / Cached MB: 347 / Sort: HITS / Order: ascending
PID      UID      CMD              HITS     MISSES   DIRTIES  READ_HIT%  WRITE_HIT%
   13029 root     python                  1        0        0     100.0%       0.0%

文件的缓存大小

pcstat用来查看一个文件的缓存大小:

$ pcstat /bin/ls
+---------+----------------+------------+-----------+---------+
| Name    | Size (bytes)   | Pages      | Cached    | Percent |
|---------+----------------+------------+-----------+---------|
| /bin/ls | 133792         | 33         | 0         | 000.000 |
+---------+----------------+------------+-----------+---------+

pcstat的安装方法:

$ go get golang.org/x/sys/unix
$ go get github.com/tobert/pcstat/pcstat

在测试文件读写性能的时候,要清理缓存:

$ echo 3 > /proc/sys/vm/drop_caches

参考