EROFS

EROFS est un système de fichiers en lecture seule introduit dans Linux 4.19. Il prend en charge la compression et la déduplication, et est optimisé pour les performances de lecture.

La principale différence entre EROFS et les autres systèmes de fichiers compressés est qu'il prend en charge la décompression sur place. Les données compressées sont stockées à la fin des blocs, de sorte qu'elles puissent être décompressées sur la même page. Dans une image EROFS, plus de 99 % des blocs peuvent utiliser ce schéma, ce qui élimine la nécessité d'allouer des pages supplémentaires lors des opérations de lecture.

Les images EROFS n'ont pas besoin d'être compressées. Toutefois, lorsque vous utilisez la compression, les images sont en moyenne 25 % plus petites. Aux niveaux de compression les plus élevés, les images peuvent être jusqu'à 45 % plus petites.

Qu'il utilise ou non la compression, EROFS s'est avéré plus performant que les autres systèmes de fichiers en termes de temps d'accès aléatoire et séquentiel.

Modifications de la compilation

Pour activer EROFS, utilisez le type de système de fichiers erofs dans BoardConfig.mk. Exemple :

BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs
BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE := erofs

Modifications apportées à fstab

Le type fstab est erofs et la seule option de montage nécessaire est ro. Pour pouvoir continuer à tester les images GSI basées sur EXT4, vous pouvez utiliser deux entrées fstab pour /system..

Exemple :

system    /system    erofs   ro              wait,slotselect,avb=vbmeta_system,logical,first_stage_mount
system    /system    ext4    ro,barrier=1    wait,slotselect,avb=vbmeta_system,logical,first_stage_mount

Optimisation de la compression

Par défaut, EROFS compresse les données en blocs de taille fixe. L'efficacité de la compression peut être considérablement améliorée en activant les blocs de longueur variable. Ce paramètre peut être configuré à l'aide de l'indicateur suivant :

BOARD_EROFS_PCLUSTER_SIZE := 262144

Cela définit la taille maximale de bloc de longueur variable PCLUSTER sur 262 144 octets. Le nombre doit être un multiple de 4 096. Les rendements diminuent à mesure que les valeurs augmentent. De plus, des valeurs élevées peuvent réduire les performances de lecture en fonction du matériel de l'appareil.

Désactiver la compression

Par défaut, le schéma de compression est lz4hc. Pour désactiver la compression, utilisez la commande suivante :

BOARD_EROFS_COMPRESSOR := none

Vous pouvez également modifier ce paramètre pour chaque partition, par exemple :

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Déduplication

EROFS peut partager des blocs en double avec l'indicateur suivant :

BOARD_EROFS_SHARE_DUP_BLOCKS := true

Depuis Android 13, la compression doit être désactivée pour utiliser cet indicateur.

Impact sur les agences de voyages en ligne

Depuis Android 13, EROFS est entièrement compatible avec Virtual A/B. Le générateur de packages OTA peut générer des deltas en décompressant intelligemment les flux LZ4 dans le système de fichiers. Tant que les versions source et cible utilisent la même bibliothèque LZ4, la taille du package OTA est comparable à celle d'un OTA basé sur EXT4. Même si les versions src ou dst n'utilisent pas la même bibliothèque LZ4, cela ne devrait avoir qu'un impact mineur sur la taille de l'OTA.