Làm thế nào để kích thước siêu

Việc định cỡ super phân vùng một cách chính xác rất quan trọng đối với khả năng cập nhật của 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à 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 xem xét. Đầu tiên là kích thước xuất xưởng , là kích thước của tất cả các phân vùng động khi thiết bị được flash lần đầu tiên. Thứ hai là tốc độ tăng trưởng , 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 dung lượng trên /data trong quá trình cập nhật và điều này phải được xem xét 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 không thể (hoặc không muốn) nhận bản cập nhật. Tuy nhiên, nếu biết rằng hầu hết người dùng đều có một số 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 tạo super thước đủ lớn.

Dưới đây là một số mô hình giúp hướng dẫn định cỡ super phân vùng dựa trên các biến này.

Dựa vào/dữ liệu

A/B ảo khuyến khích thu nhỏ super để cho phép tăng kích thước của /data . Một số không gian đó là cần thiết trong quá trình cập nhật. Để hiểu tác động đến khả năng cập nhật, điều cần thiết là phải biết bao nhiêu phần trăm thiết bị có thể có dung lượng trống đó theo thời gian. Việc tìm ra 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 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, một OTA đầy đủ cần một ảnh chụp nhanh có kích thước gần giống với HĐH, do đó, điều đó phải được tính đến khi định 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ó quy mô xuất xưởng là 4 GB, mức tăng trưởng dự kiến ​​là 50% và biết rằng hầu hết tất cả người dùng đều có 1 GB trống (hoặc sẵn sàng giải phóng tới 1 GB dung lượng để cập nhật) . Đối với thiết bị này, super có thể có kích thước như sau:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)

Vì vậy, thiết bị này phải có super phân vùng 11 GB.

Với nén

Với tính năng nén, một OTA đầy đủ cần ảnh chụp nhanh khoảng 70% kích thước của HĐH:

  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 với tính năng nén A/B ảo, có kích thước ban đầu là 4GB, mức tăng trưởng dự kiến ​​là 50% và biết rằng hầu hết tất cả người dùng đều có 1 GB trống (hoặc sẵn sàng giải phóng tới 1 GB dung lượng cho một bản cập nhật). Đối với thiết bị này, super có thể có kích thước 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

Vì vậy, thiết bị này phải có super phân vùng 9,2 GB.

Không dựa vào/dữ liệu

Nếu bạn muốn có các 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 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ó quy mô xuất xưởng 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, phép tính của thiết bị sẽ như sau:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  Super = FinalDessertSize * 2 = 12GB

Vì vậy, thiết bị này phải có super phân vùng 12 GB.

Với 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ó quy mô xuất xưởng 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, phép tính của thiết bị sẽ như sau:

  FinalDessertSize = 4GB + (4GB * 0.5) = 6GB
  FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB
  Super = 6GB + 4.2GB = 10.2GB

Vì vậy, thiết bị này phải có super phân vùng 10,2 GB.

Hãy cẩn thận

Có thể bạn sẽ thấy thú vị khi nhận thấy rằng nếu kích thước xuất xưởng 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ì dung lượng 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 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 như dung lượng cần thiết để áp dụng bản cập nhật đầu tiên.

Lưu ý rằng tỷ lệ nén chỉ 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 tùy thuộc vào nội dung của nó. Nếu sử dụng hệ thống tệp nén chẳng hạn như EROFS thì việc nén bổ sung từ Virtual A/B sẽ có tác dụng giảm dần. Trong trường hợp này, tốt hơn nên sử dụng một trong các công thức không nén làm hướng dẫn.

Đo lường

Để 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

Đảm bảo tính toán kích thước dựa trên hình ảnh không được lọc. Khi xây dựng Android 12 trở xuống, hình ảnh sẽ được phân tách theo mặc định và có thể được phân tách bằng simg2img .

Cũng có thể tính toán kích thước phân vùng từ gói OTA. Làm như vậy cũng ước tính kích thước ảnh chụp nhanh A/B ảo cho từng 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 lên bất kỳ tệp nào và phân tích các gói OTA cục bộ.

Để tìm giá trị của ExpectedGrowth , hãy sử dụng thiết bị đã phát hành trước đó. Sử dụng super hình ảnh sớm nhất và gần đây nhất để tính toán mức tăng trưởng.