В 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