美文网首页
ION 内存管理

ION 内存管理

作者: 水墨人生乐园 | 来源:发表于2018-05-22 17:15 被阅读0次

what is ION?

ION  内存管理从android4.0开始被引入

ION模块是可扩展的(API都是统一的),支持各种形式的内存分配方式,可以表述不同的硬件资源和他们的一些限制

ION 支持连续与不连续内存的分配

ION 给Kernel and User space processes提供了相应的APIs

当前支持的memory type

ION_HEAP_TYPE_CARVEOUT - memory (PMEM style) for larger physically contiguous allocations

ION_HEAP_TYPE_SYSTEM_CONTIG - physically contiguous for small physical allocations

ION_HEAP_TYPE_SYSTEM - virtually contiguous but physically discontiguous memory

ION_HEAP_TYPE_IOMMU - memory region allocated through IOMMU API.

ION heap 的大小根据每个设备自身的内存情况而定,但是都要实现下面的回调:

   struct ion_heap_ops {

        int (*allocate) (struct ion_heap *heap,

                       struct ion_buffer *buffer, unsigned long len,

                       unsigned long align, unsigned long flags);

        void (*free) (struct ion_buffer *buffer);

        int (*phys) (struct ion_heap *heap, struct ion_buffer *buffer,

               ion_phys_addr_t *addr, size_t *len);

        struct scatterlist *(*map_dma) (struct ion_heap *heap,

                       struct ion_buffer *buffer);

        void (*unmap_dma) (struct ion_heap *heap,

        struct ion_buffer *buffer);

        void * (*map_kernel) (struct ion_heap *heap,

        struct ion_buffer *buffer);

        void (*unmap_kernel) (struct ion_heap *heap,

        struct ion_buffer *buffer);

        int (*map_user) (struct ion_heap *heap, struct ion_buffer *buffer,

                       struct vm_area_struct *vma);

   };

方法phys(),返回的是的物理地址和buffer的长度,但必须是连续的物理buffer,如果没有连续的物理buffer,是不能提供改回调。

map_kernel() and unmap_kernel(),把物理内存映射到kernel virtual address space.

map_user(),映射物理内存到用户空间,为啥没有unmap_user()方法呢,因为映射到用户空间,是以FD(文件描述符)的形式映射的,当FD close了就自动unmap。

ION可以释放内存嘛?

答案是否定的。它主要的是提供给applications间共享内存。

ION和PMem可以共存嘛?

可以,但是不能共享buffers.

userspace是如何使用ION?

1:open ION device-------open("/dev/ion", O_RDONLY),返回一个FD(相当于ION client)

2:  客户端要填充如下数据结构,除了handle,也就是你要申请的data:

struct ion_allocation_data {

        size_t len;

        size_t align;

        unsigned int flags;

        struct ion_handle *handle;

   }

3: user space clients 用ioctl跟ION通信

int ioctl(int client_fd, ION_IOC_ALLOC, struct ion_allocation_data *allocation_data)

返回的FD的buffer。

4:FD可以通过Binder机制进行进程间的share

如何查看ION的使用量

for example:

>adb shell

 #mount -t debugfs NONE /d

 #cd /d/ion/

 #ls

 922

 vmalloc

 ...

 # cat vmalloc

 cat vmalloc

 client pid size

 total bytes currently allocated: 0

 # cat 922

 cat 922

 heap_name: size_in_bytes : handle refcount : buffer

 client refcount: 1

ION 和DMABUF的比较:

FeatureIONDMABUF

Memory Manager RoleION replaces PMEM as the manager of provisioned memory pools. The list of ION heaps can be extended per device.DMABUF is a buffer sharing framework, designed to integrate with the memory allocators in DMA mapping frameworks, like the work-in-progress DMA-contiguous allocator, also known as theContiguous Memory Allocator (CMA). DMABUF exporters have the option to implement custom allocators.

User Space Access ControlION offers the /dev/ion interface for user-space programs to allocate and share buffers. Any user program with ION access can cripple the system by depleting the ION heaps. Android checks user and group IDs to block unauthorized access to ION heaps.DMABUF offers only kernel APIs. Access control is a function of the permissions on the devices using the DMABUF feature.

Global Client and Buffer DatabaseION contains a device driver associated with /dev/ion. The device structure contains a database that tracks the allocated ION buffers, handles and file descriptors, all grouped by user clients and kernel clients. ION validates all client calls according to the rules of the database. For example, there is a rule that a client cannot have two handles to the same buffer.The DMA debug facility implements a global hashtable,dma_entry_hash, to track DMA buffers, but only when the kernel was built with theCONFIG_DMA_API_DEBUG option.

Cross-architecture UsageION usage today is limited to architectures that run the Android kernel.DMABUF usage is cross-architecture. The DMA mapping redesign preparation patchset modified the DMA mapping code in 9 architectures besides the ARM architecture.

Buffer SynchronizationION considers buffer synchronization to be an orthogonal problem.DMABUF provides a pair of APIs for synchronization. The buffer-user callsdma_buf_map_attachment()whenever it wants to use the buffer for DMA . Once the DMA for the current buffer-user is over, it signals 'end-of-DMA' to the exporter via a call todma_buf_unmap_attachment().

Delayed Buffer AllocationION allocates the physical memory before the buffer is shared.DMABUF can defer the allocation until the first call todma_buf_map_attachment(). The exporter of DMA buffer has the opportunity to scan all client attachments, collate their buffer constraints, then choose the appropriate backing storage.

相关文章

  • android内存管理-ION/PMEM

    内存管理 —— ION ION debug ION 在/sys/kernel/debug/ion/ 提供一个deb...

  • ION 内存管理

    what is ION? ION 内存管理从android4.0开始被引入 ION模块是可扩展的(API都是统一的...

  • Android系列-ION内存管理简介

    Android系列-ION内存管理简介 一、ION相关介绍 Android的ION子系统的目的主要是通过在硬件设备...

  • Android ION源码浅析

    Android ION ION是Google在Android 4.0上推出的一个通用的内存管理器,目的是为了解决众...

  • Android ION内存分配

    ION设计的目标 为了避免内存碎片化,或者为一些有着特殊内存需求的硬件,比如GPUs、display contro...

  • Android 重学系列 ion驱动源码浅析

    前言 上一篇文章,在解析初始化GraphicBuffer中,遇到一个ion驱动,对图元进行管理。首先看看ion是怎...

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

  • ionic3 Bug收集

    1、ion-input、ion-textarea等输入框不能放在ion-row>ion-col中,否则底部会出现大...

  • 第10章 内存管理和文件操作

    1 内存管理 1.1 内存管理基础 标准内存管理函数堆管理函数虚拟内存管理函数内存映射文件函数 GlobalMem...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

网友评论

      本文标题:ION 内存管理

      本文链接:https://www.haomeiwen.com/subject/rnkkjftx.html