ION内存管理技术分析.docVIP

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.android之ION内存管理器(1)-- 简介 为什么需要ION 回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM不被linux 社区接受的原因在[3]中有讲到。从那开始,PMEM很明确会被完全抛弃,取而代之的是ION内存管理器。ION是google在Android4.0 ICS为了解决内存碎片管理而引入的通用内存管理器,它会更加融合kernel。目前QCOM MSM, NVDIA Tegra, TI OMAP, MRVL PXA都用ION替换PMEM。 ?如何获取source code /kernel/common.git ION codes reside in drivers/gpu/ion Specific usage examples on omap4: /kernel/omap.git ?ION 框架[1] ION 定义了四种不同的heap,实现不同的内存分配策略。 ION_HEAP_TYPE_SYSTEM : 通过vmalloc分配内存 ION_HEAP_TYPE_SYSTEM_CONTIG: 通过kmalloc分配内存 ION_HEAP_TYPE_CARVEOUT: 在保留内存块中(reserve memory)分配内存 ION_HEAP_TYPE_CUSTOM: 由客户自己定义 ? 下图是两个client共享内存的示意图。图中有2个heap(每种heap都有自己的内存分配策略),每个heap中分配了若干个buffer。client的handle管理到对应的buffer。两个client是通过文件描述符fd来实现内存共享的。 ION APIs 用户空间 API 定义了6种 ioctl 接口,可以与用户应用程序交互。 ION_IOC_ALLOC: 分配内存 ION_IOC_FREE: 释放内存 ION_IOC_MAP: 获取文件描述符进行mmap? (? 在code中未使用这个定义) ION_IOC_SHARE: 创建文件描述符来实现共享内存 ION_IOC_IMPORT: 获取文件描述符 ION_IOC_CUSTOM: 调用用户自定义的ioctl ION_IOC_SHARE 及ION_IOC_IMPORT是基于DMABUF实现的,所以当共享进程获取文件描述符后,可以直接调用mmap来操作共享内存。mmap实现由DMABUF子系统调用ION子系统中mmap回调函数完成。 内核空间 API 内核驱动也可以注册为一个ION的客户端(client),可以选择使用哪种类型的heap来申请内存。 ion_client_create: 分配一个客户端。 ion_client_destroy: 释放一个客户端及绑定在它上面的所有ion handle. ion handle: 这里每个ion handle映射到一个buffer中,每个buffer关联一个heap。也就是说一个客户端可以操作多块buffer。 Buffer 申请及释放函数: ion_alloc: 申请ion内存,返回ion handle ion_free: 释放ion handle ION 通过handle来管理buffer,驱动需要可以访问到buffer的地址。ION通过下面的函数来达到这个目的 ion_phys: 返回buffer的物理地址(address)及大小(size) ion_map_kernel: 给指定的buffer创建内核内存映射 ion_unmap_kernel: 销毁指定buffer的内核内存映射 ion_map_dma: 为指定buffer创建dma 映射,返回sglist(scatter/gather list) ion_unmap_dma: 销毁指定buffer的dma映射 ION是通过handle而非buffer地址来实现驱动间共享内存,用户空间共享内存也是利用同样原理。 ion_share: given a handle, obtain a buffer to pass to other clients ion_import: given an buffer in another client, import it ion_import_fd: given an fd obtained via ION_IOC_SHARE ioctl, import it Heap API Heap 接口定义 [drivers/gpu/ion/ion_priv.h] 这些接口不是暴露给驱动或者用户应用程序的。 /** * struct ion_heap_ops - ops

文档评论(0)

1112111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档