В Android 8 добавлена поддержка storaged — собственного демона Android, который собирает и публикует показатели хранилища на устройствах Android.
- Для ежедневной статистики диска
storagedпериодически анализирует/sys/block/mmcblk0/stat(устройства хранения eMMC) или/sys/block/sda/stat(устройства, отличные от eMMC). - В течение срока службы eMMC
storagedанализирует/d/mmc0/mmc0:001/ext_csd(если доступно). - Для обвинений в вводе-выводе приложения
storagedпериодически просматривает/proc/uid_io/statsи сохраняет проанализированные данные, которые включают данные всех приложений (а не только запущенных приложений).dumpsysможет вызватьstoraged, чтобы зарегистрировать использование ввода-вывода приложения в отчете об ошибке.
Информация о Diskstat (включая остановленную информацию о дискете) и eMMC записывается в журнал событий Android, где служба регистрации платформы собирает журналы.
операции storaged происходят автоматически и полностью обрабатываются платформой Android, поэтому вам не нужно выполнять какую-либо работу по реализации. На этой странице описывается конструкция storaged (включая новые интерфейсы) и способы его использования для получения статуса ввода-вывода от ядра.
хранимый дизайн
Для обеспечения гибкости учета и разрешений storaged реализован как модуль ядра, который возвращает информацию ввода-вывода для каждого uid (вместо использования стандартного proc/PID/io ). Необработанные данные ввода-вывода для каждого запроса ввода-вывода продолжают храниться и обновляться в ядре task_struct , а ядро отслеживает момент завершения процесса, чтобы не пропустить использование ввода-вывода, произошедшее в результате последнего storaged события опроса.
Модуль считывает необработанные данные и обрабатывает их только тогда, когда платформа уведомляет его о переключении приоритетного/фонового режима uid или когда демон storaged запрашивает отчет. В это время модуль экспортирует файловый узел из ядра для связи с платформой и демоном storaged .
storaged представляет интерфейс /proc/uid_io/stats , который возвращает список статистики ввода-вывода для каждого UID в системе. Формат:
<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>
- Байты чтения/записи — это события ввода-вывода с устройства хранения.
- Символы чтения/записи (также в байтах) — это данные, запрашиваемые системными вызовами чтения/записи.
Получить статус ввода-вывода от ядра
Чтобы сбросить использование ввода-вывода из ядра, используйте команду storaged с опцией -u .
Команда: 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