android内存管理-ION/PMEM【转】

news/2024/7/20 12:48:03 标签: 移动开发, 内存管理, git

转自:https://www.jianshu.com/p/0eac3d3ff6bb

ION debug

ION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口。

每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kernel/debug/ion/<<heap name>>

$cat /sys/kernel/debug/ion/ion-heap-1

      client              pid             size
    test_ion             2890            16384

每个由pid标识的client也有一个debugfs目录/sys/kernel/debug/ion/<<pid>>
$cat /sys/kernel/debug/ion/2890
heap_name: size_in_bytes
ion-heap-1: 40960 11

为什么需要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

http://android.googlesource.com/kernel/common.git

ION codes reside in drivers/gpu/ion

Specific usage examples on omap4:

http://android.googlesource.com/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: 由客户自己定义
 
image

下图是两个client共享内存的示意图。图中有2个heap(每种heap都有自己的内存分配策略),每个heap中分配了若干个buffer。client的handle管理到对应的buffer。两个client是通过文件描述符fd来实现内存共享的。

 
image

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

转载于:https://www.cnblogs.com/sky-heaven/p/11506275.html


http://www.niftyadmin.cn/n/971762.html

相关文章

项目管理(一) - RFP、合同与SOW的内容与区别

简介 投标申请书RFP&#xff08; request for proposal &#xff09;是客户招标时给出的大纲&#xff0c;会宣布有关项目的信息&#xff0c;一般会包含项目预期、高阶的工作与交付需求&#xff0c;是项目招投标书与解决方案撰写的重要依据。合同&#xff08;Contract&#xff…

北京欢迎你

该版本的歌词如下&#xff1a; [00:05.01]群星 - 北京欢迎你 [00:09.01]词&#xff1a;林夕 [00:11.37]曲&#xff1a;小柯 [00:14.73] &#xff08;京剧、面人、风筝、四合院、年画、太极拳、太庙&#xff09; [00:18.62]【陈天佳】迎接另一个晨曦 带来全新空气 &#xff0…

Linux进程管理 (篇外)内核线程简要介绍【转】

转自&#xff1a;https://www.cnblogs.com/arnoldlu/p/8336998.html 关键词&#xff1a;kthread、irq、ksoftirqd、kworker、workqueues 在使用ps查看线程的时候&#xff0c;会有不少[...]名称的线程&#xff0c;这些有别于其它线程&#xff0c;都是内核线程。 其中多数内核线程…

数据科学猫:人工智能、机器学习与深度学习的概念

进击的橘子猫正式改名上线啦&#xff01; 我的CSDN主页&#xff1a;https://blog.csdn.net/Orange_Spotty_Cat 也欢迎大家搜索微信公众号“进击的橘子猫”&#xff0c;我也会定期分享数据科学、Python、大数据、项目管理与PPT的相关知识。 让我们进击起来吧&#xff01; 简介 …

Linux中断管理 (3)workqueue工作队列【转】

转自&#xff1a;https://www.cnblogs.com/arnoldlu/p/8659988.html 目录&#xff1a; 《Linux中断管理》 《Linux中断管理 (1)Linux中断管理机制》 《Linux中断管理 (2)软中断和tasklet》 《Linux中断管理 (3)workqueue工作队列》 关键词&#xff1a; 工作队列的原理是把work(…

深入解读Linux进程调度Schedule【转】

转自&#xff1a;https://blog.csdn.net/Vince_/article/details/88982802 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/Vince_/article/details/8…

数据科学猫:人工智能要素、生态与应用领域(上篇)

进击的橘子猫正式改名上线啦&#xff01; 我的CSDN主页&#xff1a;https://blog.csdn.net/Orange_Spotty_Cat 也欢迎大家搜索微信公众号“进击的橘子猫”&#xff0c;我也会定期分享数据科学、Python、大数据、项目管理与PPT的相关知识。 让我们进击起来吧&#xff01; 简介 …

Linux下用火焰图进行性能分析【转】

转自&#xff1a;https://blog.csdn.net/gatieme/article/details/78885908 版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/gatieme/article/details…