Android O dodaje obsługę storaged
, natywnego demona Androida, który zbiera i publikuje metryki pamięci na urządzeniach z Androidem.
- W przypadku codziennych statystyk dysków,
storaged
okresowo analizują/sys/block/mmcblk0/stat
(urządzenia pamięci eMMC) lub/sys/block/sda/stat
(urządzenia inne niż eMMC). - Przez cały okres istnienia eMMC
storaged
analizy/d/mmc0/mmc0:001/ext_csd
(jeśli są dostępne). - W przypadku obwiniania operacji we/wy aplikacji,
storaged
okresowo przegląda plik/proc/uid_io/stats
i przechowuje przeanalizowane dane, które obejmują dane ze wszystkich aplikacji (nie tylko uruchomionych aplikacji).dumpsys
może wywołaćstoraged
, aby zarejestrować wykorzystanie we/wy aplikacji w raporcie o błędzie.
Informacje o programie Diskstat (w tym o zablokowanych statystykach dysków) i eMMC są rejestrowane w dzienniku zdarzeń systemu Android, gdzie zbiera je usługa sprawdzania platformy.
operacje storaged
odbywają się automatycznie i są obsługiwane w całości przez platformę Android, więc nie musisz wykonywać żadnych prac implementacyjnych. Na tej stronie opisano projekt storaged
(w tym nowe interfejsy) i sposób jej użycia w celu uzyskania statusu we/wy z jądra.
przechowywany projekt
Aby zapewnić elastyczność rozliczania i uprawnień, storaged
jest zaimplementowane jako moduł jądra, który zwraca informacje o wejściach/wyjściach dla każdego interfejsu użytkownika (zamiast używania standardowego proc/PID/io
). Surowe dane we/wy dla każdego żądania we/wy są nadal przechowywane i aktualizowane w jądrze task_struct
, a jądro śledzi zakończenie procesu, aby nie przegapić użycia we/wy, które ma miejsce od ostatniego storaged
zdarzenia odpytywania.
Moduł odczytuje surowe dane i przetwarza je tylko wtedy, gdy struktura powiadomi go o przełączeniu pierwszego planu/tła uid lub gdy storaged
demon zażąda raportu. W tym czasie moduł eksportuje węzeł pliku z jądra w celu komunikacji z frameworkiem i storaged
demonem.
storaged
wprowadza interfejs /proc/uid_io/stats
, który zwraca listę statystyk we/wy dla każdego UID w systemie. Format to:
<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>
- Bajty odczytu/zapisu to zdarzenia we/wy z urządzenia pamięci masowej.
- Znaki odczytu/zapisu (również w bajtach) to dane żądane przez wywołania systemowe odczytu/zapisu.
Uzyskiwanie statusu we/wy z jądra
Aby zrzucić użycie wejścia/wyjścia z jądra, użyj polecenia storaged
z opcją -u
.
Polecenie: storaged -u
Format wyjściowy polecenia: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync
Uwaga: To wyjście jest podobne do wyniku proc/uid_io/stats
. Dzieje się tak, ponieważ storaged
przetwarza dane z /proc/uid_io/stats
i generuje własne dane.
Przykładowe wyjście:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000