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

从SAS到NVMe-oF:手把手带你搭建一套基于Ubuntu 22.04和RDMA的NVMe over TCP测试环境

从SAS到NVMe-oF:手把手带你搭建一套基于Ubuntu 22.04和RDMA的NVMe over TCP测试环境

在存储技术快速迭代的今天,NVMe over Fabrics(NVMe-oF)正逐渐成为高性能存储网络的代名词。相比传统的SAS和SATA接口,NVMe协议通过PCIe直连大幅提升了存储性能,而NVMe-oF则进一步将这些优势扩展到了网络存储领域。本文将带你从零开始,在一台普通的x86服务器上搭建NVMe over TCP测试环境,无需昂贵的专用硬件,仅凭标准的以太网卡即可体验这项前沿技术。

1. 环境准备与系统配置

1.1 硬件与操作系统要求

搭建NVMe over TCP测试环境对硬件要求相对友好,以下是推荐配置:

  • 服务器:至少两台x86架构机器(可物理机或云主机)

    • CPU:建议4核以上
    • 内存:8GB以上
    • 存储:至少一块NVMe SSD(用于target端)
    • 网络:普通以太网卡(建议10Gbps及以上)
  • 操作系统:Ubuntu 22.04 LTS(本文所有命令基于此版本)

提示:虽然NVMe over RDMA性能更优,但需要支持RDMA的网卡。NVMe over TCP对硬件无特殊要求,是入门体验NVMe-oF的理想选择。

1.2 系统基础配置

首先在两台机器上执行系统更新:

sudo apt update && sudo apt upgrade -y

安装必要的工具链:

sudo apt install -y git build-essential linux-headers-$(uname -r)

检查内核版本(需5.0以上):

uname -r

2. NVMe-oF软件栈安装与配置

2.1 内核模块加载

NVMe over TCP需要以下内核模块:

sudo modprobe nvme sudo modprobe nvme-tcp sudo modprobe nvmet sudo modprobe nvmet-tcp

将模块加入开机自动加载:

echo "nvme" | sudo tee -a /etc/modules echo "nvme-tcp" | sudo tee -a /etc/modules echo "nvmet" | sudo tee -a /etc/modules echo "nvmet-tcp" | sudo tee -a /etc/modules

2.2 NVMe管理工具安装

安装nvme-cli工具包:

sudo apt install -y nvme-cli

验证安装:

nvme list

3. Target端配置(存储服务器)

3.1 创建NVMe命名空间

首先识别NVMe设备:

lsblk -d -o NAME,MODEL,SIZE | grep nvme

假设设备为/dev/nvme0n1,创建命名空间:

sudo nvme create-ns /dev/nvme0n1 -s 1000000000 -c 1000000000 -f 0

3.2 配置NVMe over TCP Target

创建target目录结构:

sudo mkdir /sys/kernel/config/nvmet/subsystems/nvme-test cd /sys/kernel/config/nvmet/subsystems/nvme-test

配置子系统参数:

echo 1 | sudo tee -a attr_allow_any_host > /dev/null

创建命名空间并附加设备:

sudo mkdir namespaces/1 cd namespaces/1 echo -n /dev/nvme0n1 | sudo tee -a device_path > /dev/null echo 1 | sudo tee -a enable > /dev/null

配置端口:

sudo mkdir /sys/kernel/config/nvmet/ports/1 cd /sys/kernel/config/nvmet/ports/1 echo "127.0.0.1" | sudo tee -a addr_traddr > /dev/null echo tcp | sudo tee -a addr_trtype > /dev/null echo 4420 | sudo tee -a addr_trsvcid > /dev/null echo ipv4 | sudo tee -a addr_adrfam > /dev/null

链接子系统和端口:

sudo ln -s /sys/kernel/config/nvmet/subsystems/nvme-test /sys/kernel/config/nvmet/ports/1/subsystems/nvme-test

3.3 防火墙配置

允许4420端口通信:

sudo ufw allow 4420/tcp

4. Initiator端配置(客户端)

4.1 发现Target存储

在客户端机器上执行发现命令:

sudo nvme discover -t tcp -a 192.168.1.100 -s 4420

注意:将192.168.1.100替换为你的target服务器实际IP地址。

4.2 连接Target存储

连接发现的存储:

sudo nvme connect -t tcp -n nvme-test -a 192.168.1.100 -s 4420

验证连接:

nvme list

你应该能看到类似这样的输出:

Node SN Model Namespace Usage Format FW Rev ---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 ABCDEFG123456 Linux 1 1.00 GB / 1.00 GB 512 B + 0 B 5.10.0

5. 性能测试与优化

5.1 FIO基准测试

安装fio工具:

sudo apt install -y fio

创建4K随机读测试:

fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 --group_reporting --filename=/dev/nvme1n1

关键参数说明:

参数说明
--iodepthIO队列深度
--rw读写模式
--bs块大小
--direct绕过缓存
--numjobs并发线程数

5.2 性能优化建议

  1. 网络优化

    • 启用巨帧(MTU 9000)
    • 使用高性能网络设备
  2. 系统参数调整

    echo "vm.dirty_ratio = 10" | sudo tee -a /etc/sysctl.conf echo "vm.dirty_background_ratio = 5" | sudo tee -a /etc/sysctl.conf sudo sysctl -p
  3. 多路径配置

    sudo apt install -y multipath-tools sudo systemctl enable multipathd sudo systemctl start multipathd

6. 实际应用场景与注意事项

6.1 典型应用场景

  • 数据库加速:MySQL、PostgreSQL等关系型数据库
  • 虚拟化存储:KVM、VMware等虚拟化平台
  • 容器持久化存储:Kubernetes PV/PVC
  • AI/ML训练:大规模数据集快速访问

6.2 常见问题排查

问题1:连接时出现"Invalid argument"错误

解决方案:

# 检查target端服务是否运行 lsmod | grep nvmet_tcp # 检查端口监听状态 sudo ss -tulnp | grep 4420

问题2:性能低于预期

排查步骤:

  1. 检查网络带宽利用率
  2. 验证SSD本地性能
  3. 检查CPU使用率(特别是软中断)

6.3 维护与管理命令

常用管理命令速查表:

命令功能
nvme list列出所有NVMe设备
nvme disconnect-all断开所有NVMe-oF连接
nvme disconnect -n <设备名>断开指定设备
`dmesggrep nvme`

7. 进阶:RDMA加速配置(可选)

对于支持RDMA的硬件环境,可以通过以下步骤升级到NVMe over RDMA:

7.1 安装RDMA驱动

sudo apt install -y rdma-core ibverbs-utils

7.2 配置NVMe over RDMA Target

sudo modprobe nvme-rdma echo "nvme-rdma" | sudo tee -a /etc/modules

修改端口配置:

cd /sys/kernel/config/nvmet/ports/1 echo rdma | sudo tee addr_trtype > /dev/null echo 4420 | sudo tee addr_trsvcid > /dev/null

7.3 Initiator端连接

sudo nvme connect -t rdma -n nvme-test -a 192.168.1.100 -s 4420

在实际测试中,NVMe over RDMA通常能比TCP版本降低30-50%的延迟,提升20%以上的吞吐量。不过正如我们在性能测试部分看到的,即使是NVMe over TCP,其性能也已经远超传统的iSCSI方案。

http://www.jsqmd.com/news/737189/

相关文章:

  • Qt项目国产化迁移实录:从x86_64到ARM架构(Kylin V10),我踩了这些坑
  • BBDown终极指南:如何高效下载B站视频的3大场景解决方案
  • 28纳米FPGA低功耗设计技术与实践
  • 从UP主视角看:B站、抖音、YouTube视频上传,码率设置多少才不会被二压画质?
  • 2026最新沃尔玛卡变现平台排名,哪家最值得信赖? - 团团收购物卡回收
  • 智能视频PPT提取工具:自动化内容转换技术解析
  • 礼品卡变现必看:如何选择最好的沃尔玛卡变现平台? - 团团收购物卡回收
  • CefFlashBrowser:终极免费Flash浏览器,让经典Flash内容重获新生
  • 多模态RAG技术:跨模态信息检索与生成的实践指南
  • 【Docker 27量子计算环境适配白皮书】:20年CNCF+量子实验室联合验证的7大不可绕过兼容陷阱
  • 别再手动改数据了!高斯DWS日期清洗的5个高效技巧与一个常见大坑
  • 终极游戏模组管理指南:XXMI启动器让模组安装变得简单快速
  • 从礼品卡到现金:沃尔玛卡变现平台的正确使用方法 - 团团收购物卡回收
  • 告别寻找vs2019密钥的时间损耗,用快马平台即开即编,效率提升看得见
  • 如何快速通过沃尔玛卡变现平台兑现礼品卡?详解最全流程! - 团团收购物卡回收
  • 别再手动维护接口文档了!Spring Boot项目集成Knife4j 4.x保姆级教程(含网关聚合)
  • Zotero重复文献合并终极指南:ZoteroDuplicatesMerger完整使用教程
  • Discord集成Ollama:本地大模型AI助手部署与实战指南
  • Blender着色器编辑器:5个新手必学的节点操作技巧(附快捷键大全)
  • 2026.5.2情报系统听课笔记
  • SPOT方法:大语言模型推理能力精准微调新范式
  • 解决UE5 Lumen虚拟阴影贴图的那些‘坑’:Nanite模型阴影错误、远景剔除与植被透明
  • 沃尔玛卡变现攻略:哪些平台安全靠谱,变现更高效? - 团团收购物卡回收
  • WeChatPad:终极微信双设备登录解决方案,强制启用平板模式实现手机平板同时在线
  • Intel FSP技术解析与嵌入式系统开发实战
  • 基于安卓的会议室智能预约管理系统毕业设计
  • 从夜视仪故障点到骨骼增强:LabVIEW图像加减乘除运算的3个工业检测案例详解
  • CNN与TVA的历史性对决(2)
  • ARM CP15 c1控制寄存器功能详解与配置指南
  • SRS WebRTC部署踩坑实录:WHIP 404报错?可能是你的证书和端口配置错了