הפעלת גודל דף של 16KB

ב-Android מגרסה 15 (AOSP) ואילך יש תמיכה בבניית מערכת Android עם דף בגודל 16KB. האפשרות הזו משתמשת בזיכרון נוסף, אבל משפר את ביצועי המערכת.

דפים עם 16KB נתמכים רק ביעדים של arm64 עם ליבות של 16KB. אבל יש גם אפשרות לדמות מרחב משתמשים של 16KB ב-x86_64 בשביל Cuttlefish.

כדי להפעיל דפים עם 16KB, צריך להגדיר את אפשרויות ה-build הבאות במכשיר:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true מסירה את PAGE_SIZE והוא גורם לרכיבים לקבוע את גודל הדף בזמן הריצה.
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384 שמבטיח קובצי ELF של פלטפורמה נבנים בפורמט של 16KB. הגודל הגדול מהנדרש מיועד עבור לתאימות עתידית. עם יישור ELF של 16KB, הליבה יכולה לתמוך גודל דפים של 4KB/16 KB.

אימות הדגלים של build

אחרי שבוחרים את היעד lunch, צריך לוודא שהוגדרו הדגלים של ה-build בצורה נכונה בסביבה:

$ source build/envsetup.sh
$ lunch target

$ get_build_var TARGET_MAX_PAGE_SIZE_SUPPORTED
16384
$ get_build_var TARGET_NO_BIONIC_PAGE_SIZE_MACRO
true

אם שתי הפקודות הקודמות מחזירה 16384 ו-true בהתאמה, ה-build הדגלים מוגדרים בצורה נכונה.

יצירת ספריות משותפות עם התאמת ELF של 16KB

כדי ליצור ספריות משותפות שהן חלק android project, צריך להגדיר רק את הדגלים הבאים של build ביעד:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

כדי ליצור ספריות משותפות שאינן חלק מ- android project, צריך להעביר את התכונה הניסיונית הבאה:

-Wl,-z,max-page-size=16384

אימות קבצים בינאריים ופיתוחים מוכנים מראש ליישור ELF של 16KB

הדרך הטובה ביותר לוודא התאמה והתנהגות בזמן ריצה היא לבדוק ולהפעיל ליבה (kernel) שעברה הידור של 16KB. עם זאת, כדי לזהות כמה בעיות בשלב מוקדם יותר:

  • החל מ-Android W (AOSP ניסיוני), ניתן להגדיר PRODUCT_CHECK_PREBUILT_MAX_PAGE_SIZE := true בזמן ה-build. כדאי להשתמש ignore_max_page_size: true בAndroid.bp ו LOCAL_IGNORE_MAX_PAGE_SIZE := true בAndroid.mk כדי להתעלם באופן זמני אותם. ההגדרות האלה מאמתות את כל הגרסאות מוכנות מראש ומאפשרות לך לזהות מתי מעודכן אבל לא מיושר בגודל 16KB.

  • אפשר להריץ את הפקודה atest elf_alignment_test שמאמתת את ההתאמה של קובצי ELF במכשיר במכשירים שמופעלים עם Android 15 (AOSP ניסיוני) ואילך.