Schnellere Speicherstatistiken

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

Außerdem wurde beim internen Algorithmus zum Löschen von im Cache gespeicherten Datendateien nur die Änderungszeit aller Apps berücksichtigt. So konnten schädliche Apps die Nutzerfreundlichkeit beeinträchtigen, indem sie geänderte Zeiten in der fernen Zukunft festlegten, um sich unfair gegenüber anderen Apps zu bevorzugen.

Um diese Funktionen zu verbessern, bietet Android 8.0 die Möglichkeit, die „Quota“-Unterstützung des ext4-Dateisystems zu nutzen, um Statistiken zur Laufwerknutzung nahezu sofort zurückzugeben. Diese Kontingentfunktion verbessert auch die Systemstabilität, da verhindert wird, dass eine einzelne App mehr als 90% des Speicherplatzes oder 50% der Inodes belegt.

Implementierung

Die Kontingentfunktion ist Teil der Standardimplementierung von installd. installd verwendet die Kontingentfunktion automatisch, wenn sie für ein bestimmtes Dateisystem aktiviert ist. Das System nimmt die manuelle Berechnung automatisch und transparent wieder auf, wenn die Kontingentfunktion auf dem gemessenen Blockgerät nicht aktiviert 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 der userdata-Partition in der Datei „fstab“ die Option quota 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 Option fstab kann auf vorhandenen Geräten sicher aktiviert oder deaktiviert werden. Beim ersten Start nach dem Ändern der fstab-Option erzwingt fsmgr einen fsck-Pass, um alle Quota-Datenstrukturen zu aktualisieren. Dies kann dazu führen, dass der erste Start etwas länger dauert. Die nachfolgenden Starts sind davon nicht betroffen.

Die Unterstützung von Kontingenten wurde nur mit ext4 und Linux 3.18 oder höher getestet. Wenn die Funktion für andere Dateisysteme oder ältere Kernelversionen aktiviert wird, sind die Gerätehersteller für die Prüfung und Überprüfung der Richtigkeit der Statistiken verantwortlich.

Es ist keine spezielle Hardware erforderlich.

Zertifizierungsstufe

Unter StorageHostTest gibt es CTS-Tests, bei denen öffentliche APIs zur Messung der Festplattennutzung verwendet werden. Diese APIs geben unabhängig davon, ob die Kontingentunterstützung aktiviert oder deaktiviert ist, korrekte Werte zurück.

Fehlerbehebung

Die Test-App weist Speicherplatzbereiche mithilfe eindeutiger Primzahlen für die Größe sorgfältig zu. Verwenden Sie diese Informationen, um bei der Fehlerbehebung in diesen Tests die Ursache von Abweichungen zu ermitteln. Wenn ein Test beispielsweise mit einem Delta von 11 MB fehlschlägt, prüfen Sie anhand der Utils.useSpace()-Methode, ob der Blob mit 11 MB in getExternalCacheDir() gespeichert wurde.

Es gibt auch einige interne Tests, die für die Fehlerbehebung nützlich sein können. Möglicherweise müssen Sie jedoch Sicherheitsprüfungen deaktivieren, damit sie bestanden werden:

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