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.pswp.cn/diannao/92610.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决WPS图片在Excel表格中无法打开

若出现无法打开的情况,还请回到WPS中,点击图片,右键:转化为浮动图片保存,然后便能正常打开!

【Ollama】open-webui部署模型

目录 一、本地部署Ollama 1.1 进入官网复安装命令 1.2 执行安装命令 1.3 验证是否安装成功 二、启动Ollama服务 三、运行模型 方法一:拉取模型镜像 方法二:拉取本地模型 四、使用Open WebUI 部署模型 4.1 创建虚拟环境 4.2 安装依赖 4.3 运行…

C#文件操作(创建、读取、修改)

判断文件是否存在 不存在则创建默认文件 并写入默认值/// <summary>/// 判断文件是否存在 不存在则创建默认文件 并写入默认值/// </summary>public void IsConfigFileExist(){try{// 获取应用程序的当前工作目录。string fileName System.IO.Directory.GetCurr…

基于阿里云平台的文章评价模型训练与应用全流程指南

基于阿里云平台的文章评价模型训练与应用全流程指南 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 项目概述 1.1 项目背景 在当今信息爆炸的时代&…

AI 及开发领域动态与资源汇总(2025年7月24日)

AI 项目、工具及动态汇总 项目/产品名称核心功能/简介主要特点/亮点相关链接Supervision一个流行的计算机视觉工具库&#xff0c;用于加速计算机视觉应用的构建。模型无关&#xff0c;可与多种主流库集成&#xff1b;提供丰富的可定制标注工具&#xff1b;支持多种数据集操作和…

C专题8:文件操作1

1.C语言中的文件是什么?所谓文件&#xff08;file&#xff09;一般指存储在外部介质上数据的集合&#xff0c;比如我们经常使用的txt、bmp、jpg、exe、rmvb等等。这些文件各有各的用途&#xff0c;我们通常将它们存放在磁盘或者可移动盘等介质中。文件无非就是一段数据的集合&…

Opencv C# 重叠 粘连 Overlap 轮廓分割 (不知道不知道)

先上效果图一种基于凹陷检测重叠轮廓分割的方法这两个星期压力大的一批&#xff0c;心脏都给干得乱跳了&#xff0c;现在高血压心率不齐贫血。兄弟们保重身体啊。简单说下逻辑&#xff1a;前处理&#xff1a;的噼里啪啦我就不说了&#xff0c;根据样品来(灰度&#xff0c;滤波&…

CentOS7 安装 rust 1.82.0

CentOS7 安装 rust 1.82.0 我在CentOS7.9中安装rust遇到报错版本低&#xff0c;再升级版本的过程中遇到诸多问题&#xff0c;简单记录。 遇到的问题 提示版本低 centos7 安装 ERROR: Rust 1.75.0 or newer required.Rust version 1.72.1 was found.原因是 CentOS7 的默认的软件…

Compose 适配 - 键鼠模式

一、概念不止触摸交互&#xff0c;在 ChromeOS 或外接键鼠的设备上&#xff0c;需要考虑焦点、悬停、右键等操作逻辑。二、使用2.1 焦点使用 Tab 键来导航&#xff0c;改变边框以提供清晰的焦点指示器。Composable fun Demo() {val interactionSource remember { MutableInter…

征服 Linux 网络:核心服务与实战解析

在当今的IT基础设施中&#xff0c;Linux作为服务器操作系统的基石&#xff0c;其强大的网络功能是其不可或缺的优势。对于任何志在成为高级系统管理员或运维工程师的人来说&#xff0c;精通Linux网络配置与服务管理是核心竞争力。 与日常应用不同&#xff0c;Linux网络管理往往…

Spark 之 DataFrame

# foreach useFeatureDF.rdd.foreachPartition {iter => iter.foreach {row =>val userId = row.getAs[Int]

射频信号(大宽高比)时频图目标检测anchors配置(下)

书接上文&#xff1a; 射频信号&#xff08;大宽高比&#xff09;时频图目标检测anchors配置&#xff08;上&#xff09; 三、4090加成检测效果深度优化 在4090 24G专用显存加持下继续探究大宽高比目标检测的奥秘&#xff1a; Conda环境迁移至租的云服 在云服上第一次测试…

跨境支付入门~国际支付结算(区块链篇)

摘要Web3区块链技术架构解析&#xff1a;从底层共识到应用生态本文系统梳理了Web3作为稳定币基础设施的技术架构&#xff0c;采用"数字共和国"的比喻框架&#xff0c;将区块链技术分解为六大核心模块&#xff1a;宪法根基&#xff08;区块链层&#xff09;&#xff1…

Docker 私服

什么是 Docker 私服&#xff1f; Docker 官方的 Docker Hub 是一个用于管理公共镜像的仓库&#xff0c;我们可以从上面拉取镜像 到本地&#xff0c;也可以把我们自己的镜像推送上去。 但是&#xff0c;有时候我们的服务器无法访问互联网&#xff0c;或者你不希望将自己的镜像…

DeepSeek vs ChatGPT:谁更胜一筹?

新兴 AI 聊天机器人的崛起与挑战&#xff1a;对话模型发展观察近年来&#xff0c;生成式人工智能领域持续取得突破&#xff0c;聊天机器人作为其中的代表&#xff0c;广泛应用于写作、编程、问答和信息处理等任务。2025 年初&#xff0c;国内某 AI 团队宣布了多项模型技术进展&…

飞算科技:以原创技术为翼,赋能产业数字化转型

在数字经济浪潮席卷全球的当下&#xff0c;一批专注于技术创新的中国企业正加速崛起&#xff0c;飞算数智科技&#xff08;深圳&#xff09;有限公司&#xff08;简称 “飞算科技”&#xff09;便是其中的佼佼者。作为一家国家级高新技术企业&#xff0c;飞算科技以自主创新为核…

电商接口什么意思?

“电商接口”这四个字&#xff0c;在中文互联网上出现的频次越来越高&#xff1a;商家后台、小程序、ERP、数据大屏……几乎任何与线上零售沾边的场景都会提到它。然而&#xff0c;对大多数刚进入电商行业的新人&#xff0c;甚至一些已经开了很多年网店的老板来说&#xff0c;这…

前端面试专栏-前沿技术:30.跨端开发技术(React Native、Flutter)

&#x1f525; 欢迎来到前端面试通关指南专栏&#xff01;从js精讲到框架到实战&#xff0c;渐进系统化学习&#xff0c;坚持解锁新技能&#xff0c;祝你轻松拿下心仪offer。 前端面试通关指南专栏主页 前端面试专栏规划详情 跨端开发技术&#xff08;React Native、Flutter&am…

复盘—MySQL触发器实现监听数据表值的变化,对其他数据表做更新

文章目录 MySQL交换数据库表中两列的值(额外的知识) 为防止后面有疑问,提前解释为什么需要 `$$` ? 第一版需求 第二版需求 第三版需求 注意事项: 存在的严重问题 最终版 关键修复说明: 完整测试场景: 额外建议(如果需要显式处理NULL): COALESCE函数 业务中出现的问题…

SpringCloud【Sentinel】

1&#xff0c;工作原理 2&#xff0c;常见规则 流量控制&#xff08;FlowRule&#xff09; 1&#xff0c;阈值类型设置如下 单机均摊&#xff1a;每个机器均摊&#xff0c;比如阈值填5&#xff0c;三个机器&#xff0c;就个机器都可以有5个 总体阈值&#xff1a;所有机器总阈…