Ubuntu 20.04 上安装 SPDK
以下是在 Ubuntu 20.04 上安装 SPDK (Storage Performance Development Kit) 的完整步骤:
1. 系统准备
# 更新系统sudo apt updatesudo 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.gitcd spdkgit 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 uiosudo modprobe uio_pci_generic# 如果使用 VFIOsudo ./scripts/setup.sh --vfio
问题4:NVMe 设备未绑定
# 手动绑定设备sudo ./scripts/setup.sh resetsudo ./scripts/setup.sh
问题5:系统安装的Meson版本低于spdk要求
# 1. 卸载旧版 Mesonsudo apt remove meson -ysudo pip3 uninstall meson -y# 2. 安装 Python 环境(如未安装)sudo apt install python3-pip python3-venv -y# 3. 安装最新版 Meson (推荐虚拟环境安装)python3 -m venv meson-envsource meson-env/bin/activatepip install --upgrade pip wheelpip 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.01wget https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/nasm-2.16.01.tar.gztar -xvf nasm-2.16.01.tar.gzcd nasm-2.16.01./autogen.sh./configuremake -j$(nproc)sudo make installsudo ldconfig # 更新库缓存
卸载 SPDK
# 停止所有 SPDK 应用sudo killall spdk_tgt# 清理环境sudo ./scripts/setup.sh reset# 卸载驱动sudo rmmod uio_pci_genericsudo rmmod uio# 删除源码cd .. && sudo rm -rf spdk
额外组件安装
安装 SPDK Vhost 目标
./configure --with-vhostmake -j$(nproc)
安装 FIO 插件
# 安装 FIOsudo apt install -y fio# 构建 SPDK FIO 插件cd spdk./configure --with-fio=/usr/src/fiomake -j$(nproc)
此安装流程已在 Ubuntu 20.04 LTS 上测试通过,支持最新 SPDK master(2025/07/25) 版本。根据您的硬件配置,可能需要调整大页内存大小或选择不同的设备绑定方式(UIO/VFIO)。