EROFS

EROFS è un filesystem di sola lettura introdotto in Linux 4.19. Supporta la compressione e la deduplicazione ed è ottimizzato per le prestazioni di lettura.

La differenza principale tra EROFS e altri file system compressi è che supporta la decompressione sul posto. I dati compressi vengono archiviati alla fine dei blocchi, in modo che possano essere decompressi nella stessa pagina. In un'immagine EROFS, oltre il 99% dei blocchi è in grado di utilizzare questo schema, eliminando così la necessità di allocare pagine extra durante le operazioni di lettura.

Le immagini EROFS non devono essere compresse. Quando si utilizza la compressione, tuttavia, le immagini risultano in media più piccole del 25% circa. Ai livelli di compressione più elevati, le immagini possono essere più piccole fino al 45%.

Sia che utilizzi la compressione o meno, EROFS ha dimostrato di superare gli altri filesystem sia nei tempi di accesso casuale che sequenziale.

Costruisci modifiche

Per abilitare EROFS, utilizzare il tipo di file system "erofs" in BoardConfig.mk . Per esempio:

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

Modifiche fstab

Il tipo fstab è "erofs" e l'unica opzione di montaggio necessaria è "ro". Per mantenere la possibilità di testare immagini GSI basate su EXT4, puoi utilizzare due voci fstab per /system.

Per esempio:

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

Accordatura della compressione

Per impostazione predefinita, EROFS si comprime in blocchi di dimensione fissa. L'efficacia della compressione può essere aumentata in modo significativo abilitando blocchi di lunghezza variabile. Questo può essere configurato dal seguente flag:

BOARD_EROFS_PCLUSTER_SIZE := 262144

Imposta la dimensione massima del "pcluster", o dimensione del blocco a lunghezza variabile, su 262144 byte. Il numero deve essere un multiplo di 4096. Sono presenti rendimenti decrescenti a valori più alti e valori più alti possono ridurre le prestazioni di lettura a seconda dell'hardware del dispositivo.

Disattivazione della compressione

Per impostazione predefinita, lo schema di compressione è lz4hc . Per disabilitare la compressione, utilizzare:

BOARD_EROFS_COMPRESSOR := none

Questo può essere modificato anche in base alla partizione, ad esempio:

BOARD_SYSTEMIMAGE_EROFS_COMPRESSOR := none

Deduplicazione

EROFS può condividere blocchi duplicati con il seguente flag:

BOARD_EROFS_SHARE_DUP_BLOCKS := true

A partire da Android 13, la compressione deve essere disabilitata per utilizzare questo flag.

Impatto sulle OTA

A partire da Android 13, EROFS è completamente supportato con Virtual A/B. Il generatore di pacchetti OTA è in grado di generare delta decomprimendo in modo intelligente i flussi LZ4 all'interno del filesystem. Finché sia ​​la build di origine che quella di destinazione utilizzano la stessa libreria LZ4, il pacchetto OTA sarà di dimensioni paragonabili a un OTA basato su EXT4. Anche se le build src/dst non utilizzano la stessa libreria lz4, ciò dovrebbe avere solo un impatto minimo sulle dimensioni dell'OTA.