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

专栏导读:为什么需要从 MM 理解 HMM

一个真实的困境假设你是一个 GPU 计算框架的开发者。用户写了这样一段代码float*datamalloc(1GB);// ... 填充数据 ...gpu_kernelgrid,block(data);// 希望 GPU 直接访问 data在传统编程模型下这不可能工作——GPU 有自己的显存VRAMCPU 的malloc返回的指针对 GPU 毫无意义。程序员必须手动管理数据搬移//h:host, d:device. 就是我们常说的 h2d,d2hfloat*h_datamalloc(1GB);// CPU 内存float*d_datagpu_malloc(1GB);// GPU 显存memcpy_to_gpu(d_data,h_data,1GB);// 显式拷贝gpu_kernelgrid,block(d_data);// 用 GPU 指针memcpy_from_gpu(h_data,d_data,1GB);// 拷贝回来这套显式拷贝模型有几个致命问题编程复杂度高— 程序员必须手动管理两套指针和数据一致性无法处理指针追踪— 如果数据结构包含指针链表、树拷贝后指针全部失效过度拷贝— 无法知道 GPU 实际会访问哪些页面只能全量拷贝与系统接口不兼容—fork()、mmap()、信号处理等都可能修改地址空间驱动无从得知理想状态是CPU 和 GPU 共享同一个虚拟地址空间指针在两边通用数据按需自动迁移。这就是 HMM 要解决的问题。什么是 HMMHMMHeterogeneous Memory Management是 Linux 内核内存管理子系统的一组扩展它让设备GPU、FPGA、SmartNIC 等能够镜像进程页表— 设备维护一份与 CPU 一致的地址映射进程用同一个虚拟地址在 CPU 和设备间通信感知页表变化— CPU 侧的munmap、mremap、COW 等操作会自动通知设备更新映射双向迁移页面— 页面可以在 CPU RAM 和设备内存之间按需迁移对应用透明让设备内存参与内核框架— 设备内存拥有struct page可以被内核的迁移、回收等框架管理HMM不是一个独立的子系统而是对现有 MM 机制的一系列精准扩展。它的代码量很小核心仅 ~700 行但它依赖的基础设施横跨整个 MM。为什么必须从 MM 理解 HMM很多开发者试图直接阅读mm/hmm.c然后迅速迷失——因为 HMM 的每一行代码都在调用 MM 的底层接口HMM 做的事依赖的 MM 基础设施遍历进程页表获取物理地址五级页表结构、walk_page_range()框架解码页面在设备内存中非驻留 PTE 编码device private entry保持设备映射与 CPU 一致MMU Notifier 序列号协议迁移页面到设备内存migrate_vma*()三阶段迁移框架让设备内存有 struct pageZONE_DEVICE、dev_pagemap代替设备触发缺页handle_mm_fault()FAULT_FLAG_REMOTE如果你不理解这些基础设施HMM 的代码就是一堆无法解读的函数调用。反过来如果你沿着 MM 的进化脉络学习HMM 的每个设计决策都变得顺理成章。MM 的进化脉络Linux MM 并非一开始就具备管理设备内存的能力。它是随着硬件需求的变化一步步进化而来的注意每一步进化都是在前一步的基础上扩展而非推倒重来mmu_notifier最初是为 KVM 设计的HMM 直接复用它来通知设备migrate_pages()最初是为 NUMA 均衡设计的HMM 扩展出migrate_vma*()支持设备迁移swap entry编码最初只有 swap 和 migration 两种HMM 新增了 device private/exclusive entryHMM 的设计哲学就是复用而非重造。这也是为什么理解 MM 基础是掌握 HMM 的必经之路。硬件背景谁在用 HMMGPU主要消费者厂商驱动HMM 使用方式AMDamdgpu / KFDhmm_range_fault()migrate_vma*()实现 SVMROCmIntelXe通过drm_gpusvm框架使用 HMMNVIDIANouveau开源nouveau_svm使用 HMM 做 SVMCXL 设备CXLCompute Express Link设备提供 CPU 可直接访问的扩展内存。内核用DEVICE_COHERENT类型的 ZONE_DEVICE 管理未来可能成为 HMM 最大的应用场景。其他FPGA— 可通过 HMM 共享进程地址空间SmartNIC / DPU— RDMA 设备内存管理持久化内存PMEM— 虽然不用 HMM但共享 ZONE_DEVICE 基础设施本专栏的学习路径我们把 HMM 的知识体系分为8 层沿进化脉络从底向上每一层我们都会讲清经典 MM 是怎么做的— 建立基础心智模型指出不够在哪里— 面对设备内存时的局限展示如何扩展— 内核社区的解决方案这样当你最终读到mm/hmm.c时每一行代码都不再陌生。前置知识本专栏假设你具备C 语言基础— 能读懂内核代码指针、位操作、宏操作系统概念— 虚拟内存、页表、中断等基本概念基本的内核阅读能力— 知道如何浏览内核源码树不需要你已经精通 MM 或 GPU 驱动——这些正是本专栏要教的。关键源码版本本专栏基于Linux 6.x内核源码。HMM 相关代码在近几年持续演进核心文件包括文件内容mm/hmm.cHMM 核心实现~700 行include/linux/hmm.hHMM 公共 APImm/migrate_device.c设备迁移框架mm/memremap.cZONE_DEVICE 实现lib/test_hmm.cHMM 测试模块最佳学习参考下篇预告第 1 篇虚拟地址空间与页表——每个进程的私有世界我们将从 MM 最基础的概念开始进程如何拥有自己的虚拟地址空间页表如何将虚拟地址翻译为物理地址五级页表的结构是什么样的这些看似老生常谈的基础恰恰是 HMMhmm_range_fault()遍历页表时的核心路径。打好这个基础后面的一切才能事半功倍。

相关文章:

专栏导读:为什么需要从 MM 理解 HMM

一个真实的困境 假设你是一个 GPU 计算框架的开发者。用户写了这样一段代码&#xff1a; float *data malloc(1GB); // ... 填充数据 ... gpu_kernel<<<grid, block>>>(data); // 希望 GPU 直接访问 data在传统编程模型下&#xff0c;这不可能工作——GPU …...

你的方差分析做对了吗?避开SPSS中ANOVA的5个经典坑(从数据准备到结果报告)

你的方差分析做对了吗&#xff1f;避开SPSS中ANOVA的5个经典坑&#xff08;从数据准备到结果报告&#xff09; 在科研论文和市场调研中&#xff0c;方差分析&#xff08;ANOVA&#xff09;是最常用的统计方法之一。许多研究者虽然掌握了SPSS的基本操作&#xff0c;却在结果报告…...

别再装ModelSim了!用HDLBits网页版5分钟搞定Verilog仿真和波形图

5分钟极速验证&#xff1a;用HDLBits网页版替代传统Verilog仿真工具 在图书馆公用电脑上突然有了个FPGA设计灵感&#xff0c;却发现自己没装ModelSim&#xff1f;公司电脑没有管理员权限&#xff0c;无法安装Vivado Simulator&#xff1f;别急着放弃——打开浏览器&#xff0c…...

手算反向传播:从链式法则到梯度消失的物理直觉

1. 项目概述&#xff1a;这不是又一节“神经网络入门”&#xff0c;而是一次真正踩进反向传播泥潭的实操复盘“Intro to Neural Networks Part II — Brilliant.org”这个标题乍看平平无奇&#xff0c;像是在线教育平台里再普通不过的一节进阶课。但如果你真点开它&#xff0c;…...

CLIP实战手记:零样本多模态工程的提示设计与特征重用

1. 这不是一篇论文导读&#xff0c;而是一份CLIP实战手记“Notes on CLIP: Connecting Text and Images”这个标题乍看像学术笔记&#xff0c;但在我过去三年用CLIP落地过7个真实项目&#xff08;从工业零件缺陷图文检索、非遗纹样跨模态匹配&#xff0c;到小红书风格迁移标签生…...

S7-1200通讯选型指南:RS485、Profinet还是开放式TCP?看完这篇不再纠结

S7-1200通讯选型指南&#xff1a;RS485、Profinet还是开放式TCP&#xff1f;看完这篇不再纠结 在工业自动化项目中&#xff0c;PLC通讯方案的选择往往让工程师们陷入两难——既要考虑当下设备的兼容性&#xff0c;又要为未来升级预留空间。作为西门子S7-1200系列PLC的用户&…...

内网服务器福音:手把手教你搞定Supervisor 4.0.4离线安装(附CentOS 7.6 + Python 2.7.5环境避坑指南)

内网环境下的Supervisor 4.0.4离线部署全攻略&#xff1a;从依赖解析到避坑实践 在金融、政务等安全敏感领域&#xff0c;生产服务器往往部署在严格隔离的内网环境中。这种架构虽然保障了系统安全性&#xff0c;却给运维工具链的部署带来了独特挑战——无法直接通过pip install…...

告别C盘爆满!手把手教你将VS2010旗舰版安装到其他盘(附完整配置流程)

告别C盘爆满&#xff01;手把手教你将VS2010旗舰版安装到其他盘&#xff08;附完整配置流程&#xff09; 对于开发者而言&#xff0c;Visual Studio 2010&#xff08;VS2010&#xff09;作为经典的开发环境&#xff0c;至今仍被许多项目所依赖。然而&#xff0c;随着系统盘空间…...

告别手动建模!用Python脚本自动生成Tetgen四面体网格输入文件(附完整代码)

告别手动建模&#xff01;用Python脚本自动生成Tetgen四面体网格输入文件&#xff08;附完整代码&#xff09; 在工程仿真和科学计算领域&#xff0c;四面体网格生成是有限元分析、流体力学模拟等任务的关键前置步骤。Tetgen作为一款开源的四面体网格生成工具&#xff0c;凭借其…...

从零手写K-Means聚类算法:理解初始化、分配与收敛的底层原理

1. 项目概述&#xff1a;从零手写K-Means&#xff0c;不只是调包&#xff0c;而是真正理解聚类的“心跳”你有没有过这种感觉&#xff1a;调用sklearn.cluster.KMeans跑完一个聚类任务&#xff0c;结果图一出、轮廓系数一算&#xff0c;好像就结束了&#xff1f;但当同事问起“…...

Agent Runtime 正在 commoditize:从 session-as-event-log 看 AI 基础设施分层

1. 这不是新赛道&#xff0c;而是 runtime 层的“操作系统时刻”正在重演你打开手机看到新闻标题《Anthropic Just Shipped the Layer That’s Already Going to Zero》&#xff0c;第一反应可能是&#xff1a;又一个大模型公司搞出了什么黑科技&#xff1f;但如果你真花十分钟…...

工业眼睛:11 老手血泪Tips + 新手避坑清单

11 老手血泪Tips + 新手避坑清单 上回聊完机器视觉给工厂安了“眼睛”,AI让它升级成“火眼金睛”,数据闭环一接,生产线直接会自己挑毛病。今天不整高大上的理论,来点真刀真枪的干货——11条老手血泪Tips(全是师傅们用命换来的教训,踩坑踩到哭),外加新手避坑清单(直接…...

别再只会import了!用Python的importlib实现插件化架构(附完整代码)

用Python的importlib构建插件化架构&#xff1a;从理论到实战 在软件开发中&#xff0c;插件化架构是一种强大的设计模式&#xff0c;它允许应用程序在运行时动态加载和卸载功能模块。Python的importlib模块为实现这种架构提供了底层支持&#xff0c;远比简单的import语句强大得…...

从云台控制理解双环PID:手把手调试大疆GM6020电机的角度与速度环

从云台控制理解双环PID&#xff1a;手把手调试大疆GM6020电机的角度与速度环 在机器人控制领域&#xff0c;精准的位置控制是实现高性能运动的基础。无论是工业机械臂的重复定位&#xff0c;还是竞技机器人云台的快速响应&#xff0c;都离不开对电机运动的精确控制。而在这其中…...

保姆级教程:用ArcGIS Pro搞定全国30米DEM数据下载与无缝拼接(附避坑指南)

全国30米DEM数据高效处理&#xff1a;ArcGIS Pro全流程实战指南 对于GIS从业者和研究者来说&#xff0c;获取并处理全国范围的数字高程模型(DEM)数据是一项基础但关键的工作。传统方法往往效率低下且容易出错&#xff0c;而ArcGIS Pro凭借其现代化架构和强大工具链&#xff0c;…...

Marginalia代码实现原理:深入理解SQL查询注释的内部工作机制

Marginalia代码实现原理&#xff1a;深入理解SQL查询注释的内部工作机制 【免费下载链接】marginalia Attach comments to ActiveRecords SQL queries 项目地址: https://gitcode.com/gh_mirrors/ma/marginalia Marginalia是一款为ActiveRecord查询添加注释的实用工具&a…...

从UISegmentedControl迁移到TwicketSegmentedControl:完整迁移指南

从UISegmentedControl迁移到TwicketSegmentedControl&#xff1a;完整迁移指南 【免费下载链接】TwicketSegmentedControl Custom UISegmentedControl replacement for iOS, written in Swift 项目地址: https://gitcode.com/gh_mirrors/tw/TwicketSegmentedControl 想要…...

BurpBounty入门指南:如何快速提升Burp Suite扫描能力

BurpBounty入门指南&#xff1a;如何快速提升Burp Suite扫描能力 【免费下载链接】BurpBounty Burp Bounty (Scan Check Builder in BApp Store) is a extension of Burp Suite that allows you, in a quick and simple way, to improve the active and passive scanner by mea…...

Tensor Comprehensions高级特性:多GPU支持和内核重用策略的终极指南

Tensor Comprehensions高级特性&#xff1a;多GPU支持和内核重用策略的终极指南 【免费下载链接】TensorComprehensions A domain specific language to express machine learning workloads. 项目地址: https://gitcode.com/gh_mirrors/te/TensorComprehensions Tensor…...

CANN/asc-devkit Ascend C矢量压缩API

asc_squeeze 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitcode.co…...

KaTrain围棋AI:如何用数据可视化与智能分析重塑围棋学习体验

KaTrain围棋AI&#xff1a;如何用数据可视化与智能分析重塑围棋学习体验 【免费下载链接】katrain Improve your Baduk skills by training with KataGo! 项目地址: https://gitcode.com/gh_mirrors/ka/katrain 围棋作为一项拥有数千年历史的智力运动&#xff0c;其学习…...

Linux调度器演进:从O(1)到CFS再到EEVDF

Linux 进程调度演化史&#xff1a;从 O(n) 到 CFS 再到 EEVDF&#xff0c;30 年调度器的三次跃迁 进程调度是操作系统的脉搏。这篇文章不堆概念&#xff0c;带你从 Linux 0.01 走到内核 6.6&#xff0c;看懂调度器为什么这样设计&#xff0c;以及每次重构到底解决了什么问题。 …...

DownKyi跨平台版终极指南:B站视频下载与音视频分离完整教程

DownKyi跨平台版终极指南&#xff1a;B站视频下载与音视频分离完整教程 【免费下载链接】downkyicore 哔哩下载姬(跨平台版)downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提…...

image.nvim高级功能:虚拟填充、窗口重叠处理完全解析

image.nvim高级功能&#xff1a;虚拟填充、窗口重叠处理完全解析 【免费下载链接】image.nvim &#x1f5bc;️ Bringing images to Neovim. 项目地址: https://gitcode.com/gh_mirrors/im/image.nvim image.nvim是一款专为Neovim打造的图片显示插件&#xff0c;它突破了…...

微信小程序二维码生成实战指南:weapp-qrcode高效解决方案

微信小程序二维码生成实战指南&#xff1a;weapp-qrcode高效解决方案 【免费下载链接】weapp-qrcode 微信小程序快速生成二维码&#xff0c;支持回调函数返回二维码临时文件 项目地址: https://gitcode.com/gh_mirrors/weap/weapp-qrcode 在微信小程序开发中&#xff0c…...

Aimmy终极模型选择指南:5个秘诀帮你为不同游戏找到最佳ONNX模型

Aimmy终极模型选择指南&#xff1a;5个秘诀帮你为不同游戏找到最佳ONNX模型 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai/Aimmy …...

macOS用户必看:vscode-icons安装与使用完整手册

macOS用户必看&#xff1a;vscode-icons安装与使用完整手册 【免费下载链接】vscode-icons Custom Visual Studio Code Icons 项目地址: https://gitcode.com/gh_mirrors/vsc/vscode-icons 想要为你的Visual Studio Code换上个性化图标吗&#xff1f;vscode-icons项目提…...

开源数字微流控实验室平台:用电场操控微观世界的革命性技术

开源数字微流控实验室平台&#xff1a;用电场操控微观世界的革命性技术 【免费下载链接】OpenDrop Open Source Digital Microfluidics Bio Lab 项目地址: https://gitcode.com/gh_mirrors/ope/OpenDrop 想象一下&#xff0c;在生物实验室中&#xff0c;研究员需要精确操…...

Pocket Sync:Analogue Pocket玩家的终极游戏管理解决方案

Pocket Sync&#xff1a;Analogue Pocket玩家的终极游戏管理解决方案 【免费下载链接】pocket-sync A GUI tool (Mac, Windows, Linux) for doing stuff with the Analogue Pocket 项目地址: https://gitcode.com/gh_mirrors/po/pocket-sync 想象一下&#xff0c;你刚刚…...

OpenHTMLtoPDF终极指南:三步实现专业PDF文档生成

OpenHTMLtoPDF终极指南&#xff1a;三步实现专业PDF文档生成 【免费下载链接】openhtmltopdf An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support. Now also with accessible PDF support (WCAG, Section 508, PDF/UA)…...