当前位置: 首页 > news >正文

Ubuntu 20.04 上安装 SPDK

以下是在 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)。

http://www.dtcms.com/a/295558.html

相关文章:

  • RP2040关键汇编函数解释
  • 旧物回收小程序系统开发——开启绿色生活新篇章
  • 基于区块链的商品销售系统(fiscobcos)
  • 本地部署dify1.7.0流程-windows docker
  • [AI 生成] Flink 面试题
  • 企业ERP系统全模块深度解析:从基础管理到智能运营
  • 算法提升之字符串(字典树)
  • 【C++】标准模板库(STL)—— 学习算法的利器
  • 【Qt开发】信号与槽(一)
  • 【MediaTek】AN7563编译wlan_hwifi出现en_npu.c:42:10: fatal error:
  • 上课啦 | 7月27日 Oracle OCP 19C(直播/面授 )
  • docker pull weaviate 国内拉取失败的问题
  • 面试题(技术面+hr面)
  • odoo欧度软件小程序——删除用户
  • 【Lucene】文件概览
  • 【Java学习|黑马笔记|Day21】IO流综合练习,多线程|常用成员方法,守护线程、礼让线程、插入线程
  • 借助 Amazon Redshift 为具有强大抗风险能力的使用案例提供支持
  • AI结对编程:分布式团队的集体记忆外脑
  • Leetcode力扣解题记录--第2题(加法模拟)
  • (进阶向)Python第十四期OpenCv图像预处理方法[2]
  • ModernBERT如何突破BERT局限?情感分析全流程解析
  • 输电线路微气象在线监测装置:保障电网安全的科技屏障
  • Text2SQL智能问答系统开发(一)
  • 成品电池综合测试仪:保障电池品质与安全的核心工具|深圳鑫达能
  • C++抽象类完全指南
  • 三坐标测量仪高效批量检测轴类传动零件
  • 基于深度学习的图像分类:使用EfficientNet实现高效分类
  • 基础NLP | 常用工具
  • DeepSpeed-FastGen:通过 MII 和 DeepSpeed-Inference 实现大语言模型的高吞吐文本生成
  • 机器翻译编程