SPDK从去年7月(20.07 release)开始,开始发布SPDK 加速框架(SPDK acceleration framework)的模块,这个模块可以对支持内存操作卸载的硬件(诸如I/OAT或者DSA)进行抽象和封装,使得上层软件层可以简便的使用,从而卸载CPU的一些工作量。
图1给出了SPDK 加速框架(Acceleration Framework)的抽象图,主要分为以下几个部分:
1. 抽象层:
提供统一的API接口。SPDK的Acceleration Framework 主要支持以下几种的内存加速操作:
一些常用的API 包括spdk_accel_batch_prep_crc32c,spdk_accel_submit_copy等。目前代码位于如下的位置:
图 1 SPDK Acceleration Framework的
抽象和现状
2. 具体实现层:
代码位于和module/accel。其中主要实现了怎么使用各个不同的硬件设备,比如图1中的IOAT和IDXD模块。
a. module/accel/ioat: 这个目录中的代码主要实现了怎么管理,加载使用CBDMA (Crystal Beach DMA) 设备。SPDK用户态IOAT代码的具体实现位于SPDK repo的lib/ioat中。
b. module/accel/idxd: 这个目录中的代码主要实现了怎么管理,加载使用DSA(Data Streaming Accelerator)设备。当然对于这个设备在SPDK中可以有两种模式可以使用:
(1) 即加载SPDK 自己实现的用户态驱动;
(2) 使用kernel idxd 驱动。目前相应的代码实现位于SPDK repo的lib/idxd中。
此外,我们稍微介绍一下IDXD module的管理,如图2所示。首先无论是使用内核还是用户态的IDXD的驱动,SPDK对外都提供统一的接口,代码位于include/spdk/idxd.h。IDXD的管理可以分为管理的API (management API) 和数据面相关的API (Data I/O相关的API) 。
管理的API主要功能上是DSA设备的attach, detach, Work queue 配置等相关的操作;DATA I/O API则是一些内存加速操作卸载的API,诸如copy,crc32c,fill等的卸载。然后我们还定义了transport的抽象,使用内核或者用户态驱动去使用DSA设备,总有自己的一些初始化,销毁或者使用的方法。这样就可以完全把每个驱动使用的细节对上层用户隐藏起来。
图 2 SPDK IDXD 驱动管理
有了SPDK加速框架,具体的SPDK应用包括SPDK内部的各个模块可以直接调用这个框架,而不必关心底层的不同加速硬件的具体实现。这样提高了易用性。
由于SPDK 整个编程框架的思想是异步(asynchronous),所以SPDK加速库所提供的API 都是异步接口。也就是用户调用了这个函数,并不是相应的内存加速操作直接完成了。只有当用户提供的回调函数被执行的时候,才是这个操作真正完成的时候。所以在使用SPDK加速框架的API的时候,在应用集成的时候,需要把用同步方法使用的内存操作,完成替换成异步的模式,这个需要一定的代码修改。
目前SPDK的加速框架在SPDK 各个模块的集成,主要涉及到以下几个模块:
1. 在SPDK bdev中的使用。比如目前在SPDK malloc bdev中,使用了加速框架的ACCEL_COPY的API (spdk_accel_submit_copy)。比如在SPDK nvme bdev模块中,使用了加速框架的ACCEL_CRC32相关的API (spdk_accel_submit_crc32cv),主要用于crc32c计算的卸载。
2. 在SPDK nvmf中的使用。主要使用在NVMe-oF target的TCP transport中,集成了加速框架的ACCEL_CRC32相关的API (spdk_accel_submit_crc32cv),主要用于NVMe-oF TCP PDU的crc32c计算的卸载。
3. SPDK提供的accel_perf 程序。为了更好展示出SPDK加速框架的使用方法,以及展示一些性能。SPDK library 开发了accel_perf这个工具,代码位于examples/accel/perf中。SPDK 用户可以使用这个工具进行一些测试,并且根据这个应用,构建自己的内存加速的一些解决方案。以下命令给出了accel_perf进行crc32c测试的一个用例。
build/examples/accel_perf -q 128 -o 4096 -t 2 -w crc32c -y
目前这些模块的集成和使用仅仅是一个开始,SPDK项目会不断的进行新的集成和优化。
总结和后续
这篇文章中主要介绍了 SPDK 中的加速框架(acceleration Framework)以及相关的使用场景。目前这个加速框架的开发在不断的更新和完善中。
原文链接:https://blog.csdn.net/weixin_37097605/article/details/119922627
更多DPDK学习资料有需要的可以自行添加进入学习交流君 羊 793599096 免费获取,或自行报名学习,免费订阅,永久学习,关注我持续更新哦!!!
学习地址:http://ke.qq.com/course/5066203?flowToken=1043717