O Android 8 inclui suporte para storaged
, um daemon nativo do Android que
coleciona e publica métricas de armazenamento em dispositivos Android.
- Para diskstats diários, o
storaged
analisa periodicamente/sys/block/mmcblk0/stat
(dispositivos de armazenamento eMMC) ou/sys/block/sda/stat
(dispositivos que não são eMMC). - Para a vida útil do eMMC,
storaged
analisa/d/mmc0/mmc0:001/ext_csd
(se disponível). - Para atribuição de culpa de E/S do app,
storaged
percorre periodicamente/proc/uid_io/stats
e mantém dados analisados, que incluem dados de todos os apps (não apenas os em execução).dumpsys
pode chamarstoraged
para registrar o uso de E/S do app em um relatório de bug.
As informações de diskstat (incluindo diskstats interrompidos) e eMMC são registradas no registro de eventos do Android, onde um serviço de check-in da plataforma coleta os registros.
As operações storaged
ocorrem automaticamente e são processadas inteiramente pelo framework
do Android. Portanto, você não precisa fazer nenhum trabalho de implementação. Esta página
descreve o design de storaged
(incluindo novas interfaces) e como usá-lo para
receber o status de E/S do kernel.
design de armazenamento
Para flexibilidade de contabilidade e permissão, o storaged
é implementado como um módulo
do kernel que retorna informações de E/S por uid (em vez de usar o
proc/PID/io
padrão). Os dados brutos de E/S de cada solicitação de E/S continuam sendo
armazenados e atualizados no kernel task_struct
, e o kernel rastreia
quando um processo é encerrado para não perder o uso de E/S que ocorre no
último evento de pesquisa storaged
.
O módulo lê e processa dados brutos apenas quando o framework o notifica
de uma mudança de uid em primeiro plano/segundo plano ou quando o daemon storaged
solicita um
relatório. Nesse momento, o módulo exporta um nó de arquivo do kernel para
comunicação com o framework e o daemon storaged
.
storaged
introduz a interface /proc/uid_io/stats
, que retorna
uma lista de estatísticas de E/S para cada UID no sistema. O formato é:
<uid>: <foreground read bytes> <foreground write bytes> <foreground read chars> <foreground write chars> <background read bytes> <background write bytes> <background read chars> <background write chars>
- Os bytes de leitura/gravação são eventos de E/S de um dispositivo de armazenamento.
- Os caracteres de leitura/gravação (também em bytes) são dados solicitados por syscalls de leitura/gravação.
Receber o status de E/S do kernel
Para despejar o uso de E/S do kernel, use o comando storaged
com
a opção -u
.
Comando: storaged -u
Formato da saída do comando: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes
bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync
Observação:essa saída é semelhante à de
proc/uid_io/stats
. Isso ocorre porque o storaged
processa dados de
/proc/uid_io/stats
e gera dados próprios.
Exemplo de saída:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000