Việc định cỡ chính xác cho phân vùng super
là rất quan trọng đối với khả năng cập nhật thiết bị. Kích thước ảnh hưởng trực tiếp đến số lượng bản cập nhật mà một thiết bị có thể thực hiện và số lượng người dùng có thể thực hiện thành công các bản cập nhật đó.
Có một vài biến quan trọng cần cân nhắc. Đầu tiên là kích thước ban đầu, là kích thước của tất cả các phân vùng động khi thiết bị được cài đặt ROM lần đầu tiên. Thứ hai là tốc độ tăng trưởng, tức là tỷ lệ phần trăm kích thước hệ điều hành tăng lên trong toàn bộ thời gian cập nhật của thiết bị.
Ngoài ra, các thiết bị A/B ảo có thể sử dụng không gian trên /data
trong quá trình cập nhật và bạn phải cân nhắc điều này khi định cỡ super
. Nếu cần quá nhiều dung lượng trên /data
, thì một số người dùng sẽ không thể (hoặc không muốn) cập nhật. Tuy nhiên, nếu bạn biết rằng hầu hết người dùng có một tỷ lệ phần trăm dung lượng trống, thì các thiết bị có thể thoải mái trừ dung lượng đó khỏi super
. Hoặc các thiết bị có thể đảm bảo rằng /data
không bao giờ cần thiết, chỉ bằng cách làm cho super
đủ lớn.
Dưới đây là một số mô hình giúp định hướng việc định cỡ phân vùng super
dựa trên các biến này.
Dựa vào /data
A/B ảo khuyến khích việc thu nhỏ super
để cho phép tăng kích thước của /data
. Một số không gian đó cần thiết trong quá trình cập nhật. Để hiểu được tác động đến khả năng cập nhật, bạn cần biết tỷ lệ phần trăm thiết bị có thể có dung lượng trống đó theo thời gian. Việc xác định con số này phụ thuộc rất nhiều vào phần cứng của thiết bị và hành vi của người dùng đối với thiết bị đó. Trong các ví dụ bên dưới, số này được gọi là AllowedUserdataUse
.
Không nén
Nếu không nén, bản cập nhật OTA đầy đủ cần có một ảnh chụp nhanh có kích thước gần bằng với hệ điều hành, vì vậy, bạn phải tính đến điều này khi định kích thước super
:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
Ví dụ: hãy xem xét một thiết bị A/B ảo có kích thước ban đầu là 4 GB, mức tăng dự kiến là 50% và biết rằng hầu hết người dùng đều có 1 GB dung lượng trống (hoặc sẵn sàng giải phóng tối đa 1 GB dung lượng để cập nhật). Đối với thiết bị này, bạn có thể định cỡ super
như sau:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
Do đó, thiết bị này phải có phân vùng super
11 GB.
Có nén
Với tính năng nén, bản cập nhật OTA đầy đủ cần có bản tổng quan nhanh có kích thước bằng khoảng 70% kích thước của hệ điều hành:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
Ví dụ: hãy xem xét một thiết bị được định cấu hình bằng tính năng nén A/B ảo, với kích thước ban đầu là 4 GB, mức tăng dự kiến là 50% và biết rằng hầu hết người dùng đều có 1 GB dung lượng trống (hoặc sẵn sàng giải phóng tối đa 1 GB dung lượng để cập nhật). Đối với thiết bị này, bạn có thể định cỡ super
như sau:
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
Do đó, thiết bị này phải có phân vùng super
9,2 GB.
Không dựa vào /data
Nếu bạn muốn các bản cập nhật OTA không bao giờ yêu cầu dung lượng ảnh chụp nhanh trên /data
, thì việc định cỡ super
sẽ rất đơn giản.
Không nén
Đối với thiết bị A/B ảo không nén hoặc thiết bị A/B thông thường:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
Ví dụ: hãy xem xét một thiết bị A/B ảo có kích thước ban đầu là 4 GB và mức tăng trưởng dự kiến là 50%. Để đảm bảo thiết bị này không bao giờ sử dụng /data
cho ảnh chụp nhanh OTA, cách tính toán của thiết bị sẽ có dạng như sau:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
Do đó, thiết bị này phải có phân vùng super
12 GB.
Có nén
Đối với thiết bị A/B ảo có tính năng nén:
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
Ví dụ: hãy xem xét một thiết bị nén A/B ảo có kích thước ban đầu là 4 GB và mức tăng dự kiến là 50%. Để đảm bảo thiết bị này không bao giờ sử dụng /data
cho ảnh chụp nhanh OTA, tính toán của thiết bị sẽ có dạng như sau:
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
Do đó, thiết bị này phải có phân vùng super
10,2 GB.
Chú ý
Bạn có thể quan sát thấy rằng nếu kích thước ban đầu là 4 GB và bản cập nhật cuối cùng là
5 GB, thì super
cần phải là 9 GB thay vì 10 GB. Tuy nhiên, nếu bản cập nhật đầu tiên và bản cập nhật cuối cùng đều có dung lượng 5 GB, thì không gian trong super
có thể không đủ cho bản cập nhật cuối cùng. Các công thức ở trên giả định rằng việc tăng kích thước phân vùng có thể xảy ra bất cứ lúc nào. Dung lượng cần thiết để áp dụng bản cập nhật cuối cùng có thể giống với dung lượng cần thiết để áp dụng bản cập nhật đầu tiên.
Xin lưu ý rằng tỷ lệ nén là ước tính. Hình ảnh hệ điều hành có thể nén tốt hơn hoặc kém hơn tuỳ thuộc vào nội dung của hình ảnh đó. Nếu sử dụng hệ thống tệp nén như EROFS, thì tính năng nén bổ sung từ A/B ảo sẽ có hiệu quả giảm dần. Trong trường hợp này, bạn nên sử dụng một trong các công thức không nén làm nguyên tắc.
Tính kích thước
Để tìm giá trị của FinalDessertSize
trong các ví dụ trên, hãy cộng kích thước của tất cả các phân vùng động lại với nhau. Hình ảnh phân vùng động AOSP là:
system.img
vendor.img
product.img
system_ext.img
vendor_dlkm.img
system_dlkm.img
Hãy nhớ tính kích thước dựa trên hình ảnh chưa được phân tích cú pháp. Khi tạo Android 12 trở xuống, hình ảnh được phân tách theo mặc định và có thể được huỷ phân tách bằng simg2img
.
Bạn cũng có thể tính toán kích thước phân vùng từ gói OTA. Việc này cũng giúp ước tính kích thước ảnh chụp nhanh A/B ảo cho mỗi phân vùng:
python3 system/update_engine/scripts/payload_info.py path/to/ota-package.zip
Hoặc bạn có thể sử dụng Công cụ phân tích OTA. Công cụ này không tải tệp lên và phân tích các gói OTA trên máy.
Để tìm giá trị của ExpectedGrowth
, hãy sử dụng một thiết bị đã phát hành trước đó. Sử dụng hình ảnh super
sớm nhất và mới nhất để tính mức tăng trưởng.