Szybsze statystyki przechowywania

We wcześniejszych wersjach Androida system przeglądał wszystkie pliki należące do określonej aplikacji, aby zmierzyć wykorzystanie dysku. Obliczenie tego ręcznego pomiaru może zająć kilka minut, zanim wyniki zostaną wyświetlone użytkownikom w Ustawieniach.

Ponadto wewnętrzny algorytm czyszczenia plików danych w pamięci podręcznej sprawdzał tylko zmodyfikowany czas we wszystkich aplikacjach. Umożliwiło to złośliwym aplikacjom pogorszenie ogólnego doświadczenia użytkownika poprzez ustawienie zmodyfikowanych czasów w odległej przyszłości, aby nieuczciwie faworyzować inne aplikacje.

Aby poprawić te doświadczenia, system Android 8.0 oferuje wykorzystanie obsługi „przydziałów” systemu plików ext4 w celu niemal natychmiastowego zwracania statystyk wykorzystania dysku. Ta funkcja przydziałów poprawia również stabilność systemu, uniemożliwiając dowolnej aplikacji wykorzystanie więcej niż 90% miejsca na dysku lub 50% i-węzłów.

Realizacja

Funkcja przydziału jest częścią domyślnej implementacji installd . installd automatycznie korzysta z funkcji kwot, jeśli jest ona włączona w określonym systemie plików. System automatycznie i przejrzyście wznawia obliczenia ręczne, gdy funkcja limitu nie jest włączona lub obsługiwana na mierzonym urządzeniu blokowym.

Aby włączyć obsługę limitów na konkretnym urządzeniu blokowym:

  1. Włącz opcje jądra CONFIG_QUOTA , CONFIG_QFMT_V2 i CONFIG_QUOTACTL .
  2. Dodaj opcję quota do partycji danych użytkownika w pliku fstab:
    /dev/block/platform/soc/624000.ufshc/by-name/userdata   /data
    ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc
    latemount,wait,check,formattable,fileencryption=ice,quota

Opcję fstab można bezpiecznie włączyć lub wyłączyć na istniejących urządzeniach. Podczas pierwszego uruchomienia po zmianie opcji fstab fsmgr wymusza przejście fsck w celu zaktualizowania wszystkich struktur danych przydziałów, co może spowodować, że pierwsze uruchomienie zajmie nieco więcej czasu. Nie będzie to miało wpływu na późniejsze buty.

Obsługa przydziałów została przetestowana tylko na ext4 i Linuxie 3.18 lub nowszym. Jeśli włączysz tę opcję w innych systemach plików lub w starszych wersjach jądra, producenci urządzeń są odpowiedzialni za testowanie i sprawdzanie poprawności statystyk.

Nie jest wymagane żadne specjalne wsparcie sprzętowe.

Walidacja

W ramach StorageHostTest dostępne są testy CTS, które wykorzystują publiczne interfejsy API do pomiaru wykorzystania dysku. Oczekuje się, że te interfejsy API będą zwracać prawidłowe wartości niezależnie od tego, czy obsługa przydziałów jest włączona czy wyłączona.

Debugowanie

Aplikacja testowa ostrożnie przydziela obszary miejsca na dysku, używając unikalnych liczb pierwszych określających rozmiar. Podczas debugowania tych testów użyj tego, aby określić przyczynę wszelkich rozbieżności. Na przykład, jeśli test zakończy się niepowodzeniem przy delcie wynoszącej 11 MB, sprawdź metodę Utils.useSpace() , aby sprawdzić, czy obiekt BLOB o rozmiarze 11 MB został zapisany w getExternalCacheDir() .

Istnieją również pewne testy wewnętrzne, które mogą być przydatne do debugowania, ale ich zaliczenie może wymagać wyłączenia kontroli bezpieczeństwa:

runtest -x frameworks/base/services/tests/servicestests/ \
  src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test