123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- ION BUFFER SHARING UTILITY
- ==========================
- File: ion_test.sh : Utility to test ION driver buffer sharing mechanism.
- Author: Pintu Kumar <pintu.ping@gmail.com>
- Introduction:
- -------------
- This is a test utility to verify ION buffer sharing in user space
- between 2 independent processes.
- It uses unix domain socket (with SCM_RIGHTS) as IPC to transfer an FD to
- another process to share the same buffer.
- This utility demonstrates how ION buffer sharing can be implemented between
- two user space processes, using various heap types.
- The following heap types are supported by ION driver.
- ION_HEAP_TYPE_SYSTEM (0)
- ION_HEAP_TYPE_SYSTEM_CONTIG (1)
- ION_HEAP_TYPE_CARVEOUT (2)
- ION_HEAP_TYPE_CHUNK (3)
- ION_HEAP_TYPE_DMA (4)
- By default only the SYSTEM and SYSTEM_CONTIG heaps are supported.
- Each heap is associated with the respective heap id.
- This utility is designed in the form of client/server program.
- The server part (ionapp_export) is the exporter of the buffer.
- It is responsible for creating an ION client, allocating the buffer based on
- the heap id, writing some data to this buffer and then exporting the FD
- (associated with this buffer) to another process using socket IPC.
- This FD is called as buffer FD (which is different than the ION client FD).
- The client part (ionapp_import) is the importer of the buffer.
- It retrives the FD from the socket data and installs into its address space.
- This new FD internally points to the same kernel buffer.
- So first it reads the data that is stored in this buffer and prints it.
- Then it writes the different size of data (it could be different data) to the
- same buffer.
- Finally the buffer FD must be closed by both the exporter and importer.
- Thus the same kernel buffer is shared among two user space processes using
- ION driver and only one time allocation.
- Prerequisite:
- -------------
- This utility works only if /dev/ion interface is present.
- The following configs needs to be enabled in kernel to include ion driver.
- CONFIG_ANDROID=y
- CONFIG_STAGING=y
- CONFIG_ION=y
- CONFIG_ION_SYSTEM_HEAP=y
- This utility requires to be run as root user.
- Compile and test:
- -----------------
- This utility is made to be run as part of kselftest framework in kernel.
- To compile and run using kselftest you can simply do the following from the
- kernel top directory.
- linux$ make TARGETS=android kselftest
- Or you can also use:
- linux$ make -C tools/testing/selftests TARGETS=android run_tests
- Using the selftest it can directly execute the ion_test.sh script to test the
- buffer sharing using ion system heap.
- Currently the heap size is hard coded as just 10 bytes inside this script.
- You need to be a root user to run under selftest.
- You can also compile and test manually using the following steps:
- ion$ make
- These will generate 2 executable: ionapp_export, ionapp_import
- Now you can run the export and import manually by specifying the heap type
- and the heap size.
- You can also directly execute the shell script to run the test automatically.
- Simply use the following command to run the test.
- ion$ sudo ./ion_test.sh
- Test Results:
- -------------
- The utility is verified on Ubuntu-32 bit system with Linux Kernel 4.14.
- Here is the snapshot of the test result using kselftest.
- linux# make TARGETS=android kselftest
- heap_type: 0, heap_size: 10
- --------------------------------------
- heap type: 0
- heap id: 1
- heap name: ion_system_heap
- --------------------------------------
- Fill buffer content:
- 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd
- Sharing fd: 6, Client fd: 5
- <ion_close_buffer_fd>: buffer release successfully....
- Received buffer fd: 4
- Read buffer content:
- 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0x0 0x0 0x0 0x0 0x0 0x0
- 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
- Fill buffer content:
- 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd
- 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd 0xfd
- 0xfd 0xfd
- <ion_close_buffer_fd>: buffer release successfully....
- ion_test.sh: heap_type: 0 - [PASS]
- ion_test.sh: done
|