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映射子系统缓冲区在提升的特权级别下是完全可访问的(理想情况下在较低特权级别下是不可访问的,或者至少是只读的)。

相关文章
|
2月前
|
API
DMA与ISA和LPC设备 【ChatGPT】
DMA与ISA和LPC设备 【ChatGPT】
42 12
|
2月前
|
缓存 Linux API
动态DMA映射使用通用设备 【ChatGPT】
动态DMA映射使用通用设备 【ChatGPT】
|
2月前
|
存储 缓存 安全
动态DMA映射指南 【ChatGPT】
动态DMA映射指南 【ChatGPT】
|
2月前
|
安全 IDE 编译器
废弃的接口、语言特性、属性和约定 【ChatGPT】
废弃的接口、语言特性、属性和约定 【ChatGPT】
|
3月前
|
人工智能 自然语言处理 搜索推荐
chatgpt这么火,现在AI搜索引擎有哪些呢?
国外AI搜索引擎包括ChatGPT,擅长自然语言处理与内容生成;Google Bard,提供智能个性化搜索体验;Microsoft Bing集成GPT模型增强智能检索;Perplexity AI以简洁答案及文献引用著称;Neeva强调隐私保护与无广告服务。国内方面,天工AI支持多种功能如知识问答与代码编程;腾讯元宝基于混元模型助力内容创造与学习;360AI搜索以精准全面的信息搜索见长;秘塔AI专注提升写作质量和效率;开搜AI搜索提供个性化智能搜索服务。以上引擎均利用先进AI技术提升用户体验。更多详情参阅[AI搜索合集](zhangfeidezhu.com/?page_id=651)。
112 8
chatgpt这么火,现在AI搜索引擎有哪些呢?
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题
HuggingGPT是一个框架,它使用大型语言模型(如ChatGPT)作为控制器来管理和协调Hugging Face上的AI模型,以语言作为通用接口解决多模态和领域的复杂AI任务。
59 0
HuggingGPT解析:使用 ChatGPT及HuggingFace上的族系解决AI问题
|
3月前
|
机器学习/深度学习 人工智能 算法
为什么ChatGPT等AI大模型都是基于Python开发?
为什么ChatGPT等AI大模型都是基于Python开发?
|
3月前
|
人工智能 自然语言处理 Linux
免费ChatGPT4o灵办AI可体验浏览器插件
灵办AI就是您所需的最佳助手!我们为您带来了一款多功能AI工具,ChatGPT4o不仅能为您提供精准翻译,还能满足您的对话需求、智能续写、AI搜索、文档阅读、代码生成与修正等多种需求。灵办 AI,真正让工作和学习变得轻松高效!一款多功能智能助手,旨在提升工作和学习效率。它提供实时翻译、对话问答、搜索、写作和网页阅读等服务,支持多种浏览器和操作系统,帮助用户随时获取信息,打破语言障碍,优化内容创作和信息处理。
119 0
|
3月前
|
Web App开发 人工智能 安全
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
Gemini vs ChatGPT:谷歌最新的AI和ChatGPT相比,谁更强?
|
3月前
|
人工智能 安全 机器人
ChatGPT 1岁:创新、争议和AI产生突破的一年
ChatGPT 1岁:创新、争议和AI产生突破的一年