Implementando almacenamiento

Android O agrega compatibilidad con 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, análisis almacenados /d/ storaged /d/mmc0/mmc0:001/ext_csd (si está disponible).
  • Para culpar a la E/S de la aplicación, el almacenamiento atraviesa periódicamente /proc/uid_io/stats storaged 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 errores.

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.

storaged ocurren automáticamente y son manejadas completamente por el marco de trabajo de Android, por lo que no necesita 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 la contabilidad y la flexibilidad de permisos, storaged se implementa como un módulo de kernel que devuelve información de E/S por UID (en lugar de usar proc/PID/io estándar). Los datos de E/S sin procesar para cada solicitud de E/S continúan almacenándose y actualizándose en kernel task_struct , y el kernel realiza un seguimiento de cuándo finaliza un proceso para que no se pierda el uso de E/S que ocurre desde el último storaged de sondeo almacenado.

El módulo lee datos sin procesar y los procesa solo cuando el marco le notifica un cambio de primer plano/fondo de uid o cuando el demonio storaged solicita un informe. En ese momento, el módulo exporta un nodo de archivo del núcleo para la comunicación 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 del 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: Esta salida es similar a la salida 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