Szybsze statystyki przechowywania

We wcześniejszych wersjach Androida system przeglądał wszystkie pliki należące do do pomiaru wykorzystania dysku. Ten pomiar ręczny może potrwać kilka minut do obliczeń, zanim wyświetlisz wyniki użytkownikom w Ustawieniach.

Dodatkowo wewnętrzny algorytm czyszczenia plików z danymi w pamięci podręcznej uwzględniał zmodyfikowany czas we wszystkich aplikacjach. Pozwoliło to złośliwym aplikacjom obniżyć ogólne wrażenia użytkowników, ustawiając odległe czasy zmodyfikowania w przyszłości na nieuczciwe preferować korzystanie z aplikacji niż inne aplikacje.

Aby poprawić te wrażenia, Android 8.0 wykorzystuje system plików ext4 „quota” i obsługuje niemal natychmiastowe zwracanie statystyk użytkowania dysku. Ten limit poprawia też stabilność systemu, uniemożliwiając poszczególnym aplikacjom korzystanie z więcej niż 90% miejsca na dysku lub 50% iloczynów.

Implementacja

Funkcja limitów jest częścią domyślnej implementacji funkcji installd. installd automatycznie korzysta z funkcji limitu, gdy jest włączona w określonym systemie plików. System automatycznie i w przejrzysty sposób wznawia pracę, ręczne obliczenia, gdy funkcja limitu nie jest włączona lub obsługiwana na urządzenia blokującego.

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

  1. Włącz CONFIG_QUOTA, CONFIG_QFMT_V2 i Opcje jądra systemu CONFIG_QUOTACTL.
  2. Dodaj opcję quota do partycji danych użytkownika we fstab. plik:
    /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ć w dotychczasowych urządzenia. Podczas pierwszego uruchomienia po zmianie opcji fstab: fsmgr wymusza aktualizację wszystkich danych limitu przez karnet fsck przez co pierwsze uruchamianie może trwać nieco dłużej. Kolejna nie będzie to miało wpływu na buty.

Obsługa limitów została przetestowana tylko w systemie ext4 i Linux 3.18 lub nowszym. W przypadku włączenia w innych systemach plików lub starszych wersjach jądra. odpowiedzialnym za testowanie i weryfikowanie poprawności statystyk.

Nie jest wymagana specjalna obsługa sprzętu.

Weryfikacja

StorageHostTest: dostępne są testy CTS, które są publiczne Interfejsy API do pomiaru wykorzystania dysku. Te interfejsy API powinny zwracać prawidłowe wartości niezależnie od tego, czy obsługa limitów jest włączona czy wyłączona.

Debugowanie

Aplikacja testowa starannie przydziela regiony miejsca na dysku przy użyciu unikalnych liczb pierwszych danego rozmiaru. Podczas debugowania tych testów można wykorzystać te dane do określenia przyczyny rozbieżności danych. Jeśli np. test zakończy się niepowodzeniem przy delta 11 MB, Utils.useSpace(), aby sprawdzić, czy 11 MB bloba został zapisany w getExternalCacheDir()

Istnieją też testy wewnętrzne, które mogą być przydatne przy debugowaniu, ale może wymagać wyłączenia kontroli bezpieczeństwa, aby przejść:

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