以下是在 Ubuntu 20.04 上安装 SPDK (Storage Performance Development Kit) 的完整步骤:
1. 系统准备
# 更新系统 sudo apt update sudo apt upgrade -y # 安装基础依赖 sudo apt install -y git make gcc g++ libssl-dev libaio-dev libnuma-dev \ pkg-config python3 python3-pip libjson-c-dev uuid-dev \ libiscsi-dev libncurses5-dev ninja-build
2. 克隆 SPDK 仓库
git clone https://github.com/spdk/spdk.git cd spdk git submodule update --init
3. 安装 SPDK 依赖
# 运行依赖安装脚本 sudo ./scripts/pkgdep.sh
4. Linux下编译 SPDK
# 配置编译选项 ./configure # 编译 make
5. 运行单元测试(可选但推荐)
# 运行基础测试 sudo ./test/unit/unittest.sh
6. 巨页与设备绑定
# 分配巨页 sudo scripts/setup.sh
#用户也可以自己指定大小:
sudo HUGEMEM=8192 scripts/setup.sh
7. 验证安装
# 运行示例应用程序 sudo ./build/examples/hello_world # 检查 NVMe 设备 sudo ./scripts/setup.sh status # 运行交互式控制台 sudo ./scripts/rpc.py get_subsystems
8. 运行 SPDK 应用程序
# 启动 SPDK 应用框架 sudo ./app/spdk_tgt/spdk_tgt & # 使用 RPC 命令管理 sudo ./scripts/rpc.py bdev_get_bdevs
常见问题解决
问题1:依赖下载失败问题
# 只要版本没错,多执行几遍就可以,如果多执行几遍还是同样错误,直接自己下源码去安装
问题2:大页内存分配失败
# 检查大页内存 grep Huge /proc/meminfo # 如果未分配,手动设置 sudo sysctl vm.nr_hugepages=1024
问题3:UIO 驱动加载失败
# 检查内核模块 sudo modprobe uio sudo modprobe uio_pci_generic # 如果使用 VFIO sudo ./scripts/setup.sh --vfio
问题4:NVMe 设备未绑定
# 手动绑定设备 sudo ./scripts/setup.sh reset sudo ./scripts/setup.sh
问题5:系统安装的Meson版本低于spdk要求
# 1. 卸载旧版 Meson sudo apt remove meson -y sudo pip3 uninstall meson -y # 2. 安装 Python 环境(如未安装) sudo apt install python3-pip python3-venv -y # 3. 安装最新版 Meson (推荐虚拟环境安装) python3 -m venv meson-env source meson-env/bin/activate pip install --upgrade pip wheel pip install meson==1.3.2 # 安装最新稳定版 # 4. 验证安装 meson --version # 应显示 1.x.x 版本 # 5. 永久添加环境变量(可选) echo "source $PWD/meson-env/bin/activate" >> ~/.bashrc
问题6:warning: Unknown section attribute 'note' ignored on declaration of section `.note.gnu.property'
这个警告是由于 NASM 汇编器版本过旧导致的,Ubuntu 20.04 默认安装的 NASM 2.14.02 不支持较新的 ELF 节属性
# 安装编译依赖 sudo apt install -y build-essential autoconf automake # 下载并编译安装 NASM 2.16.01 wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gz tar -xvf nasm-2.16.01.tar.gz cd nasm-2.16.01 ./autogen.sh ./configure make -j$(nproc) sudo make install sudo ldconfig # 更新库缓存
卸载 SPDK
# 停止所有 SPDK 应用 sudo killall spdk_tgt # 清理环境 sudo ./scripts/setup.sh reset # 卸载驱动 sudo rmmod uio_pci_generic sudo rmmod uio # 删除源码 cd .. && sudo rm -rf spdk
额外组件安装
安装 SPDK Vhost 目标
./configure --with-vhost make -j$(nproc)
安装 FIO 插件
# 安装 FIO sudo apt install -y fio # 构建 SPDK FIO 插件 cd spdk ./configure --with-fio=/usr/src/fio make -j$(nproc)
此安装流程已在 Ubuntu 20.04 LTS 上测试通过,支持最新 SPDK master(2025/07/25) 版本。根据您的硬件配置,可能需要调整大页内存大小或选择不同的设备绑定方式(UIO/VFIO)。