Implementación almacenada

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