تقسيم أكواد ION إلى وحدات أساسية لـ GKI

يُعدِّل العديد من المصنّعين الأصليين لأجهزة Android برنامج تشغيل نواة ION لأسباب مختلفة، مثل فضلاً عن إضافة كومة من البائعين وتخصيص إدارة ذاكرة التخزين المؤقت (للحصول على تفاصيل يُرجى الرجوع إلى مقالة دمج ذاكرة ION مخصص). لتمكين المصنّعين الأصليين للأجهزة الاحتفاظ بهذه التعديلات عند استخدام صورة Kernel العامة (GKI) وAndroid يقدّم الإصدار 5.4 من Kernel المشترك إطارًا لتقسيم ION الخاص بالمورِّد إلى وحدات. أكوامًا من الذاكرة مع الاحتفاظ ببرنامج تشغيل ION الأساسي مضمّنًا. يوضح الشكل التالي تخطيط صورة النواة (kernel).

أكوام ION النموذجية

الشكل 1. برنامج تشغيل نواة ION معدّل

تتميّز أكوام ION النموذجية بالمزايا التالية.

  • يمكن أن يكون برنامج التشغيل الأساسي ION جزءًا من صورة GKI، ما يتيح جميع تحسينات على الأداء بشكل مستقل عن الأجهزة وإصلاحات للأخطاء من أجل الوصول إلى الجميع الأجهزة.
  • يستطيع برنامج التشغيل الأساسي ION في النواة المشتركة معالجة تسجيل كومة الذاكرة المؤقتة إدارة الواجهة لعملاء مساحة المستخدم والنواة. وحدات العناصر المتعدّدة للمورّدين تكون مطلوبة فقط لتنفيذ عمليات لقطات لعناصر متعدّدة.
  • يمكن أن يشتمل برنامج التشغيل الأساسي ION (كجزء من GKI) على عناصر الجذب لتسهيل الذاكرة. تتبع الاستخدام، وهو ما لم يكن ممكنًا عندما كان لدى كل مصنّع أصلي للجهاز نسخته الخاصة من برنامج تشغيل ION.
  • يجب أن تُجري أكوام ION النموذجية للمورّد أي عمليات انتقال في المستقبل إلى أكوام dmabuf المتعدّدة. كثيرًا.

التنفيذ

يمكن لوحدات الذاكرة في ION تسجيل عمليات dmabuf الخاصة بها لإلغاء العمليات. المسجلة بواسطة برنامج تشغيل ION الأساسي. عملية dmabuf (مثل get_flags()) غير المتوافق مع برنامج تشغيل ION الأساسي يعرض -EOPNOTSUPP إذا كانت الذاكرة عملية التنفيذ تفتقر إلى الإلغاءات اللازمة.

لتحسين الأداء، يمكن لبرنامج التشغيل "dmabuf" تنفيذ ذاكرة تخزين مؤقت جزئية. صيانة (راجع قائمة التغييرات). يمكن لبرامج Kernel استخدام dma_buf_begin_cpu_access_partial دوال dma_buf_end_cpu_access_partial لإجراء صيانة جزئية لذاكرة التخزين المؤقت.

تحتوي النواة المشتركة لنظام التشغيل Android على عمليات تنفيذ نموذجية للنظام أكوام تخصيص الذاكرة المتجاورة (CMA) لاستخدامها كمرجع لأجزاء من الذاكرة التقسيم إلى وحدات.

تغييرات على عنوان ION UAPI

يحتوي عنوان واجهة برمجة التطبيقات لمساحة المستخدم في ION (UAPI) على تعداد ion_heap_id للاستخدام في تحديد نطاق من معرّفات لأجزاء من الذاكرة ليستخدمها المورّدون.

 /**
 * 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),
};

بالإضافة إلى ذلك، يمكن أن تساعد إضافة IOCTL (ION_IOC_ABI_VERSION) جديدة في مساعدة برامج مساحة المستخدمين. لتحديد ما إذا كان يتم استخدام أكوام التخزين النمطية.

إلغاء كومة الذاكرة المؤقتة للنظام العام

تكون كومة الذاكرة المؤقتة لنظام ION مدمجةً في صورة GKI، وهي جزء من صورة GKI لضمان أنّ التي تحتاج إلى الوصول إلى كومة انتظار عامة أو مستقلة عن الجهاز، قد يعتمد ذلك على التواجد. وبناءً على ذلك، لا يمكنك إلغاء رقم تعريف إحدى ركائز النظام لعناصر متعدّدة في ION_HEAP_SYSTEM. إلى لإنشاء لقطة نظام مخصّصة أو استخدام معرّف جزء من الذاكرة في النطاق المخصّص (من ION_HEAP_CUSTOM_START إلى ION_HEAP_CUSTOM_END) لإجراء عمليات التخصيص.