Schnellere Speicherstatistiken

In früheren Android-Versionen durchsuchte das System alle Dateien einer bestimmten App, um die Festplattennutzung zu messen. Die Berechnung dieser manuellen Messung kann einige Minuten dauern, bevor die Ergebnisse den Benutzern in den Einstellungen angezeigt werden.

Darüber hinaus berücksichtigte der interne Algorithmus zum Löschen zwischengespeicherter Datendateien in allen Apps nur die geänderte Zeit. Dies ermöglichte es bösartigen Apps, das allgemeine Benutzererlebnis zu beeinträchtigen, indem sie geänderte Zeiten weit in der Zukunft festlegten, um sich selbst gegenüber anderen Apps ungerechtfertigt zu bevorzugen.

Um diese Erfahrungen zu verbessern, bietet Android 8.0 die Möglichkeit, die „Quota“-Unterstützung des ext4-Dateisystems zu nutzen, um Statistiken zur Festplattennutzung fast sofort zurückzugeben. Diese Quotenfunktion verbessert auch die Systemstabilität, indem sie verhindert, dass eine einzelne App mehr als 90 % des Festplattenspeichers oder 50 % der Inodes belegt.

Implementierung

Die Quotenfunktion ist Teil der Standardimplementierung von installd . installd verwendet automatisch die Quotenfunktion, wenn sie auf einem bestimmten Dateisystem aktiviert ist. Das System nimmt die manuelle Berechnung automatisch und transparent wieder auf, wenn die Quotenfunktion auf dem gemessenen Blockgerät nicht aktiviert ist oder unterstützt wird.

So aktivieren Sie die Kontingentunterstützung auf einem bestimmten Blockgerät:

  1. Aktivieren Sie die Kerneloptionen CONFIG_QUOTA , CONFIG_QFMT_V2 und CONFIG_QUOTACTL .
  2. Fügen Sie die quota zu Ihrer Benutzerdatenpartition in Ihrer fstab-Datei hinzu:
    /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 fstab Option kann auf vorhandenen Geräten sicher aktiviert oder deaktiviert werden. Beim ersten Start nach dem Ändern der fstab Option erzwingt fsmgr einen fsck Durchlauf, um alle Kontingentdatenstrukturen zu aktualisieren, was dazu führen kann, dass der erste Start etwas länger dauert. Nachfolgende Stiefel sind davon nicht betroffen.

Die Quota-Unterstützung wurde nur auf ext4 und Linux 3.18 oder höher getestet. Bei der Aktivierung auf anderen Dateisystemen oder auf älteren Kernel-Versionen sind die Gerätehersteller dafür verantwortlich, die Richtigkeit der Statistiken zu testen und zu überprüfen.

Es ist keine spezielle Hardwareunterstützung erforderlich.

Validierung

Unter StorageHostTest gibt es CTS-Tests, die öffentliche APIs zum Messen der Festplattennutzung nutzen. Von diesen APIs wird erwartet, dass sie korrekte Werte zurückgeben, unabhängig davon, ob die Kontingentunterstützung aktiviert oder deaktiviert ist.

Debuggen

Die Test-App weist Speicherplatzbereiche anhand eindeutiger Primzahlen für die Größe sorgfältig zu. Verwenden Sie dies beim Debuggen dieser Tests, um die Ursache etwaiger Unstimmigkeiten zu ermitteln. Wenn ein Test beispielsweise mit einem Delta von 11 MB fehlschlägt, überprüfen Sie die Methode Utils.useSpace() , um festzustellen, ob der 11-MB-Blob in getExternalCacheDir() gespeichert wurde.

Es gibt auch einige interne Tests, die zum Debuggen nützlich sein können, für deren Bestehen jedoch möglicherweise das Deaktivieren von Sicherheitsüberprüfungen erforderlich ist:

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