اندازه صحیح پارتیشن super
برای به روز رسانی دستگاه مهم است. اندازه به طور مستقیم بر تعداد بهروزرسانیهایی که یک دستگاه میتواند انجام دهد و تعداد کاربرانی که میتوانند آن بهروزرسانیها را با موفقیت انجام دهند، تأثیر میگذارد.
چند متغیر مهم وجود دارد که باید در نظر گرفته شود. اولین مورد اندازه کارخانه است، که اندازه تمام پارتیشن های پویا زمانی که دستگاه برای اولین بار فلش می شود است. دوم نرخ رشد است، که درصدی است که اندازه سیستم عامل در طول عمر قابل به روز رسانی دستگاه افزایش می یابد.
بهعلاوه، دستگاههای مجازی A/B میتوانند از فضای روی /data
در طول بهروزرسانی استفاده کنند، و این باید هنگام اندازهگیری super
در نظر گرفته شود. اگر فضای زیادی در /data
نیاز باشد، برخی از کاربران قادر به دریافت بهروزرسانی نیستند (یا نمیخواهند). با این حال، اگر مشخص باشد که اکثر کاربران درصدی از فضای خالی دارند، دستگاهها میتوانند به راحتی آن فضا را از super
کم کنند. یا، دستگاهها میتوانند تضمین کنند که /data
هرگز مورد نیاز نیست، به سادگی با بزرگ کردن super
کافی.
در زیر چند مدل برای کمک به هدایت اندازه پارتیشن super
بر اساس این متغیرها آورده شده است.
با تکیه بر داده /
A/B مجازی کوچک شدن super
را تشویق می کند تا اندازه /data
را افزایش دهد. مقداری از آن فضا در طول به روز رسانی مورد نیاز است. برای درک تأثیر بر قابلیت بهروزرسانی، ضروری است بدانیم چند درصد از دستگاهها احتمالاً در طول زمان آن مقدار فضای خالی خواهند داشت. تعیین این عدد به شدت به سخت افزار دستگاه و رفتار کاربران آن دستگاه بستگی دارد. در مثالهای زیر، به این عدد AllowedUserdataUse
گفته میشود.
بدون فشرده سازی
بدون فشردهسازی، یک OTA کامل به یک عکس فوری تقریباً به اندازه سیستمعامل نیاز دارد، بنابراین باید هنگام اندازهگیری super
در نظر گرفته شود:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
به عنوان مثال، یک دستگاه A/B مجازی با اندازه کارخانه 4 گیگابایت، رشد مورد انتظار 50 درصد و آگاهی از اینکه تقریباً همه کاربران 1 گیگابایت فضای خالی دارند (یا مایلند تا 1 گیگابایت فضا برای به روز رسانی آزاد کنند) را در نظر بگیرید. . برای این دستگاه، super
را می توان به این اندازه اندازه داد:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
بنابراین، این دستگاه باید دارای یک super
11 گیگابایتی باشد.
با فشرده سازی
با فشرده سازی، یک OTA کامل به یک عکس فوری تقریباً 70٪ از اندازه سیستم عامل نیاز دارد:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
به عنوان مثال، دستگاهی را در نظر بگیرید که با فشردهسازی A/B مجازی، با اندازه کارخانه 4 گیگابایت، رشد مورد انتظار 50 درصد و آگاهی از این که تقریباً همه کاربران 1 گیگابایت فضای آزاد دارند (یا مایل به آزاد کردن حداکثر 1 گیگابایت فضا هستند را در نظر بگیرید. یک به روز رسانی). برای این دستگاه، 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.2 گیگابایتی باشد.
بدون اتکا به /داده
اگر میخواهید OTAهایی داشته باشید که هرگز به فضای عکس فوری در /data
نیاز ندارند، اندازهگیری super
ساده است.
بدون فشرده سازی
برای یک دستگاه A/B مجازی بدون فشرده سازی، یا یک دستگاه A/B معمولی:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
به عنوان مثال، یک دستگاه A/B مجازی با اندازه کارخانه 4 گیگابایت و رشد مورد انتظار 50 درصد را در نظر بگیرید. برای اطمینان از اینکه این دستگاه هرگز /data
برای عکسهای فوری OTA استفاده نمیکند، محاسبه آن به این صورت است:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
بنابراین، این دستگاه باید دارای یک super
12 گیگابایتی باشد.
با فشرده سازی
برای یک دستگاه مجازی A/B با فشرده سازی:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
به عنوان مثال، یک دستگاه فشرده سازی A/B مجازی با اندازه کارخانه 4 گیگابایت و رشد مورد انتظار 50 درصد را در نظر بگیرید. برای اطمینان از اینکه این دستگاه هرگز /data
برای عکسهای فوری OTA استفاده نمیکند، محاسبه آن به این صورت است:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
بنابراین، این دستگاه باید دارای یک super
10.2 گیگابایتی باشد.
هشدارها
ممکن است وسوسه انگیز باشد که مشاهده کنید که اگر اندازه کارخانه 4 گیگابایت است، و به روز رسانی نهایی 5 گیگابایت است، پس super
باید 9 گیگابایت باشد نه 10 گیگابایت. با این حال، اگر اولین بهروزرسانی و بهروزرسانی نهایی هر دو 5 گیگابایت باشند، ممکن است فضای 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 محاسبه کرد. با انجام این کار، اندازه عکس فوری A/B مجازی برای هر پارتیشن نیز تخمین زده میشود:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
یا می توانید از ابزار تحلیل OTA استفاده کنید. این ابزار هیچ فایلی را آپلود نمی کند و بسته های OTA را به صورت محلی تجزیه و تحلیل می کند.
برای یافتن مقدار ExpectedGrowth
، از دستگاهی که قبلاً منتشر شده است استفاده کنید. از اولین و جدیدترین تصویر super
برای محاسبه رشد استفاده کنید.