缓存命中率是衡量读缓存效率和性能的一个重要指标。它和写缓存没有关系,也不反映写入性能。缓存命中率根据以下公式计算:缓存命中率 =
读取缓存 / 读取总计 * 100%。
很显然,从缓存读取的数据量越多,缓存命中率就会越高。
第一次请求读取数据时,由于此时数据尚未在缓存中,PrimoCache 会从硬盘读取数据并存入缓存中。此时,由于“读取总计”增加而“读取缓存”没有变化,命中率就会降低。因此如果 Windows 系统或程序经常请求没有读取过的新数据,那么命中率就不会太高。
当再次请求读取数据时,PrimoCache 将直接从缓存中读取,此时命中率就会提升。当然这是最理想的情况,实际上,由于缓存的存储空间总是有限的,当缓存中存满数据时,PrimoCache 会根据缓存替换算法丢弃一些旧的缓存数据,以便缓存新的数据。 此时如果系统请求读取已经丢弃的旧数据,PrimoCache 就需要重新从硬盘读取。如果发生这种情况,缓存命中率将会降低。
由上可见,要提高缓存命中率,可以增大缓存大小,因为缓存越大,可以存储的数据就越多,被丢弃的数据就越少。此外,减少缓存任务下的逻辑卷数量也有助于提升缓存命中率。一个缓存任务下的缓存空间是共享给所有逻辑卷的,因此,加速的逻辑卷越多,那么在缓存空间满的时候,任意一个逻辑卷上的数据读取都会引起旧数据丢弃,影响到其它逻辑卷的命中率。因此创建缓存任务时一般仅对需要的逻辑卷进行加速,而不是把所有逻辑卷都加入进来。如果资源足够,也可以对不同的逻辑卷创建独立的缓存任务,这样各自的缓存空间就不会相互影响。
另外,开启“预取”也有助于提高缓存命中率。由于内存缓存在掉电后数据是消失的,通过“预取”的方式可以先预读数据到内存缓存,这样当 Windows 首次请求读取数据时就可以从缓存中读取。