In früheren Android-Versionen durchlief das System alle Dateien eines um die Laufwerksnutzung zu messen. Diese manuelle Messung kann einige Minuten dauern bevor die Ergebnisse für Nutzer in den Einstellungen angezeigt werden.
Außerdem sah sich der interne Algorithmus zum Löschen von im Cache gespeicherten Datendateien nur Änderungszeit für alle Apps. Dadurch konnten schädliche Apps den Nutzerfreundlichkeit insgesamt erhöht, indem Zeiträume, die weit in der Zukunft geändert werden, auf unfaire gegenüber anderen Apps bevorzugen.
Um diese Funktionen zu verbessern, bietet Android 8.0 an, die ext4-Dateisysteme "Kontingent" Unterstützung, um Datenträgernutzungsstatistiken beinahe augenblicklich zurückzugeben. Dieses Kontingent verbessert auch die Systemstabilität, indem verhindert wird, dass eine einzelne App mehr als 90% des Festplattenspeichers oder 50% der Inodes.
Implementierung
Das Kontingentfeature ist Teil der Standardimplementierung von installd
.
installd
verwendet die Kontingentfunktion automatisch, wenn sie für eine
bestimmte Dateisystem. Das System fährt automatisch und transparent
Manuelle Berechnung, wenn die Kontingentfunktion auf der
das Gerät, das gemessen wird, blockieren.
So aktivieren Sie die Kontingentunterstützung auf einem bestimmten Blockgerät:
- Aktivieren Sie
CONFIG_QUOTA
,CONFIG_QFMT_V2
undCONFIG_QUOTACTL
-Kernel-Optionen. - Option
quota
zur Nutzerdatenpartition in fstab hinzufügen Datei:/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
Die Option fstab
kann für vorhandene Geräte ohne Probleme aktiviert oder deaktiviert werden.
Geräte. Beim ersten Startvorgang nach Änderung der Option fstab
fsmgr
erzwingt einen fsck
-Durchlauf, um alle Kontingentdaten zu aktualisieren
was dazu führen kann, dass der erste Start etwas länger dauert. Im Anschluss
ist beim Stiefel nicht betroffen.
Die Kontingentunterstützung wurde erst unter ext4 und Linux 3.18 oder höher getestet. Wenn Sie auf anderen Dateisystemen oder älteren Kernel-Versionen für Tests und die Überprüfung der Richtigkeit der Statistiken verantwortlich.
Es ist kein spezieller Hardware-Support erforderlich.
Zertifizierungsstufe
Es gibt CTS-Tests unter StorageHostTest
, die öffentlich sind
APIs zum Messen der Laufwerksnutzung Von diesen APIs wird erwartet, dass sie korrekte Werte zurückgeben.
unabhängig davon, ob die Kontingentunterstützung aktiviert oder deaktiviert ist.
Fehlerbehebung
Die Test-App weist sorgfältig mithilfe von eindeutigen Primzahlen Speicherplatzregionen zu.
für die Größe. Verwenden Sie dieses Feld bei der Fehlerbehebung in diesen Tests, um die Ursache
Abweichungen. Wenn beispielsweise ein Test mit einem Delta von 11 MB fehlschlägt, überprüfen Sie die
Utils.useSpace()
-Methode, um festzustellen, ob das 11-MB-Blob gespeichert wurde
getExternalCacheDir()
.
Es gibt auch einige interne Tests, die für die Fehlerbehebung nützlich sein könnten, kann die Deaktivierung von Sicherheitsprüfungen erforderlich machen, um zu bestehen:
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