Android 8 obsługuje storaged
, czyli natywny demon Androida, który zbiera i publikuje dane o pamięci na urządzeniach z Androidem.
- W przypadku dziennych statystyk dysków
storaged
okresowo analizuje/sys/block/mmcblk0/stat
(urządzenia pamięci eMMC) lub/sys/block/sda/stat
(urządzenia inne niż eMMC). - W przypadku trwałości eMMC funkcja
storaged
analizuje wartość/d/mmc0/mmc0:001/ext_csd
(jeśli jest dostępna). - W celu przypisania odpowiedzialności za dane wejściowe i wyjściowe aplikacji
storaged
okresowo przechodzi przez/proc/uid_io/stats
i zachowuje przeanalizowane dane, które obejmują dane ze wszystkich aplikacji (nie tylko tych uruchomionych).dumpsys
może wywołaćstoraged
, aby zarejestrować użycie wejść/wyjść aplikacji w raporcie o błędach.
Informacje o diskstat (w tym o zatrzymanych statystykach dysku) i eMMC są zapisywane w dzienniku zdarzeń Androida, gdzie usługa sprawdzania platformy zbiera logi.
Operacje storaged
są wykonywane automatycznie i obsługiwane całkowicie przez framework Androida, więc nie musisz nic robić. Na tej stronie opisaliśmy projekt storaged
(w tym nowe interfejsy) oraz sposób korzystania z niego do uzyskiwania stanu we/wy z rdzenia.
projekt magazynu
Aby zapewnić elastyczność w zakresie rozliczania i uprawnień, funkcja storaged
jest implementowana jako moduł jądra, który zwraca informacje o wejściu/wyjściu dla konkretnego identyfikatora użytkownika (zamiast standardowej funkcji proc/PID/io
). Dane o wejściu/wyjściu dla każdego żądania są nadal przechowywane i aktualizowane w jądrze task_struct
, a jądro śledzi, kiedy proces się kończy, aby nie pominąć użycia funkcji wejścia/wyjścia, które występuje po ostatnim zdarzeniu zapytania storaged
.
Moduł odczytuje dane nieprzetworzone i przetworzy je tylko wtedy, gdy framework powiadomi go o przełączeniu uid na pierwszy lub drugi plan albo gdy demon storaged
poprosi o raport. W tym momencie moduł eksportuje węzeł pliku z jądra do komunikacji z ramką i demonem storaged
.
storaged
wprowadza interfejs /proc/uid_io/stats
, który zwraca listę statystyk wejść/wyjść dla każdego identyfikatora UID w systemie. Format:
<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 wejścia-wyjścia z urządzenia pamięci masowej.
- read/write chars (również w bajtach) to dane żądane przez read/write syscalls.
Pobieranie stanu wejść/wyjść z jądra
Aby wygenerować dane dotyczące wykorzystania wejść/wyjść z jądra, użyj polecenia storaged
z opcją -u
.
Polecenie: storaged -u
Format wyniku polecenia: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes
bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync
Uwaga: te dane wyjściowe są podobne do danych wyjściowych w przypadku polecenia proc/uid_io/stats
. Dzieje się tak, ponieważ usługa storaged
przetwarza dane z /proc/uid_io/stats
i generuje własne dane.
Przykładowe dane wyjściowe:
com.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736 com.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000