הפעלת גודל דף של 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/16KB.

אימות הדגלים של 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, צריך רק להגדיר את דגלי ה-build הבאים ביעד:

  • PRODUCT_NO_BIONIC_PAGE_SIZE_MACRO := true
  • PRODUCT_MAX_PAGE_SIZE_SUPPORTED := 16384

כדי ליצור ספריות משותפות שהן לא חלק מפרויקט Android, צריך להעביר את סימון הקישור הבא:

-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 ניסיוני) ואילך.