Daha hızlı depolama alanı istatistikleri

Android'in önceki sürümlerinde sistem, disk kullanımını ölçmek için belirli bir uygulamanın sahip olduğu tüm dosyaları tarıyordu. Bu manuel ölçümün hesaplanması ve sonuçların Ayarlar'da kullanıcılara gösterilmesi birkaç dakika sürebilir.

Ayrıca, önbelleğe alınan veri dosyalarını temizleyen dahili algoritma yalnızca tüm uygulamalarda değiştirilen zamanı dikkate alıyordu. Bu durum, kötü amaçlı uygulamaların, diğer uygulamalara kıyasla kendilerini haksız bir şekilde öne çıkarmak için değiştirilmiş süreleri çok uzak bir gelecekte ayarlayarak genel kullanıcı deneyimini düşürmesine olanak tanıdı.

Bu deneyimleri iyileştirmek için Android 8.0, disk kullanımı istatistiklerini neredeyse anında döndürmek amacıyla ext4 dosya sisteminin "kota" desteğinden yararlanır. Bu kota özelliği, tek bir uygulamanın disk alanının% 90'ından veya inode'ların% 50'sinden fazlasını kullanmasını engelleyerek sistem kararlılığını da artırır.

Uygulama

Kota özelliği, installd'ün varsayılan uygulamasının bir parçasıdır. installd, belirli bir dosya sisteminde etkinleştirildiğinde kota özelliğini otomatik olarak kullanır. Ölçülen blok cihazda kota özelliği etkinleştirilmemiş veya desteklenmiyorsa sistem, manuel hesaplamayı otomatik ve şeffaf bir şekilde devam ettirir.

Belirli bir engelleme cihazında kota desteğini etkinleştirmek için:

  1. CONFIG_QUOTA, CONFIG_QFMT_V2 ve CONFIG_QUOTACTL çekirdek seçeneklerini etkinleştirin.
  2. fstab dosyanızdaki userdata bölümüne quota seçeneğini ekleyin:
    /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

fstab seçeneği, mevcut cihazlarda güvenli bir şekilde etkinleştirilebilir veya devre dışı bırakılabilir. fstab seçeneği değiştirildikten sonra ilk önyükleme sırasında fsmgr, tüm kota veri yapılarını güncellemek için bir fsck geçişi zorlar. Bu da ilk önyüklemenin biraz daha uzun sürmesine neden olabilir. Sonraki önyüklemeler bu durumdan etkilenmez.

Kota desteği yalnızca ext4 ve Linux 3.18 veya sonraki sürümlerde test edilmiştir. Diğer dosya sistemlerinde veya eski çekirdek sürümlerinde etkinleştirme işlemi yapılırsa istatistiklerin doğruluğunun test edilmesi ve incelenmesinden cihaz üreticileri sorumludur.

Özel donanım desteği gerekmez.

Doğrulama

StorageHostTest altında, disk kullanımını ölçmek için herkese açık API'leri kullanan CTS testleri vardır. Bu API'lerin, kota desteğinin etkinleştirilip devre dışı bırakılmasından bağımsız olarak doğru değerler döndürmesi beklenir.

Hata ayıklama

Test uygulaması, boyuta özel asal sayılar kullanarak disk alanı bölgelerini dikkatlice ayırır. Bu testlerde hata ayıklama yaparken tutarsızlıkların nedenini belirlemek için bu özelliği kullanın. Örneğin, bir test 11 MB'lık bir delta ile başarısız olursa 11 MB blob'un getExternalCacheDir() içinde depolanıp depolanmadığını görmek için Utils.useSpace() yöntemini inceleyin.

Hata ayıklama için yararlı olabilecek bazı dahili testler de vardır ancak bu testlerin geçebilmesi için güvenlik kontrollerinin devre dışı bırakılması gerekebilir:

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