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

drm_gpusvm 与 drm_pagemap 执行顺序分析

概述在 SVMShared Virtual Memory实现中drm_gpusvm和drm_pagemap分属两个不同的抽象层协同完成 GPU 对进程虚拟地址空间的共享访问。两者的执行顺序并非固定的先底层后上层而是根据操作场景有不同的编排方式。职责划分组件职责drm_pagemap底层内存操作页面迁移system↔device、设备内存分配、DMA 映射、数据拷贝、CPU PTE 维护drm_gpusvmRange 管理与 GPU 侧状态跟踪range 创建/查找、hmm_range_fault 获取页面、DMA 地址管理、notifier 序列号验证xe_svm驱动级编排决定迁移策略、调用上述两者、更新 GPU 页表、TLB 刷新核心原则drm_pagemap 改变页面的物理归属CPU PTE 层面drm_gpusvm 感知这些变化并管理 GPU 侧的映射状态。凡涉及页面归属变更的操作pagemap 必须先于 gpusvm 的hmm_range_fault()因为后者依赖 CPU 页表来确定页面的当前位置。场景一GPU Page Fault — 迁移到 VRAM当 GPU 访问尚未映射的地址且迁移策略要求迁移到设备内存时执行顺序为GPU Page Fault │ ├─ 1. drm_gpusvm_range_find_or_insert() [range 管理] │ 创建或查找覆盖故障地址的 svm_range │ 纯元数据操作不涉及实际内存 │ ├─ 2. drm_pagemap_populate_mm() [底层迁移] │ ├─ migrate_vma_setup() 获取源 CPU 页 │ ├─ ops-populate_devmem_pfn() 分配设备内存 │ ├─ drm_pagemap_migrate_map_pages() DMA 映射 CPU 页 │ ├─ ops-copy_to_devmem() 数据拷贝 system → device │ └─ migrate_vma_pages() 替换 CPU PTE 为 device_private │ 此时 CPU 页表已变更系统页 → device_private 页 │ ├─ 3. drm_gpusvm_range_get_pages() [获取页面状态] │ ├─ hmm_range_fault() 读取 CPU 页表现在看到 device_private 页 │ ├─ dpagemap-ops-device_map() DMA 映射设备页 │ └─ 更新 dma_addr[]设置 has_devmem_pagestrue │ ├─ 4. svm_range_update_gpu_range() [GPU 页表更新] │ 使用 dma_addr[] 填充 GPU 页表项 │ └─ 5. svm-flush_tlb() [TLB 刷新]关键约束步骤 2 必须在步骤 3 之前。代码注释明确说明Migration modifies the CPU page tables (replacing system PTEs with device_private PTEs), so it must happen before hmm_range_fault() in get_pages().如果顺序颠倒hmm_range_fault()将看到系统页而非设备页导致 GPU 映射指向错误的物理地址。迁移失败的回退步骤 2 失败不是致命错误流程继续执行步骤 3此时hmm_range_fault()看到的仍是系统页GPU 将通过 PCIe 访问系统内存作为回退方案。场景二GPU Page Fault — 不迁移系统内存当迁移策略不要求迁移或设备内存不可用时不涉及 drm_pagemapGPU Page Fault │ ├─ 1. drm_gpusvm_range_find_or_insert() [range 管理] │ ├─ 2. drm_gpusvm_range_get_pages() [获取页面] │ ├─ hmm_range_fault() 获取系统页 PFN │ ├─ dma_map_page() DMA 映射系统页 │ └─ 更新 dma_addr[]has_devmem_pagesfalse │ ├─ 3. svm_range_update_gpu_range() [GPU 页表更新] │ └─ 4. svm-flush_tlb()此场景下 drm_gpusvm 直接通过 HMM 和 DMA API 完成所有工作。场景三驱逐 — 从 VRAM 回到系统内存设备内存压力或 CPU 访问 device_private 页时触发驱逐Eviction Trigger (内存压力 / CPU 访问) │ ├─ 1. drm_pagemap_evict_to_ram() [底层驱逐] │ ├─ drm_pagemap_migrate_populate_ram_pfn() 分配系统页 │ ├─ ops-copy_to_ram() 数据拷贝 device → system │ └─ migrate_vma_pages() 恢复 CPU PTE 为系统页 │ 此时 CPU 页表已恢复device_private → 系统页 │ └─ 2. drm_gpusvm_range_unmap_pages() [清理 GPU 映射] ├─ dpagemap-ops-device_unmap() 解除设备页 DMA 映射 └─ 清除 has_dma_mapping / has_devmem_pages 标志关键约束步骤 1 必须先完成数据拷贝和 CPU PTE 恢复步骤 2 才能安全解除 GPU 侧映射否则可能丢失数据。场景四MMU Notifier 失效CPU 端 unmapCPU 端执行munmap()或部分 unmap 时MMU notifier 回调触发CPU munmap / unmap │ ├─ 1. svm_range_invalidate() [notifier 回调] │ 标记 range 失效记录 pending 操作 │ ├─ 2. drm_gpusvm_range_evict() [驱逐残留设备页] │ └─ 内部调用 drm_pagemap_evict_to_ram() 先迁移数据回系统 │ ├─ 3. drm_gpusvm_range_unmap_pages() [清理 GPU DMA 映射] │ └─ 4. drm_gpusvm_range_remove() [移除 range 元数据]执行顺序总结场景步骤 1步骤 2步骤 3Fault 迁移 VRAMgpusvm: 创建 rangepagemap: 迁移gpusvm: get_pagesFault 系统内存gpusvm: 创建 rangegpusvm: get_pages—驱逐回 RAMpagemap: 数据拷贝 恢复 PTEgpusvm: unmap—MMU invalidategpusvm: 标记失效pagemap: 驱逐gpusvm: unmap remove不变量Range 创建总是最先drm_gpusvm_range_find_or_insert()在所有实际内存操作之前因为它只是元数据管理。pagemap 的迁移操作总是在 gpusvm 的hmm_range_fault()之前因为后者依赖 CPU 页表反映当前页面位置。pagemap 的驱逐操作总是在 gpusvm 的 unmap 之前必须先完成数据拷贝再解除映射。GPU 页表更新在 notifier lock 内完成确保与 MMU notifier 回调的串行化。同步机制锁/机制保护范围svm-svm_lockrange 查找/创建、迁移决策gpusvm-notifier_lockGPU 页表更新、range 状态检查notifier_seq检测 get_pages 到 GPU 页表更新之间 CPU 页表是否变化mmap_read_lockhmm_range_fault 期间保护 VMA

相关文章:

drm_gpusvm 与 drm_pagemap 执行顺序分析

概述 在 SVM(Shared Virtual Memory)实现中,drm_gpusvm 和 drm_pagemap 分属两个不同的抽象层,协同完成 GPU 对进程虚拟地址空间的共享访问。两者的执行顺序并非固定的"先底层后上层",而是根据操作场景有不同…...

3款轻量级替代方案:华硕笔记本硬件控制工具深度解析

3款轻量级替代方案:华硕笔记本硬件控制工具深度解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...

计算机春考-系统管理与服务器配置-01安装Windows Server 2012 R2操作系统

活动1 创建虚拟机1. 单击VMware 主界面中的【创建新的虚拟机】2. 进入【新建虚拟机向导】界面,选中【典型(推荐)】按钮设置配置类型,点击【下一步】3. 在安装客户机操作系统界面选择【稍后安装操作系统】,单击【下一步…...

解决 Antigravity 新谷歌账户无法登录的问题

最近在使用 Antigravity 时遇到一个奇葩问题,折腾了大半天终于解决,特意记录下来,希望能帮到有同样困扰的小伙伴 —— 老谷歌免费账户能正常登录 Antigravity,但新注册的谷歌 Pro 账户(和老账户一样都是美国地区&#…...

考虑浆液黏度时变性与重力效应的注浆压力作用下隧道围岩变形的流固耦合动态分析模型 基于6.1版本...

考虑浆液黏度时变性与重力效应的注浆压力作用下隧道围岩变形的流固耦合动态分析模型 基于6.1版本 可视化结果:位移大小(时间、应力不同而不同)、应力分布、 打开COMSOL 6.1新建模型时,突然发现隧道注浆模拟要考虑浆液黏度的时间变…...

CST可调谐太赫兹超材料吸收器仿真教学,石墨烯,二氧化钒,锑化铟等材料设置 包括建模过程,后处理

CST可调谐太赫兹超材料吸收器仿真教学,石墨烯,二氧化钒,锑化铟等材料设置 包括建模过程,后处理,吸收光谱图教学等 包括宽带吸收器、窄带,以及宽窄带吸收器设计"打开CST微波工作室,先别急着…...

偏振无关 宽带消色差 长波红外超透镜模型 粒子群优化算法 复现论文:2022年博士论文

偏振无关 宽带消色差 长波红外超透镜模型 粒子群优化算法 复现论文:2022年博士论文:消色差超透镜设计原理及其应用研究 论文介绍:采用各向同性的多种不同形状的超表面单元,利用庞大的数据库和粒子群优化算法,设计长波红…...

**发散创新:基于Python的轻量级知识推理引擎实现与实战**在人工智能飞速发展的今天,**知识推理**

发散创新:基于Python的轻量级知识推理引擎实现与实战 在人工智能飞速发展的今天,知识推理已成为构建智能系统的核心能力之一。它不仅支撑着推荐系统、问答机器人和语义搜索等场景,更是实现AI从“感知”向“理解”跃迁的关键路径。本文将带你…...

**发散创新:服务端渲染(SSR)的深度实践与性能优化实战**在现代前端架构

发散创新:服务端渲染(SSR)的深度实践与性能优化实战 在现代前端架构中,服务端渲染(Server-Side Rendering, SSR) 已不再是“可选特性”,而是提升首屏加载速度、SEO友好度和用户体验的核心手段之…...

AI大模型的简历如何写才能拿到面试机会?简历+项目+面试技巧+面试题一套全搞定!

AI大模型的简历如何写才能拿到面试机会?简历项目面试技巧面试题一套全搞定! 一、简历撰写:突出AI大模型核心能力 1. 技术栈明确标注 必写项: 框架:PyTorch、TensorFlow、Hugging Face Transformers、DeepSpeed、Lang…...

突破下载瓶颈:3个鲜为人知的ComfyUI加速方案,速度提升300%的秘密

突破下载瓶颈:3个鲜为人知的ComfyUI加速方案,速度提升300%的秘密 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and…...

企业级AI智能体平台技术评测:9款产品架构差异与生产落地能力分析

现在,大模型已经从“会聊天”进化到了“会干活”,AI智能体(AI Agent)成为这场变革的核心载体。麦肯锡数据显示,2025年已有62%的组织开展AI智能体相关实践,64%的企业认为AI提升了组织创新能力,其…...

如何永久保存微信聊天记录:WeChatMsg本地化数据管理完全指南

如何永久保存微信聊天记录:WeChatMsg本地化数据管理完全指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

AutoCAD数据处理的.NET解决方案:ACadSharp全功能指南

AutoCAD数据处理的.NET解决方案:ACadSharp全功能指南 【免费下载链接】ACadSharp C# library to read/write cad files like dxf/dwg. 项目地址: https://gitcode.com/gh_mirrors/ac/ACadSharp 在工程数字化时代,如何高效处理AutoCAD文件数据已成…...

5大核心功能打造高效媒体播放:免费开源解码工具LAV Filters全解析

5大核心功能打造高效媒体播放:免费开源解码工具LAV Filters全解析 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 在数字媒体播放领域&#xff0c…...

LangChain全面解析:从入门到实战,构建你的第一个AI应用

一、什么是LangChain? LangChain是一个专为大型语言模型(LLM)应用开发设计的开源框架,由Harrison Chase于2022年10月发布。它提供了一套标准化的接口和工具,帮助开发者快速构建基于LLM的智能应用程序。 LangChain的核心理念是将LLM与外部数据源、计算资源和其他工具连接…...

基于九轴传感器 + K-means 聚类的振动异常检测实战教程

(嵌入式 / 工业监测场景:设备振动、电机故障、结构松动、碰撞异常实时检测)一、前言(你能学到什么)这篇文章不讲虚的,直接带你做一个工业级轻量异常检测系统:用 LSM6DS3TR-C(6 轴&am…...

谷歌SEO网站收录秘籍:如何用AI工具去创作高质量文章

2026年谷歌SEO算法趋势与AI工具实操逻辑,我将从 “技术基建 - 关键词挖掘 - AI创作优化 - 收录加速” 四大核心环节,拆解 AI 创作高质量收录文章的完整方法论,所有技巧均基于最新实测数据与工具实操经验。一、前提认知:AI 谷歌 S…...

不再依赖翻译专员:跨马翻译让运营人员也能独立完成高质量多语言出图

一、一个让中型跨境团队头疼的问题 我们团队从最初的单人作战发展到现在的十五人规模,花了大概三年时间。团队架构从最早的"运营一肩挑",逐步细分为运营组、产品组、设计组、客服组和市场组。分工越来越明确,但问题也随之而来——翻…...

C语言完美演绎6-18

/* 范例&#xff1a;6-18 */#include <stdio.h> #include <conio.h>int main(){int a;printf("请输入你的分数(0-100)");scanf("%d",&a);if(a>0){if(a<100){ printf("你输入的分数是%d",a); }else{ printf("你输入的…...

CLI为什么突然爆了?一文讲清 Skill、MCP、CLI 的真实关系

导读最近可以明显看到一个变化&#xff1a;钉钉、飞书、企业微信&#xff0c;开始陆续开放 CLI 能力 越来越多团队&#xff0c;不再只讨论提示词&#xff0c;而是在做一件更实际的事&#xff1a;让 AI 直接参与执行很多人开始有几个共通疑问&#xff1a;CLI 到底是什么Skill 和…...

android studio 解决git用户名和用户邮箱不一致的问题

原因&#xff1a;公司git代码提交&#xff0c;应该用的是公司的账号和邮箱&#xff0c;不要使用私人名称和邮箱&#xff1b;1、查看自己本地的git用户名、邮箱配置1.1、在用户目录下&#xff0c;文件名&#xff1a;.gitconfig1.2、打开后&#xff1a;[user]name zhangjian.***…...

Python NumPy 使用指南:科学计算的基石

Python NumPy 使用指南&#xff1a;科学计算的基石作者&#xff1a;书到用时方恨少&#xff01; 发布日期&#xff1a;2026年4月3日 阅读时长&#xff1a;约22分钟&#x1f4cc; 前言 在 Python 数据科学和数值计算的生态系统中&#xff0c;NumPy&#xff08;Numerical Python&…...

YOLO26涨点改进| TPAMI 2026 |独家创新首发、Conv改进篇| 引入LPM 局部先验特征增强模块,更加聚焦于目标区域并抑制背景干扰,助力目标检测、图像分割、图像恢复、图像增强有效涨点

一、本文介绍 🔥本文给大家介绍使用 LPM 局部先验特征增强模块 改进YOLO26网络模型,通过构建重要性图对特征提取过程进行引导,使模型能够更加聚焦于目标区域并抑制背景干扰,从而提升特征表达质量和目标区分能力。其优势体现在能够有效增强关键区域信息、提升小目标和复杂…...

Linux/C++多进程

给你最简洁、能直接用、新手一看就懂的 Linux C 多进程核心内容&#xff0c;不废话。1. 核心 API&#xff08;就这 3 个最常用&#xff09;fork()&#xff1a;创建子进程getpid()&#xff1a;获取当前进程 IDwait() / waitpid()&#xff1a;等待子进程结束&#xff0c;防止僵尸…...

OpenClaw × 88API:10 分钟搭好本地网关,解决 API 超时和多渠道切换(2026 完整教程)

你可能也踩过这些坑&#xff1a;项目快提测了&#xff0c;Claude API 突然超时&#xff0c;重试半天还是报错想临时换一个中转站兜底&#xff0c;结果又要改一遍 base_url、api_key、模型名一个渠道支持 Claude&#xff0c;不支持 Gemini&#xff1b;另一个支持 GPT&#xff0c…...

大以论文与万方、维普、WPS AI 综合对比(2026)

毕业季论文格式问题频发&#xff0c;手动排版耗时、通用模板不匹配、公式图表易错乱是常态。万方、维普以查重为主&#xff0c;WPS AI 偏向通用办公&#xff0c;而大以论文作为7 年专注毕业论文排版的老牌工具&#xff0c;在专业性、稳定性与院校适配性上更具优势。一、核心对比…...

OpenCore Legacy Patcher完全指南:突破硬件限制让旧Mac焕发新生

OpenCore Legacy Patcher完全指南&#xff1a;突破硬件限制让旧Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款强…...

突破视频内容壁垒:B站视频转文字的智能解决方案

突破视频内容壁垒&#xff1a;B站视频转文字的智能解决方案 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 在信息爆炸的时代&#xff0c;视频已成为知识传播…...

基于 HT for Web 的机车整备场数字孪生系统技术实现

本文基于 HT for Web&#xff08;基于 WebGL/Canvas 的纯前端可视化插件&#xff09;构建机车整备场数字孪生三维可视化系统&#xff0c;通过轻量化三维建模、实时数据对接、前端 API 驱动渲染&#xff0c;实现整备场全流程、全要素、全场景的数字化监管。该系统采用 B/S 架构&…...