android轮询框架,实现 storaged | Android 开源项目 | Android Open Source Project
Android O 添加了对 storaged(一个 Android 原生守护程序,可在 Android 设备上收集和发布存储指标)的支持。对于日常磁盘统计信息,storaged 会定期解析 /sys/block/mmcblk0/stat(eMMC 存储设备)或 /sys/block/sda/stat(非 eMMC 设备)。对于 eMMC 生命周期,storaged 会解析 /d/mmc0/mmc
Android O 添加了对 storaged(一个 Android 原生守护程序,可在 Android 设备上收集和发布存储指标)的支持。
对于日常磁盘统计信息,storaged 会定期解析 /sys/block/mmcblk0/stat(eMMC 存储设备)或 /sys/block/sda/stat(非 eMMC 设备)。
对于 eMMC 生命周期,storaged 会解析 /d/mmc0/mmc0:001/ext_csd(如果可用)。
对于应用 I/O 问题,storaged 会定期遍历 /proc/uid_io/stats 并维护已解析的数据,包括来自所有应用(不仅仅是正在运行的应用)的数据。dumpsys 可以调用 storaged,以在错误报告中记录应用 I/O 使用情况。
磁盘统计信息(包括已终止的磁盘统计信息)和 eMMC 信息会记录到 Android 事件日志中,而平台登记服务会从此处收集日志。
storaged 操作会自动发生,并且完全由 Android 框架处理,因此您无需执行任何实现工作。本页介绍了 storaged(包括新接口)的设计以及如何使用它从内核获取 I/O 状态。
storaged 设计
出于计算和权限的灵活性考虑,storaged 是作为会返回每个 UID 的 I/O 信息的内核模块实现的(而不是使用标准 proc/PID/io)。每个 I/O 请求的原始 I/O 数据仍然在内核 task_struct 中存储和更新,且该内核会记录进程的退出时间,因此不会错过自上一次 storaged 轮询事件以来的 I/O 使用情况。
只有当框架通知该模块关于 UID 前台/后台切换的情况或 storaged 守护程序请求报告时,它才会读取原始数据并进行处理。届时,该模块会从内核导出一个文件节点,用于与框架和 storaged 守护程序进行通信。
storaged 引入了 /proc/uid_io/stats 接口,它可为系统中的每个 UID 返回 I/O 统计信息列表。格式为:
:
读/写字节是来自存储设备的 I/O 事件。
读/写字符(也以字节为单位)是由读/写系统调用请求的数据。
从内核获取 I/O 状态
如需从内核转储 I/O 使用情况,请使用带有 -u 选项的 storaged 命令。
命令:storaged -u
命令输出格式:name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes
bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync
注意:此输出类似于 proc/uid_io/stats 的输出。这是因为 storaged 会处理来自 /proc/uid_io/stats 的数据并生成自己的数据。
输出示例:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736
com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000
更多推荐
所有评论(0)