آمار فضای ذخیره‌سازی سریع‌تر

در نسخه‌های قدیمی‌تر Android، سیستم همه فایل‌های متعلق به یک برنامه خاص را پیمایش می‌کرد تا میزان استفاده از دیسک را اندازه‌گیری کند. این اندازه‌گیری دستی ممکن است چند دقیقه طول بکشد تا محاسبه شود و سپس نتایج در «تنظیمات» به کاربران نمایش داده شود.

علاوه‌براین، الگوریتم داخلی برای پاک کردن فایل‌های داده ذخیره‌شده در حافظه نهان فقط به زمان اصلاح‌شده در همه برنامه‌ها نگاه می‌کرد. این امر به برنامه‌های مخرب اجازه می‌داد با تنظیم زمان‌های اصلاح‌شده در آینده‌ای دور، تجربه کاربری کلی را تنزل دهند و به‌طور ناعادلانه خود را بر برنامه‌های دیگر ترجیح دهند.

برای بهبود این تجربه‌ها، Android 8.0 پیشنهاد می‌کند از پشتیبانی «سهمیه» سیستم فایل ext4 استفاده کند تا آمار استفاده از دیسک را تقریباً بلافاصله برگرداند. این ویژگی سهمیه همچنین با جلوگیری از استفاده هر برنامه از بیش‌از ۹۰٪ فضای دیسک یا ۵۰٪ از گره‌های فهرست، پایداری سیستم را بهبود می‌بخشد.

پیاده‌سازی

ویژگی سهمیه بخشی از پیاده‌سازی پیش‌فرض installd است. وقتی ویژگی سهمیه در یک سیستم فایل خاص فعال باشد، installd به‌طور خودکار از آن استفاده می‌کند. وقتی ویژگی سهمیه در دستگاه بلوک اندازه‌گیری‌شده فعال یا پشتیبانی نشود، سیستم به‌طور خودکار و شفاف محاسبه دستی را ازسر می‌گیرد.

برای فعال کردن پشتیبانی سهمیه در یک دستگاه بلوکی خاص:

  1. گزینه‌های هسته CONFIG_QUOTA، CONFIG_QFMT_V2، و CONFIG_QUOTACTL را فعال کنید.
  2. گزینه quota را به بخش userdata در فایل fstab اضافه کنید:
    /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 را می‌توان به‌طور ایمن در دستگاه‌های موجود فعال یا غیرفعال کرد. در اولین راه‌اندازی پس‌از تغییر گزینه fstab، fsmgr باعث می‌شود fsck گذر برای به‌روزرسانی همه ساختارهای داده سهمیه اجباری شود، که ممکن است باعث شود اولین راه‌اندازی کمی بیشتر طول بکشد. راه‌اندازی‌های بعدی تحت تأثیر قرار نخواهد گرفت.

پشتیبانی از سهمیه فقط در ext4 و Linux 3.18 یا نسخه‌های بالاتر آزمایش شده است. اگر در سیستم‌های فایل دیگر یا در نسخه‌های قدیمی‌تر هسته فعال شود، سازندگان دستگاه مسئول آزمایش و بررسی صحت آمار هستند.

به پشتیبانی سخت‌افزاری ویژه نیاز نیست.

اعتبارسنجی

آزمایش‌های CTS در StorageHostTest وجود دارد که از APIهای عمومی برای اندازه‌گیری استفاده از دیسک استفاده می‌کنند. انتظار می‌رود این «میاناهای برنامه‌سازی کاربردی» صرف‌نظر از فعال یا غیرفعال بودن پشتیبانی سهمیه، مقادیر صحیح را برگردانند.

اشکال‌زدایی

برنامه آزمایشی بااستفاده از اعداد اول منحصربه‌فرد، مناطق فضای دیسک را به‌دقت برای اندازه تخصیص می‌دهد. هنگام اشکال‌زدایی این آزمایش‌ها، از این برای تعیین علت هرگونه اختلاف استفاده کنید. برای مثال، اگر آزمایشی با دلتای ۱۱ مگابایت ناموفق بود، Utils.useSpace() روش را بررسی کنید تا ببینید این لکه ۱۱ مگابایتی در getExternalCacheDir() ذخیره شده است.

همچنین برخی‌از آزمایش‌های داخلی وجود دارد که ممکن است برای اشکال‌زدایی مفید باشند، اما برای گذراندن آن‌ها ممکن است لازم باشد بررسی‌های امنیتی را غیرفعال کنید:

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