以下是在 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. 安装 DPDK 依赖
# 安装 DPDK 构建依赖 sudo apt install -y libpcap-dev libelf-dev meson# 设置大页内存(必需) sudo bash -c "echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages" sudo mkdir -p /mnt/huge sudo mount -t hugetlbfs nodev /mnt/huge# 永久配置(可选) echo "vm.nr_hugepages=1024" | sudo tee -a /etc/sysctl.conf echo "nodev /mnt/huge hugetlbfs defaults 0 0" | sudo tee -a /etc/fstab
3. 克隆 SPDK 仓库
git clone https://github.com/spdk/spdk.git cd spdk git submodule update --init
4. 安装 SPDK 依赖
# 运行依赖安装脚本 sudo ./scripts/pkgdep.sh# 安装 Python 依赖 pip3 install -r ./scripts/pyrequirements.txt
5. 编译 SPDK
# 配置编译选项 ./configure --with-iscsi-initiator --with-vhost --with-nvme-cuse# 编译安装 make -j$(nproc)
6. 运行单元测试(可选但推荐)
# 运行基础测试 sudo ./test/unit/unittest.sh
7. 设置环境变量
# 添加环境变量到 .bashrc echo "export SPDK_ROOT=\"$PWD\"" >> ~/.bashrc echo "export DPDK_ROOT=\"$PWD/dpdk\"" >> ~/.bashrc echo "export PATH=\"\$PATH:$PWD/build/bin\"" >> ~/.bashrc echo "export PYTHONPATH=\"$PWD/scripts\"" >> ~/.bashrc source ~/.bashrc
8. 初始化 SPDK 环境
# 设置 Hugepages 和加载驱动 sudo scripts/setup.sh# 输出应显示类似: 0000:00:04.0 (8086 0c00): nvme -> uio_pci_generic
9. 验证安装
# 运行示例应用程序 sudo ./build/examples/hello_world# 检查 NVMe 设备 sudo ./scripts/setup.sh status# 运行交互式控制台 sudo ./scripts/rpc.py get_subsystems
10. 运行 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'
# 安装依赖 sudo apt install build-essential bison flex texinfo -y# 下载源码 wget https://ftp.gnu.org/gnu/binutils/binutils-2.41.tar.gz tar xvf binutils-2.41.tar.gz cd binutils-2.41# 编译安装 ./configure --prefix=/usr/local --enable-gold --enable-plugins --disable-werror make -j$(nproc) sudo make install# 更新系统路径 echo 'export PATH="/usr/local/bin:$PATH"' | sudo tee /etc/profile.d/binutils.sh source /etc/profile.d/binutils.sh# 验证 as --version | head -1
卸载 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 v23.09 版本。根据您的硬件配置,可能需要调整大页内存大小或选择不同的设备绑定方式(UIO/VFIO)。