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

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

从SAS到NVMe-oF手把手带你搭建一套基于Ubuntu 22.04和RDMA的NVMe over TCP测试环境在存储技术快速迭代的今天NVMe over FabricsNVMe-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 -r2. 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/modules2.2 NVMe管理工具安装安装nvme-cli工具包sudo apt install -y nvme-cli验证安装nvme list3. 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 03.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-test3.3 防火墙配置允许4420端口通信sudo ufw allow 4420/tcp4. 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.05. 性能测试与优化5.1 FIO基准测试安装fio工具sudo apt install -y fio创建4K随机读测试fio --namerandread --ioenginelibaio --iodepth32 --rwrandread --bs4k --direct1 --size1G --numjobs4 --runtime60 --group_reporting --filename/dev/nvme1n1关键参数说明参数说明--iodepthIO队列深度--rw读写模式--bs块大小--direct绕过缓存--numjobs并发线程数5.2 性能优化建议网络优化启用巨帧MTU 9000使用高性能网络设备系统参数调整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多路径配置sudo apt install -y multipath-tools sudo systemctl enable multipathd sudo systemctl start multipathd6. 实际应用场景与注意事项6.1 典型应用场景数据库加速MySQL、PostgreSQL等关系型数据库虚拟化存储KVM、VMware等虚拟化平台容器持久化存储Kubernetes PV/PVCAI/ML训练大规模数据集快速访问6.2 常见问题排查问题1连接时出现Invalid argument错误解决方案# 检查target端服务是否运行 lsmod | grep nvmet_tcp # 检查端口监听状态 sudo ss -tulnp | grep 4420问题2性能低于预期排查步骤检查网络带宽利用率验证SSD本地性能检查CPU使用率特别是软中断6.3 维护与管理命令常用管理命令速查表命令功能nvme list列出所有NVMe设备nvme disconnect-all断开所有NVMe-oF连接nvme disconnect -n 设备名断开指定设备dmesggrep nvme7. 进阶RDMA加速配置可选对于支持RDMA的硬件环境可以通过以下步骤升级到NVMe over RDMA7.1 安装RDMA驱动sudo apt install -y rdma-core ibverbs-utils7.2 配置NVMe over RDMA Targetsudo 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/null7.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方案。

相关文章:

从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协议通过P…...

约鲁巴语讽刺检测:NLP在低资源语言中的挑战与实践

1. 约鲁巴语讽刺检测研究的背景与挑战讽刺检测作为自然语言处理(NLP)领域的重要研究方向,其核心价值在于解决表面情感与实际意图之间的语义鸿沟问题。在社交媒体和用户生成内容(UGC)分析中,讽刺性表达常常导致传统情感分析系统产生误判。以约鲁巴语(Yorb…...

如何为Windows系统创建高性能虚拟显示器:ParsecVDisplay完整指南

如何为Windows系统创建高性能虚拟显示器:ParsecVDisplay完整指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否曾经遇到过这样的困境:需要扩展屏幕…...

别再手动算排名了!用Python+TOPSIS法5分钟搞定多指标评价(附完整代码)

用PythonTOPSIS法5分钟搞定多指标评价排名 当你面对一堆供应商评估表格、学生综合评分数据或者项目优先级排序表时,是否还在用Excel手动计算加权分数?每次调整权重都要重新算一遍,不仅效率低下,还容易出错。今天我要分享的TOPSIS…...

告别密码!用WindTerm的SSH密钥登录Linux服务器,保姆级图文教程(含权限设置避坑)

告别密码时代:用WindTerm实现SSH密钥安全登录的终极指南 每次输入冗长复杂的服务器密码时,那种烦躁感是否让您想砸键盘?密码泄露导致的安全事件频发,传统密码验证方式早已不是最优解。作为现代开发者,是时候拥抱更安全…...

ARM CP15 c1控制寄存器功能详解与配置指南

1. ARM CP15控制寄存器深度解析在ARM架构的嵌入式系统开发中,系统控制协处理器CP15扮演着核心角色。作为处理器与开发者之间的关键接口,CP15通过一组精心设计的控制寄存器,为系统提供了精细化的控制能力。其中,c1控制寄存器尤为重…...

多模态RAG技术:跨模态信息检索与生成的实践指南

1. 多模态RAG技术解析:从理论到实践的革命性跨越在信息爆炸的时代,我们每天面对的海量文档中,有超过60%的内容以PDF等富文本格式存在,其中包含大量图表、公式和复杂排版。传统基于OCR的文本提取方法在处理这类文档时,平…...

别再手动建模了!Unity Terrain地形工具保姆级教程:从草地、树木到风系统,5分钟打造你的第一个游戏场景

别再手动建模了!Unity Terrain地形工具保姆级教程:从草地、树木到风系统,5分钟打造你的第一个游戏场景 刚接触Unity的开发者常常会陷入一个误区:认为高质量的地形必须通过复杂的建模软件才能实现。实际上,Unity内置的…...

STM32+LVGL实战避坑:从显示错位到触摸不灵,我的嵌入式GUI移植调试记录

STM32LVGL实战避坑:从显示错位到触摸不灵,我的嵌入式GUI移植调试记录 当我在STM32F407上第一次看到那个歪斜的按钮时,内心是崩溃的。作为一个嵌入式开发者,我本以为LVGL的移植会像官方文档描述的那样顺利,但现实却给了…...

用C语言手搓一个2048游戏核心逻辑(附XTU-OJ 1239题解)

从零实现2048游戏核心逻辑:C语言算法精解与XTU-OJ 1239实战 在算法学习的道路上,将抽象规则转化为具体代码的能力至关重要。2048这款经典数字合并游戏,恰好提供了绝佳的算法训练场景。本文将带你从零开始,用C语言构建完整的游戏核…...

Screenpipe:本地AI记忆体,事件驱动与隐私优先的屏幕活动自动化

1. 项目概述:为你的屏幕装上AI记忆如果你和我一样,每天在电脑前处理海量信息,从代码、文档到会议、网页,那么“我上周三下午在哪个网页上看到过那个API文档?”或者“昨天开会时客户提到的那个具体需求是什么&#xff1…...

Equalizer APO终极教程:免费打造Windows专业级音频均衡器

Equalizer APO终极教程:免费打造Windows专业级音频均衡器 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 想要彻底提升Windows电脑的音频体验吗?Equalizer APO作为一款免费开源的…...

如何在PotPlayer中免费实现字幕实时翻译?百度翻译插件完整指南

如何在PotPlayer中免费实现字幕实时翻译?百度翻译插件完整指南 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 你是否在观看…...

如何用ContextMenuManager彻底掌控Windows右键菜单

如何用ContextMenuManager彻底掌控Windows右键菜单 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 在日常的Windows使用中,右键菜单是我们最频繁接触…...

孤舟笔记 并发篇十八 为什么启动线程不能直接调用run()方法?调用两次start()又会怎样?这个设计藏着大智慧

文章目录 一、先说结论:run() 和 start() 的核心区别二、直接调用 run():根本没有新线程start() 源码做了什么? 三、调两次 start():直接报错四、正确姿势:需要新线程就创建新对象五、Thread 的状态机:为什…...

别再只看ROC了!用‘价格斜率’构建ETF轮动策略,实测改善回撤(附Python代码)

价格斜率:重构ETF动量轮动的量化新视角 当大多数量化交易者还在用传统的收益率指标(ROC)衡量ETF动量时,市场已经悄悄奖励那些发现价格斜率价值的先行者。去年一位私募基金经理在内部测试中发现,将沪深300ETF的20日价格…...

保姆级教程:手把手教你修改PX4机型文件,让自定义无人机在QGC上完美显示

深度解析PX4机型文件定制:从脚本修改到QGC无缝集成实战指南 当你完成了一架自定义无人机的PX4固件开发,满心欢喜地打开QGroundControl(QGC)准备调试时,却发现机型列表中根本找不到自己的作品——这种挫败感我太熟悉了…...

TVA与CNN的历史性对决(3)

重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan师从美国三院院士、“AI教母”…...

RH850 RS-CANFD中断配置保姆级教程:从Channel 2实战到寄存器位操作详解

RH850 RS-CANFD中断配置实战指南:从寄存器解析到Channel 2完整实现 当你在RH850评估板上第一次尝试配置RS-CANFD中断时,是否曾被那些神秘的寄存器位和中断向量表搞得晕头转向?作为从STM32转战瑞萨平台的工程师,我完全理解这种困惑…...

CNN与TVA的历史性对决(2)

重磅预告:本专栏将独家连载新书《AI视觉技术:从入门到进阶》精华内容。本书是《AI视觉技术:从进阶到专家》的权威前导篇,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan师从美国三院院士、“AI教母”…...

Discord集成Ollama:本地大模型AI助手部署与实战指南

1. 项目概述与核心价值 最近在折腾AI应用集成,发现一个挺有意思的项目叫 kevinthedang/discord-ollama 。简单来说,它就是一个让你能在Discord聊天服务器里,直接调用本地部署的Ollama大语言模型的机器人。想象一下,你和朋友在Di…...

【Docker 27量子计算环境适配白皮书】:20年CNCF+量子实验室联合验证的7大不可绕过兼容陷阱

更多请点击: https://intelliparadigm.com 第一章:Docker 27量子计算环境适配的演进逻辑与战略定位 随着量子计算软件栈从原型验证迈向工程化部署,容器化运行时对量子模拟器、QPU驱动接口及混合量子-经典工作流的支持能力成为关键瓶颈。Dock…...

AI辅助全栈开发实战:基于Cursor构建MERN待办事项应用

1. 项目概述:一个由AI驱动的全栈待办事项应用最近在GitHub上看到一个挺有意思的项目,叫santosflores/todo_list_cursor。光看名字,你可能会觉得这又是一个平平无奇的待办事项列表应用,市面上类似的工具没有一千也有八百。但如果你…...

3步掌握NHSE:动物森友会存档编辑器的深度应用指南

3步掌握NHSE:动物森友会存档编辑器的深度应用指南 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE NHSE(New Horizons Save Editor)是一款专为《集合啦&#xff…...

DeepSeek LeetCode 2040.两个有序数组的第 K 小乘积 Python3实现

python from typing import List import bisectclass Solution:def kthSmallestProduct(self, nums1: List[int], nums2: List[int], k: int) -> int:# 统计乘积 < mid 的个数def count(mid: int) -> int:cnt 0for a in nums1:if a > 0:# a * b < mid > b…...

Substrate跨链桥实战:从架构设计到安全部署

1. 项目概述与核心价值最近在折腾一个跨链数据聚合的项目&#xff0c;中间件选型时&#xff0c;一个叫buremba/sub-bridge的开源项目进入了我的视野。这名字乍一看&#xff0c;sub很容易让人联想到 Substrate 区块链框架&#xff0c;而bridge则直指“桥”这个核心功能。没错&am…...

Ubuntu 20.04下搞定gici-open编译:从glog报错到ceres版本冲突的保姆级排坑指南

Ubuntu 20.04下gici-open编译全攻略&#xff1a;从依赖管理到实战调试 在GNSS/INS/Camera多传感器融合领域&#xff0c;gici-open作为上海交通大学最新开源的高精度定位框架&#xff0c;凭借其整合RTKLIB、OKVIS等知名算法的优势&#xff0c;正成为研究者和工程师关注的焦点。…...

如何用XXMI启动器轻松管理游戏模组:完整指南

如何用XXMI启动器轻松管理游戏模组&#xff1a;完整指南 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher XXMI-Launcher是一款开源的游戏模组管理平台&#xff0c;专门为《原神》…...

SketchUp STL插件:5分钟实现3D设计到打印的无缝转换

SketchUp STL插件&#xff1a;5分钟实现3D设计到打印的无缝转换 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是否在Sket…...

ArcGIS ModelBuilder实战:一键生成建筑矢量阴影,告别手动繁琐操作

ArcGIS ModelBuilder实战&#xff1a;一键生成建筑矢量阴影&#xff0c;告别手动繁琐操作 城市规划师小李最近接了个新项目——为某商业区绘制带阴影效果的建筑分布图。当他打开ArcGIS准备大展拳脚时&#xff0c;却发现手动创建建筑阴影的步骤繁琐得令人抓狂&#xff1a;每个建…...