Statistiche di archiviazione più rapide

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

Inoltre, l'algoritmo interno per cancellare i file di dati memorizzati nella cache prendeva in considerazione solo la data di modifica di tutte le app. In questo modo, le app dannose potevano peggiorare l'esperienza utente complessiva impostando date di modifica molto lontane nel futuro per favorire ingiustamente se stesse rispetto ad altre app.

Per migliorare queste esperienze, Android 8.0 offre la possibilità di sfruttare il supporto della funzionalità "quota" del file system 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à di quota fa parte dell'implementazione predefinita di installd. installd utilizza automaticamente la funzionalità di quota se è attivata su un determinato filesystem. Il sistema riprende automaticamente e in modo trasparente il calcolo manuale quando la funzionalità di quota non è attivata o supportata sul dispositivo di blocco misurato.

Per attivare il supporto della quota su un determinato dispositivo di blocco:

  1. Attiva le opzioni del kernel CONFIG_QUOTA, CONFIG_QFMT_V2 e CONFIG_QUOTACTL.
  2. Aggiungi l'opzione quota alla partizione userdata 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 attivata o disattivata 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 di dati sulle quote, il che potrebbe causare un tempo di avvio leggermente più lungo. I successivi avviamenti non saranno interessati.

Il supporto delle quote è stato testato solo su ext4 e Linux 3.18 o versioni successive. Se la funzionalità viene attivata su altri file system o su versioni precedenti del kernel, i produttori di dispositivi sono responsabili del test e della verifica della correttezza delle statistiche.

Non è richiesto alcun supporto hardware speciale.

Convalida

In StorageHostTest sono disponibili test CTS che eseguono API pubbliche per misurare l'utilizzo del disco. Queste API dovrebbero restituire valori corretti, indipendentemente dal fatto che il supporto della quota sia abilitato o meno.

Debug…

L'app di test alloca con attenzione le regioni di spazio su disco utilizzando numeri primi unici per le dimensioni. Quando esegui il debug di questi test, utilizza questo parametro per determinare la causa di eventuali discrepanze. Ad esempio, se un test non va a buon fine con un delta di 11 MB, esamina il metodo Utils.useSpace() per verificare che il blob di 11 MB sia stato archiviato in getExternalCacheDir().

Esistono anche alcuni test interni che possono essere utili per il debug, ma per superarli potrebbe essere necessario disattivare i controlli di sicurezza:

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