服务器其它

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 服务器其它 > SPDK学习教程

SPDK安装、配置、编译、使用学习教程

投稿:yin

SPDK(Storage Performance Development Kit)提供了一整套工具和库,以实现高性能、扩展性强、全用户态的存储应用程序,本文将详细介绍SPDK教程的各个方面,包括安装、环境配置、样例程序、编译以及使用,通过阅读本文,您可以深入了解SPDK,并使用它开发高性能存储应用程序

SPDK(Storage Performance Development Kit)提供了一整套工具和库,以实现高性能、扩展性强、全用户态的存储应用程序。本文将详细介绍SPDK教程的各个方面,包括安装、环境配置、样例程序、编译以及使用。通过阅读本文,您可以深入了解SPDK,并使用它开发高性能存储应用程序。

什么是SPDK

SPDK 存储性能开发套件(Storage Performance Development Kit ) —— 针对于支持nvme协议的SSD设备。 SPDK是一种高性能的解决方案。

Intel发布的,提供了一整套工具和库,以实现高性能、扩展性强、全用户态的存储应用程序。它是继DPDK之后,intel在存储领域推出的又一项颠覆性技术,旨在大幅缩减存储IO栈的软件开销,从而提升存储性能,可以说它就是为了存储性能而生。

为什么要引入SPDK?

因为nvme已经快到一定程度了,很多东西,尤其是软件已经赶不上他了,此时软件反而成为了系统IO的瓶颈。

通俗的讲,以前的HDD 是一个磁头工作,一个CPU伺候它就行,现在的nvme SSD盘 跟内存一样可以并行读写,可以多个CPU同时读写,可以理解成多个”磁头“同时工作。以前那套针对"单磁头"软件还没适配过来落后了,就需要新的软件架构,SPDK就来了。

安装SPDK

您需要在Linux系统上安装SPDK才能开始使用它。以下是安装SPDK的步骤:

$ git clone https://github.com/spdk/spdk.git
$ cd spdk
$ ./scripts/pkgdep.sh
$ make 
    

通过以上步骤,您可以在本地克隆SPDK的源代码,并在系统中构建SPDK。构建完成后,您需要设置DPDK环境以及下一步可以用到的环境变量。

环境配置

在您开始使用SPDK之前,需要配置一些环境变量和DPDK。以下是环境配置的过程:

$ export DPDK_DIR=/path/to/your/dpdk 
$ export SPDK_DIR=/path/to/your/spdk 
$ export PATH=$SPDK_DIR/bin:$PATH
$ export LD_LIBRARY_PATH=$SPDK_DIR/lib:$LD_LIBRARY_PATH
    

您需要将上述环境变量根据您的系统进行修改。然后,就可以开始使用SPDK来开发高性能存储应用程序。

SPDK样例程序

SPDK的样例程序可以帮助您快速上手。这些样例程序包括hello_world、blobstore、nvme等。下面,我们来使用blobstore样例说明如何编译和运行SPDK程序。

1、编译blobstore示例:

$ cd $SPDK_DIR/examples/blobstore
$ make 
    

编译结束后,可以看到在examples/blobstore/build目录中生成了blobstore的可执行文件。

2、运行blobstore示例:

$ sudo ./build/blobstore/bstore -c /path/to/config/file
    

blobstore示例现在可以使用了。您可以根据具体的业务场景修改代码,以开发适合自己的存储应用程序。

编写SPDK程序

SPDK提供了大量的API供开发人员使用,下面我们以创建一个基于SPDK的简单存储例程为例:

#include "spdk/stdinc.h"
#include "spdk/event.h"
#include "spdk/env.h"
#include "spdk/blob.h"
static char g_bs_name[64] = "my_bs";
static char g_file_name[128] = "/path/to/my_bs.blob";
static uint64_t g_blob_size = 1024 * 1024 * 32;
static void
create_bs_complete(void *arg, struct spdk_blob_store *bs, int bserrno)
{
    if (bserrno) {
        printf("blobstore creation failed\n");
        exit(1);
    }
    printf("blobstore %s created successfully\n", g_bs_name);
    spdk_bs_close(bs, NULL, NULL);
}
static void
spdk_create_bs(void)
{
    /* create the blobstore and invoke callback */
    spdk_bs_init(g_file_name, NULL, create_bs_complete, NULL);
}
static void
spdk_app_start(void *arg1, void *arg2)
{
    spdk_create_bs();
}
int
main(int argc, char **argv)
{
    /* initialize the framework */
    spdk_env_opts_init();
    spdk_env_init(NULL);
    /* start the framework */
    spdk_event_call(spdk_event_allocate(0, spdk_app_start, NULL, NULL));
    spdk_app_start(NULL, NULL);
    /* stop the framework */
    spdk_env_cleanup();
}
    

该例程调用了SPDK的API,创建了一个名为my_bs的Blob存储,并将其保存至指定的文件路径。您可以根据该例程进行开发,创建更为复杂的存储应用程序。

到此这篇关于SPDK安装、配置、编译、使用学习教程的文章就介绍到这了,更多相关SPDK学习教程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

阅读全文