自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

图形/计算GPU的驱动与虚拟化技术分享园地

围绕 AMDGPU,深入剖析GPU计算与虚拟化技术。涵盖内核驱动(KGD/KFD)逻辑、DRM 子系统对接机制、编译调试、性能调优、虚拟化的工程实践方案,为内核开发者、GPU 驱动工程师提供 AMDGPU 驱动的技术落地支撑。

  • 博客(343)
  • 资源 (1)
  • 收藏
  • 关注

原创 第6章:字符设备驱动的高级操作3:Choosing the ioctl Commands

本文介绍了scull驱动中ioctl命令的实现方式,重点分析了不同类型命令(S/T/G/Q/X/H)的功能特点和参数传递机制。其中,S/G命令用于设置/获取参数(指针传递),T/Q命令直接传递/返回简单值,X/H实现原子操作组合。文章强调内核推荐指针传递方式,因其具有更好的错误检测和扩展性,并指出原子操作在多线程环境中的重要性。同时对比了现代位域命令号与老式标量命令号的优劣,建议遵循幻数和序号的分配规范以提高代码质量。

2026-01-31 11:06:04 428

原创 第6章:字符设备驱动的高级操作2:Choosing the ioctl Commands

摘要:本文介绍了Linux字符设备驱动中ioctl命令的设计规范。为确保命令唯一性,ioctl编号应采用4个位域:8位魔数(需参考ioctl-number.txt)、8位序号、数据传输方向(无/读/写/双向)和数据大小。内核提供了_IO、_IOR、_IOW和_IOWR等宏来定义命令,并通过示例展示了scull驱动如何实现参数设置/获取功能。虽然可以直接使用标量值定义命令,但遵循位域规范更利于代码维护和内核兼容性。文中还解释了原子交换操作的实际应用场景和命令编号的设计原则。

2026-01-31 09:50:29 398

原创 第2章:架构总览

Virglrenderer采用分离式架构设计,实现Guest虚拟机与Host主机的协同渲染。Guest端运行图形应用和Mesa 3D库,通过virtio-gpu驱动将API调用编码为命令流;Host端由QEMU等VMM处理virtio-gpu设备模拟,并调用virglrenderer库进行实际渲染。核心层管理上下文、资源和同步,通过多后端(VIRGL/Venus/DRM等)适配不同物理GPU驱动。该架构在保证虚拟机隔离性的同时,高效利用Host的GPU硬件资源,支持OpenGL/Vulkan等主流图形API

2026-01-30 12:49:16 692

原创 第1章:Virglrenderer概述

Virglrenderer是一个开源的虚拟GPU渲染库,为虚拟机提供GPU加速功能。它基于Virtio-GPU协议,支持多后端架构(包括OpenGL/Vulkan/DRM等),通过零拷贝技术实现高效渲染。主要应用于云桌面、云游戏等虚拟化场景,使虚拟机能够利用物理GPU资源,显著提升图形性能。该项目由Red Hat发起,现由freedesktop.org维护,支持标准化图形API,具有高性能、灵活架构和安全隔离等特点,是Linux虚拟化生态中GPU加速的核心组件。

2026-01-30 12:20:01 453

原创 第6章:字符设备驱动的高级操作1:ioctl 系统调用

本章介绍了如何开发功能更完善的字符设备驱动,重点讲解了ioctl系统调用的实现。ioctl是设备控制的核心接口,允许用户空间通过文件描述符发送各种硬件控制命令。虽然ioctl因缺乏结构化而逐渐被替代,但它仍是实现设备操作最直接的方式。驱动中的ioctl方法通过switch语句处理不同命令,并要注意参数类型转换问题。此外,本章还探讨了用户空间同步、非阻塞I/O等高级功能,所有示例都基于内存虚拟设备实现,无需特定硬件即可测试。这些内容为后续开发实际硬件驱动奠定了基础。

2026-01-29 20:58:02 530

原创 第5章:并发与竞态条件-18:Read-Copy-Update

摘要:RCU(读-拷贝-更新)是一种针对读多写少场景的高性能无锁同步机制。读操作仅禁用抢占,写操作通过数据拷贝和指针切换实现无阻塞修改,最后通过等待"宽限期"(所有CPU完成调度)安全释放旧数据。典型应用包括网络路由表查询和驱动设备列表维护。RCU要求数据必须通过指针访问,读临界区必须原子化,且写操作需承担拷贝开销。相比读写锁,RCU在读性能上有显著优势,但仅适用于写操作极少的场景。内核提供了专用链表操作接口,驱动中需谨慎评估读写比例后使用。

2026-01-29 05:15:00 1841

原创 第5章:并发与竞态条件-17:seqlocks

摘要:Linux 2.6内核引入了顺序锁(seqlock)机制,适用于保护小型、频繁读取但写入较少的共享资源。该机制允许读取者无锁访问,但需检测与写入者的冲突,若冲突发生则重试访问。顺序锁通过序列号实现一致性检查,读取者获取序列号并在操作完成后验证其是否变化。写入者需获取排他锁(基于自旋锁实现),并提供多种变体(如IRQ安全版本)。顺序锁不适用于含指针的数据结构保护,主要用于需要多个一致值的简单计算场景。

2026-01-28 17:25:49 894

原创 AMD ROCm-SVM技术的实现与应用深度分析目录

本文档系统介绍AMDGPU中的共享虚拟内存(SVM)技术,内容分为四部分:基础篇讲解SVM概念、Linux内核基础和AMDGPU架构;数据结构篇分析核心数据结构如svm_range、svm_range_list等;核心功能篇深入范围管理、内存迁移、页表映射等实现;高级特性篇涵盖预取、VRAM驱逐、多GPU支持等。文档提供代码路径(drivers/gpu/drm/amd/amdkfd/)、学习路径建议和核心数据结构速查表,适合不同基础的开发者系统学习AMD SVM技术实现。

2026-01-28 08:24:17 1255

原创 VSCode 附加进程调试完整指南

本文介绍了VSCode中附加进程调试(Attach Debugging)的技术要点。主要内容包括:附加调试与启动调试的区别、四种配置方式(交互式进程选择、手动输入PID、指定调试器路径、源代码路径映射)、三种使用方法(VSCode UI操作、命令行配合、GDB命令行备选)。文章详细说明了每种配置的关键参数,并提供了常见场景下的实用技巧,如如何查找进程PID、映射源代码路径等。该技术适用于调试已运行进程、系统服务、子进程等特殊场景,是开发人员调试复杂程序的重要工具。

2026-01-27 11:37:42 776

原创 linux vm_operations_struct 详解

本文深入分析Linux内核中的VMA操作函数指针表(vm_operations_struct)。该结构体为虚拟内存区域(VMA)提供可定制的回调函数,支持文件系统、设备驱动等实现特定的内存管理行为。文章详细解析了关键回调函数:open()在VMA创建时初始化资源,close()在VMA移除时清理资源,以及最重要的fault()处理缺页异常。通过代码示例展示了这些回调的实际应用,并阐述了它们在内核内存管理中的核心作用,包括处理文件映射、设备内存管理和大页内存等场景。

2026-01-27 05:30:00 829

原创 linux VMA的映射标记VM_PFNMAP 和 VM_MIXEDMAP解读

深入分析Linux内核中两个关键VMA标志位VM_PFNMAP和VM_MIXEDMAP。VM_PFNMAP表示纯页帧号映射,不关联struct page结构,不支持引用计数和页面回收;VM_MIXEDMAP则支持混合映射,可同时包含普通页面和特殊页面。文章详细比较了两者的特性差异,包括struct page关联性、引用计数支持、COW行为等,并介绍了典型应用场景如设备内存映射、GPU共享内存等。通过内核代码片段展示了标志位的定义、自动设置机制及核心处理逻辑,为开发者正确使用这两种特殊内存映射提供技术参考。

2026-01-26 15:30:00 606

原创 引文:当SVM转角遇上Copy-on-Write (COW)

本文分析了Linux内核中fork系统调用的Copy-on-Write(COW)机制实现原理。重点阐述了fork时父子进程共享物理页面、标记页表项为只读并在写操作时触发COW的流程,以及在SVM环境中通过MMU Notifier机制保持CPU和GPU页表同步的解决方案。文章详细描述了COW的三个阶段:初始共享、写入触发和页面复制,并说明了MMU Notifier的回调注册和处理流程,确保异构计算环境下内存一致性。

2026-01-26 13:53:50 1551

原创 附录A 测试配置参考

本文档详细介绍了OpenCL测试环境配置和硬件要求。主要内容包括:1) OpenCL运行时环境变量设置(如CL_DEVICE_TYPE、CL_PLATFORM_ID等);2) CTS测试专用变量(如CL_WIMPY_MODE、CL_TEST_IMAGES等);3) 数学测试参数配置;4) 各厂商驱动调试变量;5) 系统级环境变量设置。第二部分规定了不同OpenCL版本(1.2/2.0/3.0)的设备硬件最低要求,以及嵌入式/完整配置的差异。

2026-01-24 08:24:53 961

原创 第42章 Contractions - 浮点收缩测试

本文介绍了浮点收缩(Floating-point Contractions)的概念及其在OpenCL中的实现。浮点收缩是指编译器将多个浮点运算合并为单个操作的优化技术,典型例子是将乘加运算合并为FMA指令。文章详细分析了收缩对计算精度的影响,并通过示例展示了不同舍入次数导致的结果差异。在OpenCL中,可通过FP_CONTRACT编译指示或命令行选项控制收缩行为,其中2.0+版本支持精确控制。最后介绍了CTS测试用例,通过对比启用和禁用收缩的两种内核实现,验证了收缩优化对计算结果的影响。

2026-01-24 08:23:48 719

原创 附录C:示例代码集

本文展示了Linux内核中MMU通知器、区间通知器和HMM的基本实现示例。最小MMU通知器示例包含release、invalidate_range_start和invalidate_range_end回调的实现;区间通知器示例展示了如何注册内存区间并处理失效事件;HMM示例说明了如何使用HMM获取页面并建立映射,包括hmm_range_fault的使用。这些代码片段为内核开发者提供了实现内存管理相关功能的参考模板,涵盖了基本注册、注销操作和关键回调函数的处理逻辑。

2026-01-23 00:15:00 445

原创 附录D:调试技巧

本文提供了Linux内核MMU notifier相关功能的调试与性能分析方法。主要内容包括内核配置选项(如MMU Notifier支持、HMM、调试工具等)、Ftrace/Tracepoint的使用技巧(基本命令、事件追踪、自定义Tracepoint)、以及常见问题排查方法(死锁调试、性能分析、内存问题检测)。通过详细的脚本示例和配置说明,展示了如何有效追踪和分析MMU notifier相关事件,识别性能瓶颈和潜在问题。这些工具和方法为内核开发者和驱动开发者提供了实用的调试手段。

2026-01-23 00:15:00 1322

原创 第12章: MMU notifier内核演进与未来方向

本文概述了Linux内核中mmu_notifier机制的演进历程。2008年初始版本为KVM虚拟化提供shadow page table同步,采用全局通知模型。2010-2018年通过引入invalidate_range()、mmu_notifier_range等改进提高并发性和事件粒度。2019年革命性引入mmu_interval_notifier,利用区间树将复杂度从O(N)降至O(log N + K)。2020年优化双状态invalidate机制,区分有无interval notifier的场景。

2026-01-22 00:15:00 1274

原创 第11章: 性能分析与调优

摘要:MMU通知器性能问题分析与优化 本文分析了三种典型的MMU通知器性能问题: 重试风暴:内存压力下频繁page fault导致-EBUSY重试,造成GPU利用率下降50-90%; 锁竞争:多vCPU场景下spin_lock(&kvm->mmu_lock)成为热点,阻塞虚拟机性能; 设备TLB刷新:小范围操作触发全TLB刷新,放大开销1000倍。 诊断方法包括: 通过perf trace定位重试和锁竞争 添加debugfs统计关键指标(重试率/延迟/无效化频率) 利用tracepoint追踪

2026-01-22 00:15:00 1129

原创 AMD KFD的BO设计分析系列10-1:amdgpu_bo 多地址空间关系汇总

本文总结了AMDGPU驱动中amdgpu_bo数据结构涉及的四大地址空间及其转换机制。amdgpu_bo作为核心内存管理单元,需要支持CPU虚拟地址、GPU虚拟地址、DMA地址和物理地址四种地址空间映射,以满足不同硬件组件对同一物理内存的访问需求。文章详细分析了各地址空间的特性和转换层次,包括CPU/GPU虚拟地址到物理地址的转换流程、DMA地址映射的IOMMU机制,以及地址映射的生命周期管理。

2026-01-21 05:00:00 2122

原创 AMD KFD的BO设计分析系列10-2:GTT BO 在有 IOMMU 系统中的完整地址转换流程

本文详细描述了在IOMMU系统中AMD GPU访问GTT区域BO的完整地址转换流程。系统包含CPU MMU、GPU MMU和IOMMU三大硬件组件,形成四级地址空间转换层次。BO创建阶段首先通过DMA API生成IOVA地址,当Pin BO到GTT Domain时,会调用dma_map_sgtable()进行IOMMU映射,最终将DMA地址填入BO对象。整个过程涉及从用户空间API调用到内核DMA映射,再到IOMMU层的地址转换,确保GPU能通过虚拟地址正确访问BO内存区域。

2026-01-21 05:00:00 856

原创 AMD KFD的BO设计分析系列9: amdgpu bo的dma address的使用

摘要 本文详细分析了TTM框架中dma_address的生成机制,该成员存储GPU可访问的DMA总线地址。主要内容包括: 基本概念:dma_address是CPU物理地址经IOMMU转换后的设备地址,与pages数组共同构成TTM内存管理核心结构。 生成流程分为四个阶段: 阶段1:BO创建时分配dma_address数组内存 阶段2:通过ttm_tt_populate()触发物理页分配和DMA映射 阶段3:GPU页表更新时使用这些地址 阶段4:解除映射时的清理操作。

2026-01-20 05:45:00 1601

原创 AMD KFD的BO设计分析系列8-5:GPU页表更新机制

本文分析了AMDGPU驱动中BO到VA映射的页表更新实现机制。核心流程通过amdgpu_vm_bo_update()函数触发,支持CPU直接写入和SDMA异步命令两种更新模式。系统根据VRAM可见性自动选择最优更新策略,处理三种主要场景:命令提交、BO迁移和BO销毁。关键实现包括DMA地址数组处理、权限标志合并和BO迁移状态转换,最终通过amdgpu_vm_update_range()完成硬件页表更新。该机制有效平衡了更新延迟与吞吐量,为GPU虚拟内存管理提供基础支撑。

2026-01-20 05:30:00 1252

原创 AMD KFD的BO设计分析系列8-8:GART vs GPUVM页表的全面对比

本文对比了AMD GPU的两种页表机制GART和GPUVM。GART采用简单的全局页表结构,仅需5个字段,支持CPU直接操作但缺乏并发控制。GPUVM则采用复杂的per-process页表设计,支持进程隔离、异步更新和状态机管理。在API层面,GART提供同步操作,而GPUVM支持异步映射和细粒度TLB刷新。生命周期方面,GART由驱动统一管理,GPUVM则与进程绑定。同步机制上,GART使用简单互斥锁,GPUVM采用多层次锁和Fence机制。

2026-01-19 22:09:53 1393 2

原创 Linux DRM 内存管理子系统的概念关系理解:gem、ttm、drm_buddy

Linux DRM子系统中的GEM、TTM和drm_buddy组件协同实现高效GPU内存管理。GEM作为用户空间接口,提供缓冲区句柄管理;TTM负责高层策略,处理缓冲区放置和迁移;drm_buddy则是底层物理块分配器,使用buddy算法优化内存分配。三者分别面向不同层级:GEM处理用户请求,TTM决策内存位置,drm_buddy执行物理分配。这种分层设计使驱动能灵活适配不同硬件,从集成显卡到独立显卡,既保证接口统一性,又实现内存管理的高效性。

2026-01-19 14:04:56 972

原创 第10章: MMU notifier与HMM的协作

本文摘要: HMM(Heterogeneous Memory Management)是Linux内核提供的异构内存管理框架,用于统一CPU与设备(如GPU、DSP等)的内存访问。它通过镜像页表技术实现虚拟地址空间共享,自动同步CPU和设备页表变化,支持透明的内存迁移和设备内存管理。HMM构建在mmu_interval_notifier机制上,利用序列号检测页表修改冲突,提供高效并发控制。核心数据结构包括hmm_range和HMM PFN标志位,通过hmm_range_fault()实现页表遍历和缺页处理。

2026-01-19 05:00:00 1939

原创 第9章: MMU notifier在RDMA/InfiniBand中的应用

本文介绍了RDMA中的ODP(On-Demand Paging)机制及其在InfiniBand驱动中的实现。ODP通过按需分页技术解决了传统RDMA内存固定(pin)的问题,支持内存overcommit和多租户场景。文章详细分析了ODP的核心数据结构、初始化与释放流程,并对比了Mellanox和Intel两种主流驱动的实现方式:Mellanox采用双阶段无效化机制(清除硬件映射后释放DMA),而Intel则通过TID缓存无效化处理用户态内存变化。

2026-01-19 05:00:00 1168

原创 第40章 Direct3D 11 互操作测试

本文介绍了OpenCL与Direct3D 11(D3D11)的互操作技术,重点分析了cl_khr_d3d11_sharing扩展功能。文章首先对比了D3D11与D3D10的主要差异,包括计算着色器支持、多线程渲染能力等特性改进。随后详细介绍了核心API接口,包括资源获取、内存对象创建和访问控制等关键函数。通过代码示例展示了如何创建D3D11设备、建立共享上下文以及实现结构化缓冲区的互操作。该技术为Windows平台上OpenCL与D3D11图形资源的共享提供了标准化的实现方案,支持缓冲区、2D纹理和3D纹理

2026-01-18 06:00:00 398

原创 第41章 Vulkan 互操作测试

Vulkan与OpenCL互操作技术摘要 本文介绍了Vulkan与OpenCL之间的互操作技术,重点分析了基于外部内存和外部信号量的资源共享机制。相比传统OpenGL/D3D互操作,Vulkan-OpenCL方案具有显式控制、跨平台支持和更低开销等优势。文章详细阐述了核心扩展(如cl_khr_external_memory和VK_KHR_external_memory)的使用方法,并提供了内存和信号量共享的具体实现代码示例。技术要点包括:1)通过文件描述符/HANDLE在不同API间传递资源;2)显式同步机

2026-01-18 06:00:00 1632

原创 第39章 Direct3D 10 互操作测试

OpenCL与Direct3D 10的互操作通过cl_khr_d3d10_sharing扩展实现,允许在Windows平台上共享图形资源。该扩展支持缓冲区、2D和3D纹理的共享,需要Windows Vista及以上系统,并提供了一系列API函数进行资源转换和访问控制。关键步骤包括:从D3D10设备获取CL设备、创建共享上下文、以及通过特定函数实现缓冲区和纹理的互操作。开发者需注意资源创建时的共享标志设置,并正确使用获取/释放访问权的API来确保线程安全。

2026-01-17 06:00:00 623

原创 第38章 OpenGL ES 互操作测试

OpenCL与OpenGL ES互操作技术摘要 OpenCL通过cl_khr_gl_event扩展实现了与OpenGL ES在移动和嵌入式平台的资源共享。该技术使用EGL作为中间层进行上下文管理,支持从OpenGL ES 2.0到3.2版本的核心对象共享。与桌面版OpenGL相比,OpenGL ES是精简子集,专为资源受限设备优化。实现过程包括:1)初始化EGL创建GLES上下文;2)通过EGL上下文创建CL上下文;3)获取适配的CL设备。

2026-01-17 05:30:00 1546

原创 附录B:数据结构速查

本文摘要介绍了Linux内核中MMU事件通知机制的核心数据结构,主要包括: mmu_notifier - 全局MMU事件订阅结构,包含回调函数表和关联的内存描述符 mmu_notifier_ops - 定义各类MMU事件回调函数,如页表修改通知、TLB刷新等 mmu_interval_notifier - 基于区间的MMU事件订阅结构,使用interval tree高效管理 相关辅助结构如mmu_notifier_range(描述事件范围)、mmu_notifier_subscriptions。

2026-01-16 05:45:00 1244

原创 附录A:API快速参考

本文档详细介绍了Linux内核中的mmu_notifier和mmu_interval_notifier API接口。主要内容包括:1) 注册与注销相关函数,如mmu_notifier_register()和mmu_notifier_unregister();2) 内存失效通知接口,如invalidate_range_start/end();3) 页面访问状态管理函数,如clear_flush_young();4) mmu_interval_notifier特有的序列号同步机制。

2026-01-16 05:30:00 1562

原创 第8章: MMU notifier在NVIDIA GPU驱动应用

NVIDIA GPU的UVM实现采用混合notifier架构,开源驱动Nouveau使用传统mmu_notifier为主,临时mmu_interval_notifier为辅。与AMD方案相比,NVIDIA采用按需创建notifier的方式,适合动态访问模式,但会增加fault处理开销。核心实现包含设备私有内存管理、混合notifier同步机制,以及独特的临时notifier设计,通过HMM框架实现CPU-GPU内存统一管理。这种架构在稀疏访问场景下更具优势,而AMD方案更适合持久化的大内存区域访问。

2026-01-15 05:45:00 1719

原创 第7章: MMU notifier在AMD GPU驱动中的应用

AMD GPU驱动利用MMU Interval Notifier机制实现共享虚拟内存(SVM)和异构内存管理(HMM)。通过分析AMDGPU内存架构(VRAM、GTT、Userptr)和Buffer Object设计,重点探讨了Userptr零拷贝机制如何依赖MMU notifier保持CPU/GPU内存一致性。HMM框架进一步实现统一地址空间和透明页面迁移,AMDGPU通过amdgpu_hmm.c实现两种invalidate回调(GFX和HSA模式),处理不同场景下的内存失效同步问题。

2026-01-15 05:30:00 1296

原创 第36章 Pipes - 管道对象测试

OpenCL 2.0引入了管道(Pipe)对象,用于实现内核间FIFO数据传输。本文摘要介绍了管道的主要特性与测试要点: 管道特性: 提供FIFO语义和类型安全的数据传输 支持工作组/子组级别的原子预留操作 主要用于内核间通信,主机端不可访问 关键操作: 使用clCreatePipe创建管道对象,指定包大小和容量 通过预留机制实现原子读写(预留-操作-提交三步骤) 提供专用内建函数如reserve_write_pipe/write_pipe等 测试验证: 管道对象创建与信息查询 基本读写操作的正确性 工作组

2026-01-14 06:00:00 1071

原创 第37章 OpenGL 互操作测试

OpenCL与OpenGL互操作(cl_khr_gl_sharing扩展)实现了GPU计算与图形渲染的高效协同。该技术通过零拷贝共享GPU内存,支持缓冲区对象、纹理对象、渲染缓冲区和同步对象等GL对象的互操作。开发者需先检查平台和设备对GL共享的支持,然后创建GL共享上下文并获取关联设备。核心功能包括从GL缓冲区创建CL内存对象,以及编写处理GL缓冲区的内核代码。这种互操作机制避免了CPU-GPU间的数据拷贝,特别适用于计算机图形学、图像处理和物理模拟等需要高效计算与渲染协同的应用场景。

2026-01-14 06:00:00 858

原创 linux的fd传递实现

文件描述符跨进程传递通过UNIX域套接字的SCM_RIGHTS机制实现。核心原理是利用内核中介传递文件描述符所有权,而非直接传递fd值。实现步骤包括:建立UNIX socket连接,发送方通过sendmsg()发送带有SCM_RIGHTS标志的辅助数据,接收方通过recvmsg()提取新fd。内核层面会进行权限检查、引用计数管理,并为接收进程分配新fd指向同一文件对象。这种机制确保了安全性、正确的资源管理,并支持各种类型的文件描述符共享,广泛应用于图形渲染等场景。

2026-01-13 12:32:53 665

原创 第34章 SPIRV_new - SPIR-V新标准测试

本文介绍了SPIR-V中间表示语言的核心特性与应用方法。SPIR-V是Khronos推出的新一代跨API标准中间语言,相比基于LLVM的SPIR具有更紧凑的二进制格式和更快的解析速度。文章详细阐述了如何查询设备对SPIR-V的支持情况,包括通过CL_DEVICE_IL_VERSION和CL_DEVICE_ILS_WITH_VERSION接口。同时介绍了两种创建SPIR-V程序的方式:直接加载SPIR-V二进制文件和使用cl_khr_il_program扩展从OpenCL C源码在线编译。

2026-01-13 10:25:43 261

原创 AMD KFD的BO设计分析系列8-4:BO到VA的映射

本文介绍了GPU虚拟内存管理中的BO到VA映射机制。该机制通过DRM_IOCTL_AMDGPU_GEM_VA接口实现映射关系的建立与管理,核心功能包括MAP/UNMAP/CLEAR/REPLACE操作。关键数据结构包括amdgpu_bo_va和amdgpu_bo_va_mapping,通过interval tree检测地址冲突,并维护valids/invalids链表跟踪映射状态。地址空间分为保留区、可用区和VA hole区域,映射变更最终会更新GPU页表。该机制为用户态提供了高效的GPU内存虚拟化能力。

2026-01-13 06:00:00 1260

原创 第6章: MMU Notifier在KVM虚拟化中的应用

本文分析了KVM如何利用MMU Notifier机制维护客户机与宿主机地址映射一致性。KVM采用三层地址空间转换架构(GVA→GPA→HPA),通过硬件辅助虚拟化(EPT/NPT)实现高效转换。重点探讨了KVM MMU Notifier回调实现,包括invalidate_range_start/end等核心函数,以及HVA范围处理流程。当宿主机内存变化时,KVM通过注册的notifier回调及时更新映射关系,确保虚拟化环境的内存一致性。文章详细解析了相关数据结构和关键代码实现,揭示了KVM内存管理的核心机制

2026-01-12 15:05:33 1208

嵌入式Linux系统中DMA缓冲区共享机制介绍:基于dma-buf API实现跨设备内存共享的技术框架与应用流程

内容概要:本文介绍了Linux内核中的DMA Buffer Sharing框架,旨在解决不同设备和子系统间共享DMA缓冲区缺乏统一机制的问题。通过引入dma_buf API,提供了一种通用的、跨设备的缓冲区共享方案,支持如视频解码与图形渲染、摄像头捕获等需要高效内存共享的场景。文章详细阐述了dma_buf的核心操作(如attach、detach、map_dma_buf、unmap_dma_buf)、导出者(exporter)与导入者(importer)的角色分工,以及关键API的使用流程,并通过示例说明了缓冲区共享的完整调用链。此外,还强调了缓冲区操作在实现动态内存分配、迁移和性能优化中的重要性,并展望了未来对CPU访问、同步对象等特性的支持。; 适合人群:具备Linux内核、驱动开发或嵌入式系统开发经验的工程师,尤其是从事多媒体、图形、视频处理相关工作的研发人员;熟悉设备驱动模型和内存管理机制的中高级开发者。; 使用场景及目标:①理解如何在不同硬件设备(如GPU、VPU、ISP)之间安全高效地共享DMA缓冲区;②掌握dma_buf框架的设计原理与API使用,用于实现跨子系统(如V4L2、DRM)的零拷贝数据传输;③优化系统内存使用,减少冗余拷贝,提升多媒体处理性能。; 阅读建议:建议结合Linux内核源码和具体驱动实现(如DRM、V4L2)进行实践,重点关注dma_buf的导出与导入流程、scatter-gather表的映射机制及同步问题,同时关注后续sync_file与fence机制的整合应用。

2025-09-15

Linux Device Drivers, Third Edition

https://lwn.net/Kernel/LDD3/下载的高清章节版本

2025-08-28

x11perf-1.5.tar.gz

x11perf-1.5.tar.gz

2022-11-25

nasm资料------内含手册和编译器

里面包含中英文两种语言的使用手册,外加nasm的各种EXE的工具。直接编写,直接编译.......

2010-05-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除