חשוב להגדיר את הגודל של המחיצה super
בצורה נכונה כדי לאפשר עדכון של המכשיר. הגודל משפיע ישירות על מספר העדכונים שאפשר להטמיע במכשיר ועל מספר המשתמשים שיכולים להתקין את העדכונים האלה.
יש כמה משתנים חשובים שצריך להביא בחשבון. הראשון הוא factory size, שהוא הגודל של כל המחיצות הדינמיות כשמבצעים את ה-flash הראשון במכשיר. השני הוא שיעור הצמיחה, שהוא האחוז שבו גודל מערכת ההפעלה גדל במהלך כל תקופת העדכון של המכשיר.
בנוסף, מכשירים וירטואליים מסוג A/B יכולים להשתמש במרחב ב-/data
במהלך עדכון, וחשוב להביא זאת בחשבון כשמגדירים את הגודל של super
. אם צריך הרבה מקום ב-/data
, חלק מהמשתמשים לא יכולים (או לא רוצים) להתקין את העדכון. עם זאת, אם ידוע שלרוב המשתמשים יש אחוז מסוים של מקום פנוי, אפשר להחסיר את המקום הזה מ-super
במכשירים. לחלופין, המכשירים יכולים להבטיח שלעולם לא תהיה צורך ב-/data
, פשוט על ידי הגדלת super
מספיק.
בהמשך מפורטים כמה מודלים שיעזרו לכם לקבוע את הגודל של מחיצה super
על סמך המשתנים האלה.
שימוש ב-/data
בדיקת A/B וירטואלית מעודדת צמצום של super
כדי לאפשר הגדלה של /data
. חלק מהמקום הזה נדרש במהלך עדכון. כדי להבין את ההשפעה על היכולת לעדכן את המכשיר, חשוב לדעת באיזה אחוז מהמכשירים צפוי להיות מקום פנוי בנפח הזה לאורך זמן. חישוב המספר הזה תלוי במידה רבה בחומרה של המכשיר ובהתנהגות המשתמשים במכשיר. בדוגמאות הבאות, המספר הזה נקרא AllowedUserdataUse
.
ללא דחיסת נתונים
ללא דחיסה, לעדכון OTA מלא נדרש קובץ snapshot בגודל דומה לזה של מערכת ההפעלה, לכן צריך להביא זאת בחשבון כשמגדירים את הגודל של super
:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
לדוגמה, נניח שיש מכשיר A/B וירטואלי עם נפח אחסון מובנה של 4GB, צמיחה צפויה של 50% וידוע שרוב המשתמשים יש להם 1GB פנוי (או שהם מוכנים לפנות עד 1GB לצורך עדכון). במכשיר הזה, אפשר להגדיר את super
כך:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
לכן, במכשיר הזה צריכה להיות מחיצה super
בנפח 11GB.
עם דחיסה
עם דחיסה, אופליין מלא דורש קובץ snapshot בגודל של כ-70% מגודל מערכת ההפעלה:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
לדוגמה, נניח שיש מכשיר שהוגדר בו דחיסת A/B וירטואלית, עם נפח אחסון מובנה של 4GB, צמיחה צפויה של 50% וידיעה שלמעט כל המשתמשים יש 1GB פנוי (או שהם מוכנים לפנות עד 1GB כדי להתקין עדכון). במכשיר הזה, אפשר להגדיר את super
כך:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = Max(6GB, 6GB + 4.2GB - 1GB) = Max(6GB, 9.2GB) = 9.2GB
לכן, במכשיר הזה צריכה להיות מחיצה super
בנפח 9.2GB.
בלי להסתמך על /data
אם אתם רוצים לבצע עדכוני OTA ללא צורך במקום לשמירת קובצי snapshot ב-/data
, תוכלו להגדיר את super
בקלות.
ללא דחיסת נתונים
במכשיר A/B וירטואלי ללא דחיסה, או במכשיר A/B רגיל:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
לדוגמה, נניח שיש מכשיר A/B וירטואלי עם נפח אחסון מוגדר מראש של 4GB וצפי לצמיחה של 50%. כדי לוודא שהמכשיר הזה אף פעם לא ישתמש ב-/data
לצורך קובצי snapshot של OTA, החישוב שלו ייראה כך:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
לכן, במכשיר הזה צריכה להיות מחיצה super
בנפח 12GB.
עם דחיסה
במכשיר A/B וירטואלי עם דחיסה:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
לדוגמה, נניח שיש לכם מכשיר דחיסה וירטואלי מסוג A/B עם נפח מוגדר מראש של 4GB וצפי לצמיחה של 50%. כדי לוודא שהמכשיר הזה אף פעם לא ישתמש ב-/data
לצורך קובצי snapshot של OTA, החישוב שלו ייראה כך:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
לכן, במכשיר הזה צריכה להיות מחיצה super
בנפח 10.2GB.
נקודות שצריך לשים לב אליהן:
יכול להיות שתגידו לעצמכם שאם גודל המכשיר במצב המקור הוא 4GB והעדכון הסופי הוא 5GB, אז super
צריך להיות 9GB ולא 10GB. עם זאת, אם גם העדכון הראשון וגם העדכון הסופי הם בגודל 5GB, יכול להיות שלא יהיה מספיק מקום ב-super
לעדכון הסופי. הנוסחאות שלמעלה מבוססות על ההנחה שאפשר להגדיל את המחיצות בכל שלב. יכול להיות שהמקום הנדרש להטמעת העדכון הסופי יהיה זהה למקום הנדרש להטמעת העדכון הראשון.
חשוב לזכור שיחסי דחיסה הם אומדנים. דחיסת קובץ אימג' של מערכת הפעלה עשויה להיות טובה יותר או גרועה יותר בהתאם לתוכן שלו. אם משתמשים במערכת קבצים דחוסה כמו EROFS, הדחיסה הנוספת של Virtual A/B מביאה לתוצאות הולכות ופוחתות. במקרה כזה, עדיף להשתמש באחת מהנוסחאות ללא דחיסה בתור הנחיה.
חישוב הגודל
כדי למצוא את הערך של FinalDessertSize
בדוגמאות שלמעלה, צריך להוסיף את הגדלים של כל המחיצות הדינמיות. קובצי האימג' של המחיצות הדינמיות של AOSP הם:
system.img
vendor.img
product.img
system_ext.img
vendor_dlkm.img
system_dlkm.img
חשוב לחשב את הגודל על סמך תמונות שלא עברו ניתוח. כשמפתחים ל-Android 12 וגרסאות קודמות, התמונות נדחסות כברירת מחדל, וניתן לבטל את הדחיסה באמצעות simg2img
.
אפשר גם לחשב את גודל המחיצות מחבילת OTA. כך תוכלו גם להעריך את גודל קובץ ה-snapshot הווירטואלי של A/B לכל מחיצה:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
לחלופין, אפשר להשתמש בכלי הניתוח של OTA. הכלי לא מעלה קבצים ומנתח חבילות OTA באופן מקומי.
כדי למצוא את הערך של ExpectedGrowth
, צריך להשתמש במכשיר שכבר יצא לשוק. כדי לחשב את הצמיחה, משתמשים בתמונת super
הראשונה ובתמונה העדכנית ביותר.