Android O agrega soporte para storaged
, un demonio nativo de Android que recopila y publica métricas de almacenamiento en dispositivos Android.
- Para diskstats diarios,
storaged
analiza periódicamente/sys/block/mmcblk0/stat
(dispositivos de almacenamiento eMMC) o/sys/block/sda/stat
(dispositivos que no son eMMC). - Para la vida útil de eMMC, los análisis
storaged
/d/mmc0/mmc0:001/ext_csd
(si están disponibles). - Para culpar a la E/S de la aplicación,
storaged
atraviesa periódicamente/proc/uid_io/stats
y mantiene los datos analizados, que incluyen datos de todas las aplicaciones (no solo las aplicaciones en ejecución).dumpsys
puede llamar astoraged
para registrar el uso de E/S de la aplicación en un informe de error.
La información de Diskstat (incluidos los diskstats bloqueados) y eMMC se registra en el registro de eventos de Android, donde un servicio de registro de plataforma recopila los registros.
Las operaciones storaged
ocurren automáticamente y son manejadas completamente por el marco de trabajo de Android, por lo que no es necesario realizar ningún trabajo de implementación. Esta página describe el diseño de storaged
(incluidas las nuevas interfaces) y cómo usarlo para obtener el estado de E/S del kernel.
diseño almacenado
Para mayor flexibilidad de contabilidad y permisos, storaged
se implementa como un módulo del kernel que devuelve información de E/S por uid (en lugar de utilizar el estándar proc/PID/io
). Los datos de E/S sin procesar para cada solicitud de E/S continúan almacenándose y actualizándose en el kernel task_struct
, y el kernel realiza un seguimiento de cuándo sale un proceso para no perder el uso de E/S que se produce desde el último evento de sondeo storaged
.
El módulo lee datos sin procesar y los procesa solo cuando el marco le notifica sobre un cambio de uid en primer plano/fondo o cuando el demonio storaged
solicita un informe. En ese momento, el módulo exporta un nodo de archivo desde el kernel para comunicarse con el marco y el demonio storaged
.
storaged
presenta la interfaz /proc/uid_io/stats
, que devuelve una lista de estadísticas de E/S para cada UID en el sistema. El formato es:
<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/escritura son eventos de E/S de un dispositivo de almacenamiento.
- Los caracteres de lectura/escritura (también en bytes) son datos solicitados por llamadas al sistema de lectura/escritura.
Obtener el estado de E/S del kernel
Para volcar el uso de E/S del kernel, use el comando storaged
con la opción -u
.
Comando: storaged -u
Formato de salida 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 resultado de proc/uid_io/stats
. Esto se debe a que storaged
procesa datos de /proc/uid_io/stats
y genera sus propios datos.
Salida 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