Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Modularisasi ION Heaps untuk GKI

Banyak OEM Android memodifikasi driver kernel ION karena berbagai alasan, seperti menambahkan heaps vendor dan menyesuaikan manajemen cache (untuk detail tentang modifikasi ini, lihat Mengintegrasikan pengalokasi memori ION ). Agar OEM dapat mempertahankan modifikasi tersebut saat menggunakan Generic Kernel Image (GKI) , Android Common Kernel v5.4 memperkenalkan kerangka kerja untuk memodulasi heap ION khusus vendor sambil mempertahankan driver ION inti bawaan. Gambar berikut menunjukkan tata letak image kernel .

Tumpukan ION Modular

Gambar 1. Driver kernel ION termodulasi

Tumpukan ION modular memiliki keuntungan sebagai berikut.

  • Driver inti ION dapat menjadi bagian dari citra GKI, memungkinkan semua pengoptimalan kinerja yang tidak bergantung perangkat dan perbaikan bug untuk menjangkau semua perangkat.
  • Driver inti ION di kernel umum dapat menangani pendaftaran heap dan mengelola antarmuka ke ruang pengguna dan klien kernel. Modul heap vendor hanya diperlukan untuk mengimplementasikan operasi heap kustom.
  • Driver inti ION (sebagai bagian dari GKI) dapat menyertakan kait untuk pelacakan penggunaan memori yang lebih mudah, yang tidak mungkin dilakukan ketika setiap OEM memiliki versi driver ION mereka sendiri.
  • Vendor ION heap modular membuat transisi mendatang ke heaps dmabuf lebih mudah.

Menerapkan

Modul heap ION dapat mendaftarkan operasi dmabuf sendiri untuk menggantikan operasi yang didaftarkan oleh driver ION inti. Operasi dmabuf (seperti get_flags() ) yang tidak didukung oleh driver ION inti mengembalikan -EOPNOTSUPP jika implementasi heap tidak memiliki penggantian yang diperlukan.

Untuk meningkatkan kinerja, driver dmabuf dapat melakukan pemeliharaan cache sebagian (lihat daftar perubahan ). Klien kernel dapat menggunakan fungsi dma_buf_begin_cpu_access_partial dan dma_buf_end_cpu_access_partial untuk melakukan pemeliharaan cache parsial.

Android Common Kernel berisi implementasi modular sistem dan heap pengalokasi memori (CMA) bersebelahan untuk digunakan sebagai referensi untuk modularisasi heap.

Perubahan pada header ION UAPI

Header ION user space API (UAPI) berisi enum ion_heap_id untuk digunakan dalam menentukan rentang ID heap untuk digunakan oleh heap vendor.

 /**
 * ion_heap_id - list of heap IDs that Android can use
 *
 * @ION_HEAP_SYSTEM        ID for the ION_HEAP_TYPE_SYSTEM
 * @ION_HEAP_DMA_START     Start of reserved ID range for heaps of type ION_HEAP_TYPE_DMA
 * @ION_HEAP_DMA_END       End of reserved ID range for heaps of type ION_HEAP_TYPE_DMA
 * @ION_HEAP_CUSTOM_START  Start of reserved ID range for heaps of custom type
 * @ION_HEAP_CUSTOM_END    End of reserved ID range for heaps of custom type
 */

enum ion_heap_id {

   ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM),

   ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1),

   ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7),
   ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1),

   ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22),
};

Selain itu, IOCTL baru ( ION_IOC_ABI_VERSION ) dapat membantu klien ruang pengguna menentukan apakah tumpukan modular sedang digunakan.

Mengganti heap sistem generik

Heap sistem ION ada di dalamnya dan merupakan bagian dari image GKI untuk memastikan bahwa fitur apa pun yang memerlukan akses ke heap generik / perangkat-independen dapat bergantung pada keberadaannya. Karenanya, Anda tidak dapat mengganti ID heap dari ION_HEAP_SYSTEM . Untuk membuat heap sistem yang disesuaikan, gunakan ID heap dalam rentang khusus ( ION_HEAP_CUSTOM_START hingga ION_HEAP_CUSTOM_END ) untuk melakukan alokasi.