Xác định kích thước phân vùng siêu

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.