缓存助力存储加速–OCF与SPDK介绍及用法

作者简介:惠春阳,Intel 软件工程师,主要从事spdk,isa-l开发和存储软件性能优化的工作。

缓存助力存储加速

随着用户对存储速度的要求越来越高,市面上出现了很多高速,超高速的存储设备,比如借助Intel® Optane技术实现的NVDIMM, NVMe SSD等。然而,受限于成本因素,这类高速设备目前并没有大量普及,数据中心依然被SATA SSD甚至HDD占据。SPDK 在 19.01 的release中,引入了新的bdev模块OCF(全称:Open CAS Framework),可以充分利用高速介质(内存,Optane SSD,NVMe SSD等)为其他已有的bdev提供缓存服务来提高吞吐量。

OCF是Intel® CAS (Intel® Cache Acceleration Software) 的开源版本, 要了解OCF就要先从CAS讲起。

OCF与SPDK介绍及用法

1、什么是CAS?

CAS是 Intel® 通过I/O分类和在高速介质上缓存经常使用的数据来加速存储性能而开发的企业级软件解决方案。支持Linux和Windows平台。CAS通过加载到kernel的方式,将一块高速盘和慢速盘“融合”为一块盘,像其他的物理盘一样,挂载到文件系统上。因此不需要对系统或应用做任何修改就可以使用,可以认为CAS运行在内核态。

CAS 通过和内存的交互管理建立多层次的缓存,来优化系统内存的使用,同时也能够自动根据数据本身特性去确定最好的缓存分配。CAS 目前已经在业界广泛使用,能够以很小的额外成本,显著提升I/O性能。
CAS 引入了很多术语,在后面的介绍中都会用到。首先,我们把大容量,慢速的存储设备称为core device, 在上图中可以认为HDD就是core device. 然后把小容量,高速的存储设备称为cache device。
CAS提供了五种工作模式:

(1)Write-Through(WT):
I/O在写到cache device的同时,也会直接write-through到后端的core device。WT模式保证了数据在core device和cache device总是同步的,因此不用担心突然掉电造成的缓存数据丢失。因为每次数据依然要写到慢速的后端设备,所以这个模式只能够加速数据读取的过程.

(2)Write-Back (WB):
I/O写时,数据首先写到cache device,然后就会告诉应用写完毕。这些写操作会周期性的写回到core device。这里CAS可以选择不同的cleaning policy。比如ALRU(Approximately Least Recently Used),ACP(Aggressive Cleaning Policy)或者 NOP(No Operation,即不自动写回,而由用户主动的做flush操作)。因此,WB模式能够既加速读操作,又加速写操作。但是也会有突然掉电造成缓存数据没有及时写回到core device而导致数据丢失的情况。

(3)Write-Around (WA):
讲这个模式之前,先介绍一下缓存污染(cache pollution)。首先我们要知道cache device和core device其实是通过cache line和core line的mapping确定对应关系的。缓存污染表示很多不常用的数据被缓存到了cache device中。那么在后面新的写I/O的情况下,没有空闲的cache line,没有足够的空间去做mapping,此时需要逐出(evict)某条对应的cache line mapping,这就造成了额外的开销。

WA模式有点类似于WT模式,不同的是,写操作只有在cache line有对应的core line的情况下(即这部分数据已经被读缓存过)会同时更新cache device和core device。其他情况,则直接写到core device。因此WA模式也只能加速读操作,并且保证了数据的一致性。而且还能避免缓存污染这样的情况。

(4)Write-Invalidate(WI)
在这个模式中,只有读操作会被map到缓存中。对于写操作,会直接写入到core device,同时,如果有对应的cache line在缓存中,就让这条cache line变为无效。WI模式对于读密集型I/O有更好的加速作用。并且能够减少缓存的evict操作。

(5)Pass-Through (PT)
很好理解,PT模式即所有IO直接绕过cache device直接和core device交互。

2、 OCF 以及 SPDK

CAS 相当于企业版的OCF library + Linux Adapter。OCF 其实就是CAS 的cache engine的开源库。

SPDK在v19.01中提供了SPDK Adapter, 整合了OCF。

OCF 在SPDK中作为一个新的 virtual bdev, 可以用不同的其他bdev作为core device和cache device。

3、OCF的配置和测试

讲了这么多,我们来实战一下。使用SPDK提供的fio-plugin来测试一下OCF能够为你的慢速盘带来多少活力。

(1)创建一个OCF vbdev。(首先,编译SPDK)

接下来,更新配置文件。OCF要求使用两个bdev作为base bdev。OCF要使用的bdev也应出现在配置文件中。比如我们使用一个AIO设备和一个NVMe设备。我们可以使用example/bdev/fio_plugin 中的bdev.conf.in 作为配置文件。

(2)fio测试
(更新example/bdev/fio_plugin 中的example_config.fio)

最后,我们需要明白的是,对于缓存配置的优化也是一个需要花费时间和精力的事情。对于不同的负载,不同的介质,不同的缓存大小,都可能对性能产生影响。

4、贡献

SPDK作为一个日趋成熟的开源社区,正在以自己的影响力,带动越来越多的Intel®或者第三方项目加入开源软件的行列。而OCF就是这其中踊跃的参与者。我们始终欢迎越来越多的开发者加入进来,为开源存储的发展贡献力量。

欢迎访问OCF 官方网站:
https://open-cas.github.io 以获得更加详细的文档和资料。
也欢迎向OCF代码库:
https://github.com/Open-CAS/ocf 贡献代码。

References:
[1]https://www.Intel®.com/content/www/us/en/software/Intel®-cache-acceleration- software-performance.html
[2] https://open-cas.github.io/index.html
[3] https://spdk.io/news/2019/04/24/summit_presentations/

文章转载自DPDK与SPDK开源社区


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/23341.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于19-06-24
0