全栈开发
devops
【Q407】什么是 CPU 缓存,如何查看缓存命中率

什么是 CPU 缓存,如何查看缓存命中率

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 414 (opens in a new tab)

Author 回答者: edisonwd (opens in a new tab)

CPU 缓存介于 CPU 和内存之间,缓存的是热点的内存数据。这些缓存按照大小不同分为 L1、L2、L3 等三级缓存,其中 L1 和 L2 在同一个cpu核中, 而在同一个CPU插槽中的多个核共享一个 L3 缓存。

缓存命中率,即直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比。当可以直接通过缓存获取到需要的数据,则命中缓存;否则需要从磁盘等地方读取获取数据。缓存命中率越高,表示直接从缓存获取数据的次数越多,程序执行效率越高。 使用cachestat 可以查看整个个操作系统缓存的读写命中情况: cachestat安装方式: sudo apt install perf-tools-unstable

下面以1秒间隔输出三组缓存信息:

$ sudo cachestat 1
Counting cache functions... Output every 1 seconds.
    HITS   MISSES  DIRTIES    RATIO   BUFFERS_MB   CACHE_MB
    1989        0       13   100.0%          501       2600
   12969        0     1412   100.0%          501       2600
   16798        0     2803   100.0%          501       2600

从结果可以看到,HITS 是缓存命中的次数;MISSES是缓存未命中的次数;DIRTIES是表示新增到缓存中的脏页数;BUFFERS_MB 表示 Buffers 的大小,单位为MB;CACHED_MB表示Cache 的大小,单位为MB。