Implementa storaged

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 a storaged 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