super
파티션의 크기를 올바르게 조정하는 것은 기기 업데이트 가능성을 위해 중요합니다. 파티션의 크기는 기기가 수용할 수 있는 업데이트 횟수와 그 업데이트를 성공적으로 받을 수 있는 사용자 수에 직접적인 영향을 주기 때문입니다.
Super 크기 조정에는 몇 가지 중요한 변수가 있습니다. 첫 번째는 팩토리 크기로 기기가 처음 플래시될 때 동적으로 할당되는 모든 파티션의 크기입니다. 두 번째는 성장률로 기기를 업데이트할 수 있는 전체 기간 대비 OS 크기가 증가하는 비율입니다.
또한 가상 A/B 기기는 업데이트 중에 /data
에 공간을 사용할 수 있으므로 이는 super
의 크기를 조정할 때 고려해야 합니다. /data
에 공간이 너무 많이 필요하면 일부 사용자는 업데이트를 받을 수 없거나 받지 않으려고 합니다. 하지만, 대부분의 사용자에게 일정 비율의 여유 공간이 있다고 파악되면 기기는 super
에서 이 공간을 편안하게 줄일 수 있습니다. 즉, 기기가 super
를 충분히 크게 하여 /data
가 필요하지 않다고 보장할 수 있습니다.
다음은 이러한 변수에 따라 super
파티션 크기를 조정하는 데 도움이 되는 몇 가지 모델입니다.
/data 사용
가상 A/B는 /data
크기를 늘리기 위해 super
축소를 유도합니다. 업데이트 중에는 이러한 공간 중 일부가 필요합니다. 업데이트 가능성에 미치는 영향을 이해하려면 시간이 지남에 따라 일정량의 여유 공간이 확보될 가능성이 있는 기기의 비율을 파악하는 것이 중요합니다. 그 숫자는 기기 하드웨어 및 기기의 사용자 동작에 따라 크게 달라집니다. 아래 예에서는 이 번호를 AllowedUserdataUse
라고 합니다.
압축을 사용하지 않음
압축하지 않으면 전체 OTA는 OS와 거의 같은 크기의 스냅샷이 필요하므로 super
크기를 조정할 때 이 점을 고려해야 합니다.
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = Max(FinalDessertUpdate, FinalDessertSize * 2 - AllowedUserdataUse)
예를 들어, 팩토리 크기가 4GB이고 예상되는 성장률이 50%이며 거의 모든 사용자가 1GB의 여유 공간을 확보하거나 업데이트를 위해 최대 1GB까지 확보할 의향이 있는 가상 A/B 기기를 가정합니다. 이 기기의 경우 super
의 크기를 다음과 같이 지정할 수 있습니다.
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = Max(6GB, 6GB * 2 - 1GB) = Max(6GB, 11GB)
따라서 이 기기에는 11GB의 super
파티션이 있어야 합니다.
압축 사용
압축 시 전체 OTA는 OS 크기의 약 70% 정도 되는 스냅샷이 필요합니다.
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = Max(FinalDessertUpdate, FinalDessertSize + FinalOTASnapshotSize - AllowedUserdataUse)
예를 들어, 팩토리 크기가 4GB이고 예상되는 성장률이 50%이며 거의 모든 사용자가 1GB의 여유 공간을 확보하거나 업데이트를 위해 최대 1GB까지 확보할 의향이 있는 가상 A/B 압축으로 구성된 기기를 가정합니다. 이 기기의 경우 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
따라서 이 기기에는 9.2GB super
파티션이 있어야 합니다.
/data를 사용하지 않음
/data
에 스냅샷 공간이 필요하지 않은 OTA를 만들려는 경우 super
크기 조정이 간단합니다.
압축을 사용하지 않음
압축하지 않은 가상 A/B 기기 또는 일반 A/B 기기에서 다음을 실행합니다.
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) Super = FinalDessertSize * 2
예를 들어, 팩토리 크기가 4GB이고 예상되는 성장률이 50%인 가상 A/B 기기를 가정해 보겠습니다. 이 기기에서 OTA 스냅샷에 /data
를 사용하지 않도록 하려면 다음과 같이 계산합니다.
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB Super = FinalDessertSize * 2 = 12GB
따라서 이 기기에는 12GB super
파티션이 있어야 합니다.
압축 사용
압축을 사용하는 가상 A/B 기기의 경우 다음을 실행합니다.
FinalDessertSize = FactorySize + (FactorySize * ExpectedGrowth) FinalOTASnapshotSize = FinalDessertSize * 0.7 Super = FinalDessertSize + FinalOTASnapshotSize
예를 들어, 팩토리 크기가 4GB이고 예상되는 성장률이 50%인 가상 A/B 압축 기기를 가정해 보겠습니다. 이 기기에서 OTA 스냅샷에 /data
를 사용하지 않도록 하려면 다음과 같이 계산합니다.
FinalDessertSize = 4GB + (4GB * 0.5) = 6GB FinalOTASnapshotSize = 6GB * 0.7 = 4.2GB Super = 6GB + 4.2GB = 10.2GB
따라서 이 기기에는 10.2GB super
파티션이 있어야 합니다.
주의사항
팩토리 크기가 4GB이고 최종 업데이트가 5GB인 경우 super
가 10GB가 아닌 9GB여야 할 수도 있습니다. 그러나 첫 번째 업데이트와 최종 업데이트가 모두 5GB이면 최종 업데이트에서 super
의 공간이 충분하지 않을 수 있습니다. 위 수식은 파티션이 언제든지 증가할 수 있다고 가정합니다. 최종 업데이트를 적용하는 데 필요한 공간은 첫 번째 업데이트를 적용하는 데 필요한 공간과 동일할 수 있습니다.
압축 비율은 추정치입니다. OS 이미지는 콘텐츠에 따라 압축이 더 잘 되거나 잘 안 될 수 있습니다. EROFS와 같은 압축된 파일 시스템을 사용하면 가상 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
이미지를 사용하여 성장률을 계산합니다.