Estatísticas de armazenamento mais rápidas

Em versões anteriores do Android, o sistema percorria todos os arquivos de um app específico para medir o uso do disco. Essa medição manual pode levar alguns minutos para ser calculada antes de mostrar os resultados aos usuários nas Configurações.

Além disso, o algoritmo interno para limpar arquivos de dados em cache só verificava o tempo de modificação em todos os apps. Isso permitiu que apps maliciosos degradassem a experiência geral do usuário definindo tempos modificados no futuro para se favorecer injustamente em relação a outros apps.

Para melhorar essas experiências, o Android 8.0 oferece a possibilidade de aproveitar o suporte de "cota" do sistema de arquivos ext4 para retornar estatísticas de uso do disco quase instantaneamente. Esse recurso de cota também melhora a estabilidade do sistema, impedindo que um único app use mais de 90% do espaço em disco ou 50% dos inodes.

Implementação

O recurso de cota faz parte da implementação padrão de installd. O installd usa automaticamente o recurso de cota quando ativado em um sistema de arquivos específico. O sistema retoma o cálculo manual de forma automática e transparente quando o recurso de cota não está ativado ou não tem suporte no dispositivo de bloco que está sendo medido.

Para ativar o suporte a cota em um dispositivo de bloco específico:

  1. Ative as opções CONFIG_QUOTA, CONFIG_QFMT_V2 e CONFIG_QUOTACTL do kernel.
  2. Adicione a opção quota à partição de userdata no arquivo 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

A opção fstab pode ser ativada ou desativada com segurança em dispositivos existentes. Durante a primeira inicialização após a alteração da opção fstab, o fsmgr força uma passagem fsck para atualizar todas as estruturas de dados de cota, o que pode fazer com que a primeira inicialização demore um pouco mais. As inicializações posteriores não serão afetadas.

O suporte a cota foi testado apenas no ext4 e no Linux 3.18 ou mais recente. Se a ativação em outros sistemas de arquivos ou em versões mais antigas do kernel, os fabricantes de dispositivos são responsáveis por testar e verificar a correção das estatísticas.

Não é necessário suporte a hardware especial.

Validação

Há testes CTS em StorageHostTest, que usam APIs públicas para medir o uso do disco. Espera-se que essas APIs retornem valores corretos, independente de o suporte à cota estar ativado ou desativado.

Depuração

O app de teste aloca cuidadosamente regiões de espaço em disco usando números primos exclusivos para o tamanho. Ao depurar esses testes, use isso para determinar a causa de qualquer discrepância. Por exemplo, se um teste falhar com um delta de 11 MB, examine o método Utils.useSpace() para conferir se o blob de 11 MB foi armazenado em getExternalCacheDir().

Há também alguns testes internos que podem ser úteis para depuração, mas pode ser necessário desativar as verificações de segurança para que sejam aprovados:

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