Estatísticas de armazenamento mais rápidas

Em versões anteriores do Android, o sistema transferia todos os arquivos de propriedade de um um app específico para medir o uso do disco. Essa medição manual pode levar alguns minutos para calcular antes de exibir os resultados aos usuários em "Configurações".

Além disso, o algoritmo interno para limpar arquivos de dados em cache só analisava em todos os apps. Isso permitia que apps maliciosos prejudicassem a a experiência geral do usuário definindo horários de modificação distantes para situações preferirem a si mesmos em relação a outros apps.

Para melhorar essas experiências, o Android 8.0 se oferece para aproveitar os recursos "cota" para retornar estatísticas de uso do disco quase instantaneamente. Esta cota também melhora a estabilidade do sistema, impedindo que qualquer aplicativo 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 o recurso de cota automaticamente quando ativado em um um sistema de arquivos específico. O sistema retoma de forma automática e transparente cálculo manual quando o recurso de cota não estiver ativado ou não for compatível com a dispositivo de transferência por blocos sendo medido.

Para ativar o suporte à cota em um dispositivo de transferência por blocos específico:

  1. Ative CONFIG_QUOTA, CONFIG_QFMT_V2 e Opções de kernel CONFIG_QUOTACTL.
  2. Adicionar a opção quota à partição de dados do usuário no fstab arquivo:
    /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 VMs dispositivos. Na primeira inicialização, após mudar a opção fstab, fsmgr força uma passagem fsck a atualizar todos os dados de cota o que pode fazer com que a primeira inicialização demore um pouco mais. Depois inicializações não serão afetadas.

O suporte a cotas só foi testado em ext4 e Linux 3.18 ou mais recente. Se ativar em outros sistemas de arquivos ou em versões mais antigas do kernel, os fabricantes de dispositivos responsável por testar e verificar a precisão das estatísticas.

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

Validação

Há testes CTS em StorageHostTest, que exercem testes públicos APIs para medir o uso do disco. Espera-se que essas APIs retornem valores corretos independentemente do suporte a cotas estar ativado ou desativado.

Depuração

O app de teste aloca cuidadosamente as 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âncias. Por exemplo, se um teste falhar com um delta de 11 MB, examine o 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 eles pode exigir a desativação das verificações de segurança para passar em:

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