Implementowanie przechowywania

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