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

PCIe协议学习-浅谈SR-IOV

转载(13 封私信 / 81 条消息) PCIe协议学习-浅谈SR-IOV - 知乎1背景和概述SR-IOV全称叫single root I/O virtualization and sharing顾名思义这是一种虚拟化技术目的是让多个终端或者叫做system imageSI共享PCI设备资源提高硬件资源得利用率。一般的虚拟化系统架构如下图所示多个SI可以共享某个PCI设备virtualization intermediaryVI负责管理其下面的硬件资源同时只把每一个SI自己可以访问的资源呈现给他们因此可以说每个SI看到的系统system是一个“虚拟化”的系统。这个架构的问题就是所有的IO命令和数据都需要VI处理分发当多个SI都和PCIe设备有大量IO交互时要保持系统性能对VI的硬件性能要求会非常高即所谓的“significant platform resource overhead”。SR-IOV的引入就是为了减少这种resource overheads具体方法其实也就是在不增加太多resource overheads的前提下尽量卸载VI的数据流处理功能包括DMAmemory space accessinterrupt process等另外就是SR-IOV可以兼容其他的IO virtualization technologies比如address translation serviceATS等这里不做展开SR-IOV的系统架构一般如下图所示。这个系统增加了以下这些功能模块1SR-PCIMsingle root PCI manager负责SR-IOV相关配置管理physical functionsPF和virtual functionsVF同时处理相关的error events和设备的一些功能管理如power management和hot-plug service等。2TAoptional translation agent负责做上下游的PCIe transaction的地址转译TA可能还会包含一个address translation cacheATC作为查表缓存来加快转译速度。3ATPToptional address translation and protection tableTA通过查询ATPT完成PCIe transaction的地址转译。4ATCoptional address transaction cache前面提到ATC可能在TA中同时设备中也可以有一个ATC模块这主要时考虑兼容ATS已经完成地址转译的PCIe function可以bypass 系统中的ATC以提高性能。5PFphysical function就是支持SR-IOV特性的PCIe function同时可以被SR-PCIMVI和SI等访问。6VFvirtual function一个可以被SI直接访问的轻量级Light-weight的PCIe function可以认为的PF的子集也是SI进行数据操作的最终容器或者说对象但是SI无法配置VF。一个VF可以先被分配给一个SI然后reset并被分配给两一个SI但任一时刻只能有一个SI具有访问权限一个VF也可以先分配给一个PF再分配给另一个PF。2ARI在进一步讨论SR-IOV前先介绍ARI一般的routing IDrequester ID和completer ID都是8bit bus number5 bit device number3-bit funciton number组成在ARI模式下device number 不再使用由8-bit bus number 8bit funciton number组成因此ARI设备可以支持到256个functions不考虑AR-IOV。软件在枚举时如果发现一个设备支持ARI存在ARI capability register寄存器则需要使能和ARI设备对接的downstream port中的ARI forwarding enable bit in the device control2 register。使能之后这个DP可以正常将type1 configuration rquest转换成type0 configuration request原先的type1到type0的转换要求device number域段为0。ARI extended capabilityARI capability registeroffset 04h如果设备支持MFVC function groupsmulti-function virtual channel function groupsbit 0不同的function可以分配到不同的function group最大8个function groupsDevice将基于function groups进行调度每个function group内的进一步调度方式时implementation specific的。ARI Control registeroffset 06h3PCIe设备中的PF和VF日常工作中我们接触EP或者说PCIe设备比较多所以本文也会重点讨论一下PCIe设备相关的SR-IOV功能一个支持SR-IOV的PCIe设备多个PF每个PF还包含0个或者多个VF如下图所示几点说明如下1每个PF可以有0个VF多个PFs之间的VFs数量可以不同2ARIAliternative routing indentifierextended capability寄存器定义了设备funciton group的配置比如arbitration和下一个funciton的寄存器offset等。3支持ARI的设备最多支持256个PFs不同的function number需要在256范围内但是不需要连续分配。4一个SR-IOV设备可以占用多个bus number每一个VF都可以关联一个在设备bus number range内的bus number。5每个设备都必须有function0funciton0可以是一个PF支持SR-IOV可以包含多个VFs不同function的arb的问题这里不展开讨论下面主要讲一下设备AR-IOV的配置和使用。4PCIe设备SR-IOV配置SR-IOV extended capability每一个支持AR-IOV的PF都需要一个SR-IOV extended capability寄存器。SR-IOV capability register如下图所示SR-IOV control register如下图所示SR-IOV Control Registeroffset 08h的bit 0表示VF Enable如果clear了bit 0这个PF的所有VFs都会被disabled。Bit 1表示VF Migration Enable表示是否支持VF migration。Bit 3是VF MSEmemory space enable表示能否访问该PF下VFs的memory space。Bit 4用于指示上游设备是否enable了ARI。SR-IOV status register如下图所示pcie gen6 好像已经不再使用。回到SR-IOV capability register 中继续来看TotalVFs表明这个PF可以支持的最大VFs数量InitialVFs表明这个PF初始的VFs数量NumVFs表示这个PF当前enabled的VFs的数量function dependency link表示不同PF之间是否有依赖如果没有这个寄存器需要由软件填成PF自身的fucntion number如果PF之间有一个dependency list且PFa为其中一个则PFa的fucntion dependency link的值应该为dependency list中下一个PF比如PFbdependency list中最后一个PF的值为list中的第一个PF。dependency对PCIe配置有如下约束1同一个dependency list中的PFinitialVFs和TotalVFs的值必须相等2软件需要给同一个dependency list中的PF配置相同的NumberVFs和VF enable3同一个dependency list中的PF必须分配给相同的SIsVFs也必须要分配给相同的SIsFirst VF offsetoffset 14hPF的第一个VF routing ID offsetVF Strideoffset 16h表示该PF中不同VFs之间的routing ID offsetVF device ID offset 1Ah表示每个VF呈现给的device IDsupported page sizesoffset 1ch表示该PF可以支持的page size4KB*2n if bit n is set协议要求PFs至少要支持4/8/64/256/KB1MB和4MB page size。system page sizeoffset 20h表示系统最终使用的page size。VF BAR0-VF BAR5VFs 的base address register用法和一般的PCI BARs一样系统软件先写全1然后读回来确定每个BAR空间大小最后系统软件可以给每个BAR分配基地址所有BAR的空间大小加起来就是这个PF中VFs的空间大小所有VF大小是相同的第一个有效的VF BAR中的地址就是这个PF的第一个VF的基地址其他VFs的基地址需要基于第一个VF的基地址的每个VF的空间大小换算根据First VF Offset和VF Stride可以确定每个VF的routing IDRID所有的VFs和PFs都有distinct routing IDs假设设备对应的bus number是N那么最终的routing ID是256*N RID。

相关文章:

PCIe协议学习-浅谈SR-IOV

转载:(13 封私信 / 81 条消息) PCIe协议学习-浅谈SR-IOV - 知乎 1:背景和概述: SR-IOV,全称叫single root I/O virtualization and sharing,顾名思义,这是一种虚拟化技术,目的是让多个终端或者…...

CI/CD——使用Jenkins实现自动化部署与持续集成之jenkins的安装部署

DevOps详解与监控方法论https://blog.csdn.net/xiaochenxihua/article/details/157059743 Git实践——GitLab服务器的部署与使用https://blog.csdn.net/xiaochenXIHUA/article/details/160722357 一、CI/CD与Jenkins介绍 1.1、CI/CD是什么 CI/CD(持续集成/持续交付…...

第1章 Nginx 简介与架构【20260503】-002篇-Nginx日志切割

文章目录 ✅ Nginx 日志切割(生产级实操) 一、为什么要做日志切割(SRE 视角) 二、推荐方案对比 三、标准实操(DevOps 交付级) 1️⃣ logrotate 配置文件(重点) 2️⃣ 手动验证(SRE 必会) 四、故障场景(SRE 面试/考核高频) ❌ 故障 1:磁盘爆满 ❌ 故障 2:reload 后…...

第1章 Nginx 简介与架构【20260503】-001篇

文章目录 1.2 Nginx 进程模型(Master + Worker) 进程职责 课后习题(升级版) ✅ 实操考核(强烈建议纳入上岗考核) 实操 1:进程模型验证(SRE) 实操 2:热重载为何不中断?(面试/考核高频) 执行流程(重点) 实操 3:配置即代码(DevOps) 实操 4:交付标准(Delivery …...

扩散模型推理加速:SenCache动态缓存技术解析

1. 项目概述:当扩散模型遇上推理加速在生成式AI领域,扩散模型(Diffusion Models)已经成为图像生成的主流架构之一。然而这类模型在推理阶段需要多次迭代计算的特点,使得其推理速度成为实际应用中的主要瓶颈。SenCache正…...

FastClaw:一键在Mac上创建预装OpenClaw的Linux虚拟机

1. 项目概述:为什么要在Mac上运行Linux虚拟机来使用OpenClaw? 如果你是一位Mac用户,同时又需要用到一些只能在Linux环境下稳定运行或性能更优的特定工具,比如OpenClaw,那你可能正面临一个经典的“平台鸿沟”问题。直接…...

超导神经元原理与生物神经元模拟技术解析

1. 超导神经元的基础原理与生物神经元模拟超导神经元是一种利用超导材料特性模拟生物神经元行为的硬件实现。其核心工作机制建立在超导体特有的量子现象之上,特别是约瑟夫森效应和磁通量子化原理。当超导体被冷却至临界温度以下时,电子会形成库珀对&…...

保姆级教程:在CentOS 7上用Docker Compose一键部署EdgeX Foundry 3.1(含虚拟设备服务)

保姆级教程:在CentOS 7上用Docker Compose一键部署EdgeX Foundry 3.1(含虚拟设备服务) EdgeX Foundry作为开源物联网边缘计算框架,正成为工业4.0和智能家居领域的基础设施。本教程将带您从零开始,在CentOS 7系统上完成…...

点云遮挡检测实战:用PCL和Open3D复现HPR算法(附完整C++/Python代码)

点云遮挡检测实战:用PCL和Open3D复现HPR算法(附完整C/Python代码) 在三维视觉和机器人领域,点云遮挡检测是一个基础但至关重要的任务。想象一下,当机器人试图在复杂环境中导航时,准确识别哪些物体表面可见、…...

从零构建个人ChatGPT:基于Llama与LoRA的SFT与RLHF全流程实战

1. 从零到一:构建你自己的个人ChatGPT全流程拆解想不想拥有一个像ChatGPT那样能说会道、善解人意的AI伙伴,但它只属于你,能记住你的习惯,理解你的偏好,甚至用你喜欢的风格和你聊天?这听起来像是科幻电影里的…...

XFCE 桌面环境组件详解:从面板到剪贴板管理

文章目录1. XFCE 简介2. 核心组件架构3. xfce4-panel:面板系统3.1 功能概述3.2 关键命令3.3 插件生态3.4 配置文件位置4. xfce4-keyboard-settings:键盘与快捷键管理4.1 功能概述4.2 启动方式4.3 快捷键配置结构4.4 底层存储机制5. xfce4-clipman&#x…...

RDD API 学习

📊 RDD vs DataFrame 对比特性RDDDataFrameAPI 风格函数式(Scala/Java)声明式(SQL)性能较慢更快(Catalyst 优化)类型安全编译时运行时内存管理手动(JVM)自动(…...

构建命令行AI助手:GPT-Chatbot-CLI项目实战与架构解析

1. 项目概述与核心价值 最近在折腾命令行工具,发现一个挺有意思的项目: rukh-debug/gpt-chatbot-cli 。简单来说,这是一个让你能在终端里直接和GPT模型对话的命令行聊天机器人。对于我这种常年泡在终端里的开发者来说,这玩意儿简…...

告别Steam限制!WorkshopDL终极指南:742款游戏的创意工坊模组一键下载

告别Steam限制!WorkshopDL终极指南:742款游戏的创意工坊模组一键下载 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾经因为游戏不在Steam平台而…...

PRiSM开源音素识别基准:技术解析与应用实践

1. 项目背景与核心价值语音技术领域最近迎来一个重要里程碑——PRiSM开源基准的发布。作为从业者,我深知在音素识别这个细分领域长期缺乏可靠的评估标准。PRiSM的出现填补了这一空白,它不仅是首个开源的音素识别基准,更通过严谨的设计为语音模…...

从零部署CoPaw:打造本地化、可扩展的个人AI助手工作站

1. 项目概述:你的个人AI助手工作站如果你和我一样,每天被钉钉、飞书、QQ、Discord、iMessage等一堆聊天工具的消息淹没,同时又希望有一个真正属于自己的、能处理各种琐事的智能助手,那么今天聊的这个项目,你一定会感兴…...

Theo-Docs:基于Vite+Vue3的现代化静态文档站点生成器实践指南

1. 项目概述:一个面向开发者的现代化文档工具最近在整理团队内部的技术文档和API接口说明时,我又一次被那些散落在各个角落的Markdown文件、更新不及时的Wiki页面,以及风格迥异的静态站点搞得头疼。我相信很多技术团队负责人或独立开发者都有…...

每周AI工具模型更新趋势前瞻

抱歉,由于搜索工具暂时未能返回关于“过去一周内 AI 领域新工具、开源模型及 API 更新”的具体结果,我无法基于实时数据为您生成包含引用标记的深度报告。不过,基于我现有的知识库,我可以为您梳理近期(截至2026年初&am…...

Hugging Face leRobot库:Transformer架构在机器人强化学习的实践

1. 项目背景与技术定位在机器人学习领域,数据驱动的训练方法正逐渐取代传统手工编程。Hugging Face最新开源的leRobot库正是瞄准了这一技术趋势,为开发者提供了端到端的机器人学习解决方案。这个库最吸引我的地方在于它巧妙地将Transformer架构与机器人控…...

深度解析YoRadio:ESP32音频流媒体系统的架构设计与实现机制

深度解析YoRadio:ESP32音频流媒体系统的架构设计与实现机制 【免费下载链接】yoradio Web-radio based on ESP32-audioI2S library 项目地址: https://gitcode.com/GitHub_Trending/yo/yoradio YoRadio是一个基于ESP32-audioI2S库构建的开源网络收音机系统&a…...

人机共生环境下的自我意识边界重构(世毫九实验室原创研究)

人机共生环境下的自我意识边界重构作者:方见华 单位:世毫九实验室引言 在人工智能技术日新月异的今天,人类正经历着一场前所未有的文明形态转变——从传统的碳基生命文明向碳硅共生文明演进。这一转变不仅体现在技术层面的突破,更…...

使用WebSocket在Responses API中加速代理工作流Speeding up agentic workflows with WebSockets in the Responses API

Speeding up agentic workflows with WebSockets in the Responses API 使用WebSocket在Responses API中加速代理工作流 https://openai.com/index/speeding-up-agentic-workflows-with-websockets/ When you ask Codex to fix a bug, it scans through your codebase for rel…...

PromptBridge:实现大语言模型间提示词无损迁移的开源工具

1. 项目背景与核心价值在AI技术快速迭代的今天,大语言模型(LLM)已经成为各行业智能化转型的核心基础设施。但不同厂商、不同版本的模型在提示词(prompt)设计上存在显著差异,这导致企业面临一个现实困境&…...

Copr命令行工具实战:从RPM打包到自动化构建发布

1. 项目概述与核心价值 最近在折腾一些RPM包的构建,发现了一个挺有意思的项目——sureclaw-ai/copr。这名字乍一看,可能很多朋友会联想到Fedora社区那个大名鼎鼎的Copr构建服务。没错,这个项目正是那个服务的命令行客户端工具。但如果你以为…...

EH-TEMPO算法:开放量子系统模拟的高效解决方案

1. EH-TEMPO算法:开放量子系统模拟的革命性突破在量子计算和量子信息处理领域,开放量子系统的非马尔可夫动力学模拟一直是个令人头疼的难题。想象一下,你正在观察一个量子系统与周围环境的互动——就像试图在狂风暴雨中追踪一片落叶的精确轨迹…...

Power Apps上传文件到SharePoint时,Base64转换和JSON解析的坑我都帮你踩过了

Power Apps文件上传实战:避开Base64与JSON解析的十大深坑 当你第一次在Power Apps中尝试将文件上传到SharePoint时,那种看似简单的操作背后隐藏着无数可能让你熬夜调试的陷阱。作为经历过无数次失败的老兵,我想带你直击那些官方文档从未提及的…...

Nat Commun|吴华君/徐明团队开发跨尺度三维基因组预测深度学习框架Hi-Compass

染色质三维结构通过构建远端调控元件之间的空间互作精细调控基因转录,在决定细胞身份、组织发育和疾病发生等生物学过程中扮演重要角色【1–3】。基于染色体构象捕获(3C)的Hi-C技术实现了全基因组尺度染色质互作图谱的绘制,并陆续…...

TSMaster实战:手把手教你将A2L标定变量和DBC信号录进同一个BLF文件

TSMaster实战:A2L标定变量与DBC信号同步记录至BLF文件的完整指南 在汽车电子开发与测试领域,数据记录的完整性和同步性往往直接影响问题诊断的效率。想象这样一个场景:当发动机控制单元(ECU)的燃油喷射参数发生异常波动…...

Claude桌面应用效率增强:claude-hooks钩子机制详解与实战

1. 项目概述:一个为Claude桌面应用量身定制的效率增强工具如果你和我一样,日常重度依赖Anthropic的Claude桌面应用进行代码编写、文档阅读和头脑风暴,那你肯定也遇到过类似的痛点:想要快速执行一个Shell命令,得手动切换…...

2025年实时影响因子:中国期刊(26.5.3更新)

点击蓝字 关注我们2025年实时影响因子: 中国期刊近日,我们通过Web of Science 官网数据库,对中国期刊开展系统性分析。本次重点筛选2025年影响因子 (IF) 排名靠前、国内科研人员高度关注的100余本核心期刊。结果显示,105本中国期刊有10本突破…...