Android 8 agrega compatibilidad para storaged
, un daemon nativo de Android que recopila y publica métricas de almacenamiento en dispositivos Android.
- Para los informes de diskstats diarios,
storaged
analiza de forma periódica/sys/block/mmcblk0/stat
(dispositivos de almacenamiento eMMC) o/sys/block/sda/stat
(dispositivos que no son eMMC). - Para la vida útil de eMMC,
storaged
analiza/d/mmc0/mmc0:001/ext_csd
(si está disponible). - Para la atribución de E/S de la app,
storaged
recorre/proc/uid_io/stats
de forma periódica y mantiene los datos analizados, que incluyen datos de todas las apps (no solo de las apps en ejecución).dumpsys
puede llamar astoraged
para registrar el uso de E/S de la app en un informe de errores.
La información de Diskstat (incluidos los registros de Diskstat detenidos) y eMMC se registra en el registro de eventos de Android, donde un servicio de registro de entrada de la plataforma recopila los registros.
Las operaciones de storaged
se realizan automáticamente y el framework de Android las controla por completo, por lo que no necesitas realizar ninguna tarea de implementación. En esta página, se describe el diseño de storaged
(incluidas las interfaces nuevas) y cómo usarlo para obtener el estado de E/S del kernel.
diseño almacenado
Para obtener flexibilidad de contabilización y permisos, storaged
se implementa como un módulo de kernel que muestra información de E/S por UID (en lugar de usar proc/PID/io
estándar). Los datos de E/S sin procesar de cada solicitud de E/S se siguen almacenando y actualizando en el kernel task_struct
, y el kernel realiza un seguimiento de cuándo finaliza un proceso para no perder el uso de E/S que se produce desde el último evento de sondeo de storaged
.
El módulo lee datos sin procesar y los procesa solo cuando el framework le notifica un cambio de primer o segundo plano de uid o cuando el daemon de storaged
solicita un informe. En ese momento, el módulo exporta un nodo de archivo del kernel para la comunicación con el framework y el daemon storaged
.
storaged
presenta la interfaz /proc/uid_io/stats
, que muestra una lista de estadísticas de E/S para cada UID del sistema. El formato es el siguiente:
<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>
- Los bytes de lectura y escritura son eventos de E/S de un dispositivo de almacenamiento.
- Los caracteres de lectura y escritura (también en bytes) son datos que solicitan las llamadas de sistema de lectura y escritura.
Obtén el estado de E/S del kernel
Para volcar el uso de E/S del kernel, usa el comando storaged
con la opción -u
.
Comando: storaged -u
Formato del resultado del comando: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes
bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync
Nota: Este resultado es similar al de proc/uid_io/stats
. Esto se debe a que storaged
procesa datos de /proc/uid_io/stats
y genera sus propios datos.
Resultado de ejemplo:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000