يتوافق نظام إصدار Android الذي يعمل بالإصدار 13 من نظام التشغيل Android والإصدارات الأقدم مع إرشادات الملف الشخصي الموجَّه إلى Clang. التحسين (PGO) على وحدات Android الأصلية التي تتضمّن إصدار مخطط القواعد. تصف هذه الصفحة Clang PGO وكيفية إنشاء وتحديث ملفات تعريف الارتباط المستخدمة لمؤسسة PGO، وكيفية دمج PGO مع نظام التصميم (مع حالة الاستخدام).
ملاحظة: يصف هذا المستند استخدام PGO في نظام Android الأساسي. للتعرف على استخدام PGO من تطبيق Android، انتقل إلى هذه الصفحة.
لمحة عن Clang PGO
يمكن لشركة Clang تنفيذ عملية التحسين التي يوجهها الملف الشخصي باستخدام نوعين من الملفات الشخصية:
- يتم إنشاء الملفات الشخصية المستندة إلى الأدوات من قياس الأداء. تُعد هذه الملفات الشخصية مفصلة وتفرض النفقات العامة لوقت التشغيل.
- الملفات الشخصية القائمة على أخذ العينات يتم إنشاؤها عادةً بواسطة لأخذ عينات من الأجهزة. تفرض أوقات تشغيل منخفضة، ويمكن البيانات التي يتم جمعها بدون أي قياس أو تعديل في البرنامج الثنائي. هم أقل تفصيلاً من الملفات الشخصية القائمة على الأدوات.
يجب إنشاء جميع الملفات الشخصية من عبء عمل تمثيلي
السلوك النموذجي للتطبيق. بينما يدعم Clang كلاً من
المستندة إلى AST (-fprofile-instr-generate
) والمستندة إلى LLVM IR
(-fprofile-generate)
، لا يتوافق Android إلا مع LLVM IR-based لـ
PGO القائم على الأدوات.
يجب استخدام العلامات التالية لإنشاء ملف من أجل جمع الملفات الشخصية:
-fprofile-generate
للأجهزة المستنِدة إلى الأشعة تحت الحمراء مع هذا فإن الخلفية تستخدم الحد الأدنى المرجَّح لنهج شجرة الامتداد المرجَّح تقليل عدد نقاط الأدوات وتحسين موضعها حواف منخفضة (استخدم هذا الخيار لخطوة الربط أيضًا). كلانغ يجتاز برنامج التشغيل تلقائيًا بيئة تشغيل التحليل (libclang_rt.profile-arch-android.a
) إلى أداة الربط. تحتوي هذه المكتبة على سلاسل إجراءات لكتابة الملفات الشخصية على القرص عند البرنامج وخروج.-gline-tables-only
لجمع الملفات الشخصية استنادًا إلى أخذ العينات لإنشاء الحد الأدنى من معلومات تصحيح الأخطاء.
يمكن استخدام ملف شخصي لمؤسسة PGO باستخدام
-fprofile-use=pathname
أو
-fprofile-sample-use=pathname
للاستناد إلى الأدوات
والملفات الشخصية القائمة على أخذ العينات على التوالي.
ملاحظة: عند إجراء تغييرات على الرمز البرمجي، إذا تعذّر على Clang
استخدام بيانات الملف الشخصي التي تنشئها
تحذير واحد (-Wprofile-instr-out-of-date
).
استخدام PGO
يتضمن استخدام PGO الخطوات التالية:
- بناء المكتبة/التنفيذ باستخدام الأدوات من خلال المرور
-fprofile-generate
إلى برنامج التجميع والرابط. - يمكنك جمع الملفات الشخصية من خلال تشغيل عبء عمل تمثيلي على النظام الثنائي
- معالجة الملفات الشخصية بعد ذلك باستخدام الأداة المساعدة
llvm-profdata
(لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة التعامل مع النموذج اللغوي الكبير (LLVM). للملف الشخصي). - استخدِم الملفات الشخصية لتطبيق PGO من خلال المرور
-fprofile-use=<>.profdata
للمحول البرمجي .
بالنسبة إلى PGO في Android، يجب جمع الملفات الشخصية بلا اتصال بالإنترنت وتسجيل الوصول إليها بجانب الرمز البرمجي لضمان إصدارات قابلة للتكرار يمكن استخدام الملفات الشخصية يتطور رمز المرور، ولكن يجب إعادة إنشاؤه بشكل دوري (أو عندما تحذر Clang أن الملفات الشخصية قديمة).
جمع الملفات الشخصية
بإمكان Clang استخدام الملفات الشخصية التي تم جمعها من خلال تشغيل مقاييس الأداء باستخدام إصدار مخصص للمكتبة أو عن طريق أخذ عينات من عدادات الأجهزة عند قياس الأداء. في الوقت الحالي، لا يدعم Android استخدام عيّنات النتائج. جمع الملفات الشخصية، لذا يجب عليك جمع الملفات الشخصية باستخدام أداة الإصدار:
- حدد معيارًا ومجموعة المكتبات التي تتم ممارستها بشكل جماعي لذلك المعيار.
- إضافة سمات
pgo
إلى مقياس الأداء والمكتبات (التفاصيل أدناه). - إنشاء إصدار Android باستخدام نسخة مزوّدة بأداة من هذه المكتبات
باستخدام:
make ANDROID_PGO_INSTRUMENT=benchmark
benchmark
هو عنصر نائب يحدد
مجموعة من المكتبات التي تم قياسها أثناء الإنشاء. الممثل الفعلي
(وربما ملف تنفيذي آخر يرتبط بمكتبة
لقياس الأداء) ليست مخصصة لمؤسسات قطاع المؤسسات (PGO) ولا تقع ضمن نطاق هذا
جلسة المراجعة.
- وميض أو مزامنة الإصدار المستخدَم على الجهاز.
- تشغيل مقياس الأداء لجمع الملفات الشخصية
- استخدِم أداة
llvm-profdata
(الموضّحة أدناه) لإجراء ما يلي: بعد معالجة الملفات الشخصية وتجهيزها للتحقّق منها ضمن المصدر شَجَرَة
استخدام الملفات الشخصية أثناء الإصدار
التحقق من الملفات الشخصية في toolchain/pgo-profiles
على جهاز Android
شَجَرَة يجب أن يتطابق الاسم مع ما هو محدّد في
موقع فرعي واحد (profile_file
) من السمة pgo
للحساب الفرعي
المكتبة. يمرر نظام التصميم ملف الملف الشخصي تلقائيًا إلى Clang
عند إنشاء المكتبة. ANDROID_PGO_DISABLE_PROFILE_USE
يمكن ضبط متغيّر البيئة على true
على
إيقاف PGO مؤقتًا وقياس مزايا أدائه
لتحديد أدلة ملفات شخصية إضافية خاصة بالمنتجات، ألحقها بـ
متغير يجعل PGO_ADDITIONAL_PROFILE_DIRECTORIES
في
BoardConfig.mk
إذا تم تحديد مسارات إضافية، ستتوفر الملفات الشخصية في
تلغي هذه المسارات تلك المسارات في toolchain/pgo-profiles
.
عند إنشاء صورة إصدار باستخدام هدف dist
بهدف
make
، يكتب نظام التصميم أسماء ملفات الملفات الشخصية المفقودة.
إلى $DIST_DIR/pgo_profile_file_missing.txt
. يمكنك التحقّق من ذلك
للتعرف على ملفات الملف الشخصي التي تم إسقاطها عن طريق الخطأ (والتي بدون تنبيه صوتي
تؤدي إلى إيقاف PGO).
تفعيل PGO في ملفات Android.bp
لتفعيل PGO في ملفات Android.bp
للوحدات الأصلية، ما عليك سوى
لتحديد السمة pgo
. يتضمّن هذا الموقع ما يلي:
المواقع الفرعية:
الموقع | الوصف |
---|---|
instrumentation
|
الضبط على true لـ PGO باستخدام قياس حالة التطبيق الإعداد التلقائي هو
false |
sampling
|
يجب الضبط على true لـ PGO باستخدام تحليل العيّنات. الإعداد التلقائي هو
false |
benchmarks
|
تمثّل هذه السمة قائمة السلاسل. تم تصميم هذه الوحدة لإنشاء ملفات شخصية في حال كان هناك أي مقياس أداء.
الواردة في هذه القائمة تم تحديدها في إصدار ANDROID_PGO_INSTRUMENT
الخيار. |
profile_file
|
ملف الملف الشخصي (المتعلّق بـ toolchain/pgo-profile ) المطلوب استخدامه
مع PGO. يحذّر الإصدار من أنّ هذا الملف غير متوفّر من خلال إضافة هذا
إرسال ملف إلى $DIST_DIR/pgo_profile_file_missing.txt
ما لم يتم ضبط السمة enable_profile_use على
false أو
تم ضبط متغير إصدار ANDROID_PGO_NO_PROFILE_USE على
true |
enable_profile_use
|
اضبط القيمة على false في حال عدم استخدام الملفات الشخصية أثناء
يمكن استخدامها أثناء التشغيل التجريبي لتفعيل جمع الملفات الشخصية أو
إيقاف PGO مؤقتًا. القيمة التلقائية هي true . |
cflags
|
قائمة العلامات الإضافية التي يمكن استخدامها أثناء إصدار أداة. |
مثال على وحدة مع PGO:
cc_library { name: "libexample", srcs: [ "src1.cpp", "src2.cpp", ], static: [ "libstatic1", "libstatic2", ], shared: [ "libshared1", ] pgo: { instrumentation: true, benchmarks: [ "benchmark1", "benchmark2", ], profile_file: "example.profdata", } }
إذا كان مقياسا الأداء benchmark1
وbenchmark2
تمرين السلوك التمثيلي للمكتبات libstatic1
،
libstatic2
، أو libshared1
، pgo
الخاصة بهذه المكتبات أيضًا مقاييس الأداء. تشير رسالة الأشكال البيانية
يمكن أن تتضمن وحدة defaults
في Android.bp
وحدة مشتركة
مواصفة pgo
لمجموعة من المكتبات لتجنب تكرار
قواعد التصميم نفسها لعدة وحدات.
لتحديد ملفات ملف شخصي مختلفة أو إيقاف PGO بشكل انتقائي
البنية، حدد profile_file
،
enable_profile_use
، وcflags
من المواقع لكل
الهندسة المعمارية. مثال (مع استهداف بنية في
غامق):
cc_library { name: "libexample", srcs: [ "src1.cpp", "src2.cpp", ], static: [ "libstatic1", "libstatic2", ], shared: [ "libshared1", ], pgo: { instrumentation: true, benchmarks: [ "benchmark1", "benchmark2", ], } target: { android_arm: { pgo: { profile_file: "example_arm.profdata", } }, android_arm64: { pgo: { profile_file: "example_arm64.profdata", } } } }
لحل المراجع الخاصة بمكتبة وقت تشغيل التحليل أثناء
التحليل المستند إلى الأدوات، واجتياز علامة الإنشاء
-fprofile-generate
إلى الرابط المكتبات الثابتة التي يتم قياسها
باستخدام PGO وجميع المكتبات المشتركة وأي برنامج ثنائي يعتمد بشكل مباشر على
يجب أيضًا ضبط المكتبة الثابتة لـ PGO. ومع ذلك، فإن هذه العناصر المشتركة
المكتبات أو الملفات التنفيذية لا تحتاج إلى استخدام ملفات PGO الشخصية،
يمكن ضبط السمة enable_profile_use
على false
.
خارج هذه القيود، يمكنك تطبيق PGO على أي مكتبة ثابتة أو مشتركة
أو مكتبة أو تنفيذية.
التعامل مع ملفات الملف الشخصي على LLVM
ينتج عن تنفيذ مكتبة أدوات أو ملف قابل للتنفيذ ملف ملف شخصي.
باسم default_unique_id_0.profraw
في
/data/local/tmp
(حيث تكون unique_id
التجزئة الرقمية الفريدة لهذه المكتبة). إذا كان هذا الملف موجودًا بالفعل،
تدمج بيئة تشغيل إنشاء ملف التعريف الملف الشخصي الجديد مع القديم أثناء كتابة
الملفات الشخصية. لاحظ أنه لا يمكن للتطبيق الوصول إلى /data/local/tmp
والمطورون؛ يجب أن يستخدم في مكان ما مثل
/storage/emulated/0/Android/data/packagename/files
بدلاً من ذلك.
لتغيير موقع ملف الملف الشخصي، يجب ضبط LLVM_PROFILE_FILE
.
متغير البيئة في وقت التشغيل.
llvm-profdata
لتحويل ملف .profraw
(وربما
دمج ملفات .profraw
متعددة) في .profdata
الملف:
llvm-profdata merge -output=profile.profdata <.profraw and/or .profdata files>
يمكن بعد ذلك التحقّق من المصدر "profile.profdata
".
شجرة لاستخدامها أثناء البناء.
إذا تم تحميل عدة برامج ثنائية/مكتبات تعمل خلال أحد المعايير،
تُنشئ كل مكتبة ملف .profraw
منفصلاً مع ملف
بمعرّف فريد. ويمكن عادةً دمج كل هذه الملفات في ملف
ملف .profdata
ويُستخدَم لإصدار PGO في الحالات التي تكون فيها المكتبة
معيارًا آخر، فيجب تحسين هذه المكتبة باستخدام
من هذين المقياسَين. في هذه الحالة، show
الخيار llvm-profdata
مفيد:
llvm-profdata merge -output=default_unique_id.profdata default_unique_id_0.profraw llvm-profdata show -all-functions default_unique_id.profdata
لربط unique_id بمكتبات فردية، ابحث في
show
ناتج لكل unique_id لاسم دالة
فريدة من نوعها للمكتبة.
دراسة حالة: PGO for ART
تقدّم دراسة الحالة تقنية ART كمثال واقعي. ومع ذلك، فإنه ليس وصف دقيق للمجموعة الفعلية من المكتبات التي تم تحليلها لـ ART أو وترابطهم المتبادلين
يعتمد التجميع المسبق لـ dex2oat
في ART على
libart-compiler.so
، والذي يعتمد بدوره على
libart.so
يتم تنفيذ بيئة تشغيل ART بشكل أساسي في
libart.so
ستكون مقاييس الأداء لبرنامج التحويل البرمجي ووقت التشغيل
مختلفة:
Benchmark | المكتبات ذات الملفات الشخصية |
---|---|
dex2oat
|
dex2oat (قابل للتنفيذ)، libart-compiler.so ،
libart.so |
art_runtime
|
libart.so
|
- أضِف سمة
pgo
التالية إلىdex2oat
.libart-compiler.so
:pgo: { instrumentation: true, benchmarks: ["dex2oat",], profile_file: "dex2oat.profdata", }
- أضِف سمة
pgo
التالية إلىlibart.so
:pgo: { instrumentation: true, benchmarks: ["art_runtime", "dex2oat",], profile_file: "libart.profdata", }
- إنشاء إصدارات أداة مخصّصة لـ
dex2oat
art_runtime
مقاييس أداء باستخدام:make ANDROID_PGO_INSTRUMENT=dex2oat make ANDROID_PGO_INSTRUMENT=art_runtime
- تنفيذ مقاييس الأداء أثناء ممارسة التمارين الرياضية
dex2oat
و يجب الحصول علىart_runtime
من أجل:- ثلاثة ملفات من نوع
.profraw
منdex2oat
(dex2oat_exe.profdata
،dex2oat_libart-compiler.profdata
،dexeoat_libart.profdata
)، يتم تحديدها باستخدام الطريقة كما هو موضح في التعامل مع الملف الشخصي للإصدار اللغوي الكبير (LLVM) . - نوع
art_runtime_libart.profdata
واحد
- ثلاثة ملفات من نوع
- أنتج ملف ملف شخصي مشترك لملف
dex2oat
القابل للتنفيذlibart-compiler.so
باستخدام:llvm-profdata merge -output=dex2oat.profdata \ dex2oat_exe.profdata dex2oat_libart-compiler.profdata
- احصل على ملف
libart.so
الشخصي من خلال دمج الملفات الشخصية من المعيارَين:llvm-profdata merge -output=libart.profdata \ dex2oat_libart.profdata art_runtime_libart.profdata
قد تكون الأعداد الأولية لـ
libart.so
من الملفين الشخصيين كما يلي: حيث تختلف المعايير في عدد حالات الاختبار المدة التي يتم تشغيلها خلالها. في هذه الحالة، يمكنك استخدام عملية دمج مرجَّحة:llvm-profdata merge -output=libart.profdata \ -weighted-input=2,dex2oat_libart.profdata \ -weighted-input=1,art_runtime_libart.profdata
يعين الأمر أعلاه ضعف الوزن للملف الشخصي من
dex2oat
ينبغي تحديد الوزن الفعلي استنادًا إلى النطاق. بالمعرفة أو التجارب. - يُرجى التحقّق من ملفَّي الملف الشخصي
dex2oat.profdata
وlibart.profdata
إلىtoolchain/pgo-profiles
للحصول على استخدامها أثناء الإنشاء.
بدلاً من ذلك، يمكنك إنشاء إصدار واحد بأداة واحدة يضم جميع المكتبات يتم قياسها باستخدام:
make ANDROID_PGO_INSTRUMENT=dex2oat,art_runtime (or) make ANDROID_PGO_INSTRUMENT=ALL
وينشئ الأمر الثاني جميع الوحدات التي تستخدم PGO لنظام التشغيل تحديد المواصفات الشخصية.