Estatísticas de armazenamento mais rápidas

Nas versões anteriores do Android, o sistema percorria todos os arquivos pertencentes a um aplicativo específico para medir o uso do disco. Essa medição manual pode levar alguns minutos para ser computada antes de exibir os resultados aos usuários em Configurações.

Além disso, o algoritmo interno para limpar os arquivos de dados em cache apenas analisava o tempo modificado em todos os aplicativos. Isso permitiu que aplicativos maliciosos degradassem a experiência geral do usuário, definindo tempos modificados no futuro para favorecer injustamente a si mesmos em relação a outros aplicativos.

Para melhorar essas experiências, o Android 8.0 oferece o suporte a "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 qualquer aplicativo único 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 do installd . 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 é suportado no dispositivo de bloco que está sendo medido.

Para habilitar o suporte a cotas em um dispositivo de bloco específico:

  1. Habilite as opções de kernel CONFIG_QUOTA , CONFIG_QFMT_V2 e CONFIG_QUOTACTL .
  2. Adicione a opção de quota à sua partição userdata em seu 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 habilitada ou desabilitada com segurança em dispositivos existentes. Durante a primeira inicialização após alterar a opção fstab , o fsmgr força uma passagem do 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 botas subsequentes não serão afetadas.

O suporte a cotas foi testado apenas em ext4 e Linux 3.18 ou superior. Se habilitar 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 exatidão das estatísticas.

Nenhum suporte de hardware especial é necessário.

Validação

Existem testes CTS em StorageHostTest , que exercitam APIs públicas para medir o uso do disco. Espera-se que essas APIs retornem valores corretos, independentemente do suporte de cota estar ativado ou desativado.

Depuração

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

Há também alguns testes internos que podem ser úteis para depuração, mas podem exigir a desativação das verificações de segurança para passar:

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