一 SPDK简介
SPDK是intel公司为NVME ssd硬件开发的一套用于加速硬件性能的一款开发套件,支持不同层面的lib库,包括nvme ssd driver、ioat、bdev等。
二 源码目录
- app
- app/iscsi_tgt: iscsi target
- app/nvmf_tgt: NVMe-oF target
- app/iscsi_top:iscsi top工具 类似于linux top,用来监控iscsi
- app/trace:iscsi target和nvme-of target trace工具
- app/vhost:将virtio控制器呈现给基于qemu的虚拟机,并对IO进行处理
- build
- doc:spdk 下的doc文件
- dpdk:spdk调用了dpdk的很多基础库
- etc:各类型使用方式的基本配置
- examples:示例代码
- lib:开发库
- mk:makefile文件
- scripts:脚本及环境配置相关
test:各模块功能性能测试
三 示例代码
本文主要从hello_world代码开始,分析应用如何使用nvme ssd设备,hello_world代码利用ssd存储数据并读出。
int main(int argc, char **argv){
int rc;
struct spdk_env_opts opts;
spdk_env_opts_init(&opts);
opts.name = "hello_world";
opts.shm_id = 0;
if (spdk_env_init(&opts) < 0) {
//前半部分代码主要都是用来初始化spdk环境及配置基本项
fprintf(stderr, "Unable to initialize SPDK env\n");
return 1;
}
printf("Initializing NVMe Controllers\n");
rc = spdk_nvme_probe(NULL, NULL, probe_cb, attach_cb, NULL);//调用接口将机器内的nvme ssd加入列表
if (rc != 0) {
fprintf(stderr, "spdk_nvme_probe() failed\n");
cleanup();
return 1;
}
if (g_controllers == NULL) {
fprintf(stderr, "no NVMe controllers found\n");
cleanup();
return 1;
}