38

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

 4 years ago
source link: https://www.sdnlab.com/23341.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者简介:惠春阳,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讲起。

000.jpg

OCF与SPDK介绍及用法

1、什么是CAS?

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

dpdk001-.png

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的开源库。

dpdk002.jpg

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

dpdk003.jpg

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

dpdk004.jpg

3、OCF的配置和测试

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

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

Java
./configure --with-fio=/path/to/fio/ --with-ocf make NRHUGE=10240 ./scripts/setup.sh
1
2
3
./configure--with-fio=/path/to/fio/--with-ocf
make
NRHUGE=10240./scripts/setup.sh

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

Java
[Nvme] TransportID "trtype:PCIe traddr:0000:81:00.0" Nvme0 #Split Nvme0 to 2 10GB pieces, leaving the rest inaccessible [Split] Split Nvme0n1 2 10240 [AIO] AIO /dev/sdb AIO0 [OCF] OCF wb_test wb Nvme0n1p1 AIO0
1
2
3
4
5
6
7
8
9
10
11
12
[Nvme]
  TransportID"trtype:PCIe traddr:0000:81:00.0"Nvme0
#Split Nvme0 to210GBpieces,leaving the rest inaccessible
[Split]
  Split Nvme0n1210240
[AIO]
  AIO/dev/sdb AIO0
[OCF]
OCF wb_test wb Nvme0n1p1 AIO0

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

Java
[global] ioengine=path/to/spdk/examples/bdev/fio_plugin/fio_plugin spdk_conf=path/to/spdk/examples/bdev/fio_plugin/bdev.conf.in thread=1 group_reporting=1 direct=1 verify=0 time_based=1 ramp_time=60 runtime=300 iodepth=128 rw=randrw bs=4k 更新过后,就可以启动fio测试了。 fio example_config.fio--filename=wb_test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[global]
ioengine=path/to/spdk/examples/bdev/fio_plugin/fio_plugin
spdk_conf=path/to/spdk/examples/bdev/fio_plugin/bdev.conf.in
thread=1
group_reporting=1
direct=1
verify=0
time_based=1
ramp_time=60
runtime=300
iodepth=128
rw=randrw
bs=4k
更新过后,就可以启动fio测试了。
fio example_config.fio--filename=wb_test

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

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开源社区


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK