1. 缓存命中率

命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好。

1.1. 工具

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

    两个工具都属于 bcc 软件包,bcc-tools 需要内核版本为 4.1 或者更新的版本。

1.1.1. cachestat

  1. $ cachestat 1 3
  2. TOTAL MISSES HITS DIRTIES BUFFERS_MB CACHED_MB
  3. 2 0 2 1 17 279
  4. 2 0 2 1 17 279
  5. 2 0 2 1 17 279

这些指标从左到右依次表示:

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

    1.1.2. cachetop

    $ 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%
    
    默认按照缓存的命中次数(HITS)排序,展示了每个进程的缓存命中情况。 HITS、MISSES 和 DIRTIES ,跟 cachestat 里的含义一样,分别代表间隔时间内的缓存命中次数、未命中次数以及新增到缓存中的脏页数。而 READ_HIT 和 WRITE_HIT ,分别表示读和写的缓存命中率。

    2. 指定文件缓存

    pcstat 可以查看文件在内存中的缓存大小以及缓存比例。展示了 /bin/ls 这个文件的缓存情况:
    $ pcstat /bin/ls
    +---------+----------------+------------+-----------+---------+
    | Name    | Size (bytes)   | Pages      | Cached    | Percent |
    |---------+----------------+------------+-----------+---------|
    | /bin/ls | 133792         | 33         | 0         | 000.000 |
    +---------+----------------+------------+-----------+---------+