Statistiche di archiviazione più veloci

Nelle versioni precedenti di Android, il sistema esaminava tutti i file di proprietà di una particolare app per misurare l'utilizzo del disco. Il calcolo di questa misurazione manuale potrebbe richiedere alcuni minuti prima di visualizzare i risultati agli utenti in Impostazioni.

Inoltre, l'algoritmo interno per cancellare i file di dati memorizzati nella cache ha esaminato solo l'ora modificata in tutte le app. Ciò ha consentito alle app dannose di peggiorare l'esperienza utente complessiva impostando tempi modificati molto lontani nel futuro per favorirsi ingiustamente rispetto ad altre app.

Per migliorare queste esperienze, Android 8.0 offre la possibilità di sfruttare il supporto della "quota" del filesystem ext4 per restituire statistiche sull'utilizzo del disco quasi istantaneamente. Questa funzionalità di quota migliora anche la stabilità del sistema impedendo a una singola app di utilizzare più del 90% dello spazio su disco o il 50% degli inode.

Implementazione

La funzionalità quota fa parte dell'implementazione predefinita di installd . installd utilizza automaticamente la funzionalità di quota quando abilitata su un particolare file system. Il sistema riprende automaticamente e in modo trasparente il calcolo manuale quando la funzionalità di quota non è abilitata o supportata sul dispositivo a blocchi da misurare.

Per abilitare il supporto delle quote su un particolare dispositivo a blocchi:

  1. Abilitare le opzioni del kernel CONFIG_QUOTA , CONFIG_QFMT_V2 e CONFIG_QUOTACTL .
  2. Aggiungi l'opzione quota alla partizione dei dati utente nel file fstab:
    /dev/block/platform/soc/624000.ufshc/by-name/userdata   /data
    ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc
    latemount,wait,check,formattable,fileencryption=ice,quota

L'opzione fstab può essere abilitata o disabilitata in sicurezza sui dispositivi esistenti. Durante il primo avvio dopo aver modificato l'opzione fstab , fsmgr forza un passaggio fsck per aggiornare tutte le strutture dei dati di quota, il che potrebbe far sì che il primo avvio richieda leggermente più tempo. Gli avvii successivi non saranno interessati.

Il supporto delle quote è stato testato solo su ext4 e Linux 3.18 o versioni successive. Se si abilita su altri file system o su versioni precedenti del kernel, i produttori dei dispositivi sono responsabili dei test e del controllo della correttezza delle statistiche.

Non è richiesto alcun supporto hardware speciale.

Validazione

Sono presenti test CTS in StorageHostTest , che esercitano le API pubbliche per misurare l'utilizzo del disco. Si prevede che queste API restituiscano valori corretti indipendentemente dal fatto che il supporto delle quote sia abilitato o disabilitato.

Debug

L'app di test alloca attentamente le regioni dello spazio su disco utilizzando numeri primi univoci per la dimensione. Durante il debug di questi test, utilizzalo per determinare la causa di eventuali discrepanze. Ad esempio, se un test fallisce con un delta di 11 MB, esamina il metodo Utils.useSpace() per verificare che il BLOB da 11 MB è stato archiviato in getExternalCacheDir() .

Esistono anche alcuni test interni che potrebbero essere utili per il debug, ma potrebbero richiedere la disabilitazione dei controlli di sicurezza per essere superati:

runtest -x frameworks/base/services/tests/servicestests/ \
  src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test