ZFS源代码之旅——ARC模块分析

0. 背景介绍

ARC(Adaptive Replacement Cache)是ZFS的磁盘缓存,它位于DMU模块和SPA层之间,是一个虚拟块层,这种层次可以让一个文件系统和它的快照与克隆共同使用缓存的数据。从下图我们可以看出ARC在整个ZFS文件系统结构中的位置。

本文接下来的内容首先会介绍磁盘缓存在整个文件系统中的作用,接着简单的介绍采用LRU策略缓存的实现,最后,再详细介绍ZFS使用的ARC缓存原理以及它的具体实现。


1. 磁盘缓存

当两个不同速度的设备需要协同工作时,总会出现速度较快的设备等待速度较慢的设备的情况。此时,两个设备的总吞吐量便由较慢的设备决定,即为慢速设备的吞吐量。为了解决这个问题,系统设计者通常在两个设备之间加入一个缓存设备(cache),来减少访问慢速设备的代价。

缓存设备通过提供对慢速设备上的数据的快速访问来减少访问慢速设备的时间,通常缓存的速度和快速设备相当,而容量远小于慢速设备,因此在一个时刻,缓存中只能保存部分慢速设备中的数据,这就需要我们来决定该将哪些数据保存于缓存设备上。

对于计算机系统来说,由于磁盘的速度相对于计算机其他组件的速度太慢,所以很多时候它都是计算机的瓶颈。为了解决该问题,通常的做法是在内存中分配一块空间,用来做磁盘设备的缓存。该缓存中会存放系统中近期使用的数据块,即,缓存中的数据是磁盘上热数据的一份拷贝。根据计算机程序的局部性原理,再加上预读、延迟写等一系列技术,可以大大提高系统访问磁盘数据的性能。

磁盘缓存对于上层来说是透明的。上层的读写请求会转化为对磁盘块的读写请求,这是,当要读写的磁盘块在磁盘缓存中时,则直接对磁盘缓存进行操作,这样可以大大加快程序的响应时间。而若要读写的磁盘块不在磁盘缓存中时,系统会去磁盘上读取数据,再返回用户的响应,同时将数据放入磁盘缓存中,期望很快程序会再次读写该数据块。当上层请求的数据在缓存中时,成为缓存命中,缓存的命中率也是一个缓存实现的重要指标。

管理缓存最主要的工作有两个:

1、应该将哪些数据块放在缓存之中;

2、当缓存已满时,应该将哪些块

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值