DMA属性 【ChatGPT】

简介: DMA属性 【ChatGPT】

DMA属性

本文档描述了在linux/dma-mapping.h中定义的DMA属性的语义。

DMA_ATTR_WEAK_ORDERING

DMA_ATTR_WEAK_ORDERING指定了对映射的读写可能是弱有序的,也就是说读和写可能会相互交错。

由于平台可以选择性地实现DMA_ATTR_WEAK_ORDERING,那些没有实现的平台将简单地忽略该属性并表现出默认行为。

DMA_ATTR_WRITE_COMBINE

DMA_ATTR_WRITE_COMBINE指定了对映射的写入可能会被缓冲以提高性能。

由于平台可以选择性地实现DMA_ATTR_WRITE_COMBINE,那些没有实现的平台将简单地忽略该属性并表现出默认行为。

DMA_ATTR_NO_KERNEL_MAPPING

DMA_ATTR_NO_KERNEL_MAPPING允许平台避免为分配的缓冲区创建内核虚拟映射。在某些架构上,创建这样的映射是一项非平凡的任务,并且消耗非常有限的资源(如内核虚拟地址空间或DMA一致地址空间)。使用此属性分配的缓冲区只能通过调用dma_mmap_attrs()传递到用户空间。通过使用此API,您保证不会对dma_alloc_attr()返回的指针进行解引用。您可以将其视为必须传递给dma_mmap_attrs()和dma_free_attrs()的cookie。确保每次调用这两个函数时也设置该属性。

由于平台可以选择性地实现DMA_ATTR_NO_KERNEL_MAPPING,那些没有实现的平台将简单地忽略该属性并表现出默认行为。

DMA_ATTR_SKIP_CPU_SYNC

默认情况下,dma_map_{single,page,sg}函数族将给定的缓冲区从CPU域传输到设备域。一些高级用例可能需要在多个设备之间共享缓冲区。这需要为每个设备单独创建映射,并且通常通过多次调用dma_map_{single,page,sg}函数来执行,每次传递给参与缓冲区共享的每个设备的设备指针。第一次调用将缓冲区从“CPU”域传输到“设备”域,这会同步给定区域的CPU缓存(通常意味着缓存已被刷新或根据DMA方向无效化)。然而,对于其他设备的dma_map_{single,page,sg}()的后续调用将在CPU缓存上执行完全相同的同步操作。CPU缓存同步可能是一个耗时的操作,特别是如果缓冲区很大,因此强烈建议尽可能避免。DMA_ATTR_SKIP_CPU_SYNC允许平台代码跳过对给定缓冲区的CPU缓存同步,假设它已经被传输到“设备”域。此属性也可用于dma_unmap_{single,page,sg}函数族,以在释放其映射后强制缓冲区保留在设备域中。谨慎使用此属性!

DMA_ATTR_FORCE_CONTIGUOUS

默认情况下,DMA映射子系统允许从dma_alloc_attrs()函数分配的缓冲区由单独的页面组装而成,如果可以将其作为连续块映射到设备DMA地址空间。通过指定此属性,分配的缓冲区将被强制在物理内存中也是连续的。

DMA_ATTR_ALLOC_SINGLE_PAGES

这是对DMA映射子系统的一种提示,表明尝试以提供更好的TLB效率的方式分配内存可能不值得(也就是说,尝试使用较大的页面构建映射可能不值得)。如果:

  • 您知道对该内存的访问不会导致TLB失效。您可能知道访问可能是顺序的,或者它们不是顺序的,但不太可能在不同物理页面上来回跳转。
  • 您知道访问内存时TLB缺失的惩罚很小,可以忽略不计。如果您正在进行解密或解压等大量操作,这可能是适用的情况。
  • 您知道DMA映射是相当短暂的。如果您预期映射的寿命很短,那么优化分配(避免使用大页面)可能是值得的,而不是获得较大页面的轻微性能优势。

设置此提示并不保证您不会获得大页面,但意味着我们不会那么努力地去获取它们。

注意

目前DMA_ATTR_ALLOC_SINGLE_PAGES仅在ARM上实现,尽管ARM64的补丁可能很快会发布。

DMA_ATTR_NO_WARN

这告诉DMA映射子系统抑制分配失败报告(类似于__GFP_NOWARN)。

在某些架构上,分配失败会通过错误消息报告到系统日志中。尽管这有助于识别和调试问题,但处理失败的驱动程序(例如,稍后重试)对此没有问题,并且实际上可能会用并非任何问题的错误消息淹没系统日志,这取决于重试机制的实现。

因此,这为驱动程序提供了一种在分配失败不是问题的调用上避免这些错误消息,并且不应该打扰日志的方法。

注意

目前DMA_ATTR_NO_WARN仅在PowerPC上实现。

DMA_ATTR_PRIVILEGED

一些高级外围设备,如远程处理器和GPU,在特权“监管员”和非特权“用户”模式下对DMA缓冲区执行访问。此属性用于指示DMA映射子系统缓冲区在提升的特权级别下是完全可访问的(理想情况下在较低特权级别下是不可访问的,或者至少是只读的)。

相关文章
DMA与ISA和LPC设备 【ChatGPT】
DMA与ISA和LPC设备 【ChatGPT】
166 12
|
缓存 Linux API
动态DMA映射使用通用设备 【ChatGPT】
动态DMA映射使用通用设备 【ChatGPT】
|
存储 缓存 安全
动态DMA映射指南 【ChatGPT】
动态DMA映射指南 【ChatGPT】
|
安全 IDE 编译器
废弃的接口、语言特性、属性和约定 【ChatGPT】
废弃的接口、语言特性、属性和约定 【ChatGPT】
|
3月前
|
机器学习/深度学习 数据采集 人工智能
从ChatGPT到文心一言:AI为什么能“懂人话”?——大语言模型的底层逻辑揭秘
从ChatGPT到文心一言:AI为什么能“懂人话”?——大语言模型的底层逻辑揭秘
541 9
|
6月前
|
传感器 存储 人工智能
ChatGPT让AI展现‘智能’魅力,函数调用和RAG如何助力迈向AI Agent?
本文由AI产品专家三桥君探讨了AI从被动响应到主动决策的演进路径,重点分析了函数调用和RAG技术在构建AI Agent中的关键作用。文章梳理了大模型能力的迭代(原生能力与涌现能力),技术演进的三个阶段(提示工程→函数调用→RAG),并提出AI Agent需具备环境感知、推理决策和行动执行的核心要素。AI产品专家三桥君认为,未来AGI需突破跨领域学习、实时更新和安全性挑战,最终实现如"贾维斯"般的智能伙伴。
236 1
ChatGPT让AI展现‘智能’魅力,函数调用和RAG如何助力迈向AI Agent?
|
11月前
|
人工智能 Linux API
Omnitool:开发者桌面革命!开源神器一键整合ChatGPT+Stable Diffusion等主流AI平台,本地运行不联网
Omnitool 是一款开源的 AI 桌面环境,支持本地运行,提供统一交互界面,快速接入 OpenAI、Stable Diffusion、Hugging Face 等主流 AI 平台,具备高度扩展性。
1261 94
Omnitool:开发者桌面革命!开源神器一键整合ChatGPT+Stable Diffusion等主流AI平台,本地运行不联网
|
6月前
|
机器学习/深度学习 人工智能 文字识别
浏览器AI模型插件下载,支持chatgpt、claude、grok、gemini、DeepSeek等顶尖AI模型!
极客侧边栏是一款浏览器插件,集成ChatGPT、Claude、Grok、Gemini等全球顶尖AI模型,支持网页提问、文档分析、图片生成、智能截图、内容总结等功能。无需切换页面,办公写作效率倍增。内置书签云同步与智能整理功能,管理更高效。跨平台使用,安全便捷,是AI时代必备工具!
519 8
|
机器学习/深度学习 人工智能 搜索推荐
哈佛推出全新类ChatGPT癌症诊断AI,登上Nature!准确率高达96%
哈佛大学研究团队开发的新型AI模型CHIEF,在《自然》期刊发表,癌症诊断准确率达96%。CHIEF基于深度学习,能自动识别、分类癌症并预测生存期,具高准确性、多任务能力和泛化性。它结合病理图像与基因组学等数据,显著提升诊断效率和个性化治疗水平,有望改善医疗资源不平等。但数据隐私和临床效果验证仍是挑战。论文见:https://www.nature.com/articles/s41586-024-07894-z
499 101
|
10月前
|
人工智能 编解码 运维
当ChatGPT能写情书、Sora会造电影:我们必须掌握的AI内容识别技能
随着AI技术迅猛发展,AI生成内容在文学、新闻、绘画等领域广泛应用,但其真假难辨、质量参差不齐,可能带来信息误导、知识产权侵犯及安全风险等问题。学会识别AI生成内容至关重要,包括通过逻辑漏洞排查、语言风格分析、生物特征异常检测等手段审核文本、图片和视频。人工审核在面对高隐蔽性内容时仍不可替代,需结合工具与上下文理解共同筑起防护屏障。守护真实信息、规避风险,是每个人在AI时代应尽的责任。
307 7

热门文章

最新文章