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:
- Włącz
CONFIG_QUOTA
,CONFIG_QFMT_V2
i Opcje jądra systemuCONFIG_QUOTACTL
. - 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