Szybsze statystyki miejsca na dane

W starszych wersjach Androida system przeszukiwał wszystkie pliki należące do danej aplikacji, aby zmierzyć wykorzystanie dysku. Wykonanie tego ręcznego pomiaru może zająć kilka minut, zanim wyniki zostaną wyświetlone użytkownikom w Ustawieniach.

Dodatkowo wewnętrzny algorytm do czyszczenia plików z danymi w pamięci podręcznej brał pod uwagę tylko czas modyfikacji we wszystkich aplikacjach. Złośliwe aplikacje mogły w ten sposób pogorszyć ogólne wrażenia użytkowników, ustawiając zmodyfikowane czasy w dalekiej przyszłości, aby nieuczciwie faworyzować siebie w stosunku do innych aplikacji.

Aby zapewnić większą wygodę, Android 8.0 umożliwia korzystanie z obsługi „kwot” w systemie plików ext4, aby niemal natychmiast zwracać statystyki wykorzystania dysku. Ta funkcja limitu zwiększa też stabilność systemu, ponieważ uniemożliwia pojedynczej aplikacji wykorzystanie ponad 90% miejsca na dysku lub 50% inode.

Implementacja

Funkcja limitu jest częścią domyślnej implementacji installd. installd automatycznie korzysta z funkcji limitu, gdy jest ona włączona w danym systemie plików. Gdy funkcja limitu nie jest włączona lub nie jest obsługiwana na urządzeniu blokowym, które jest mierzone, system automatycznie i przejrzyście wznawia ręczne obliczanie.

Aby włączyć obsługę limitu na określonym urządzeniu blokującym:

  1. Włącz opcje jądra CONFIG_QUOTA, CONFIG_QFMT_V2 i CONFIG_QUOTACTL.
  2. Dodaj opcję quota do partycji userdata 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 uruchamiania po zmianie opcji fstab fsmgr powoduje wykonanie przejścia fsck w celu zaktualizowania wszystkich struktur danych dotyczących limitu, co może spowodować, że pierwsze uruchomienie zajmie nieco więcej czasu. Nie będzie to miało wpływu na kolejne bootowania.

Obsługa limitów została przetestowana tylko w przypadku systemu plików ext4 i Linuxa w wersji 3.18 lub nowszej. Jeśli włączysz tę funkcję w innych systemach plików lub w starszych wersjach jądra, to producenci urządzeń są odpowiedzialni za testowanie i sprawdzanie poprawności statystyk.

Nie jest wymagane żadne specjalne wsparcie sprzętowe.

Weryfikacja

W sekcji StorageHostTest znajdują się testy CTS, które wykorzystują 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 ostrożnie przydziela regiony miejsca na dysku, używając do tego celu unikalnych liczb pierwszych. Podczas debugowania tych testów możesz użyć tego pliku, aby określić przyczynę wszelkich rozbieżności. Jeśli na przykład test zakończy się niepowodzeniem z wartością różnicy 11 MB, sprawdź metodę Utils.useSpace(), aby się przekonać, że blob o rozmiarze 11 MB został zapisany w metodzie getExternalCacheDir().

Dostępne są też testy wewnętrzne, które mogą być przydatne do debugowania, ale ich wykonanie 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