در نسخههای قبلی اندروید، سیستم از تمام فایلهای متعلق به یک برنامه خاص برای اندازهگیری میزان مصرف دیسک عبور میکرد. محاسبه این اندازه گیری دستی قبل از نمایش نتایج به کاربران در تنظیمات ممکن است چند دقیقه طول بکشد.
علاوه بر این، الگوریتم داخلی برای پاک کردن فایلهای داده ذخیرهشده تنها در زمان تغییر یافته در همه برنامهها بررسی میشود. این به برنامههای مخرب اجازه میدهد تا با تنظیم زمانهای اصلاحشده در آینده بهطور ناعادلانه نسبت به سایر برنامهها، تجربه کلی کاربر را کاهش دهند.
برای بهبود این تجربیات، Android 8.0 پیشنهاد میکند از پشتیبانی «سهمیه» سیستم فایل ext4 برای بازگرداندن آمار استفاده از دیسک تقریباً فوری استفاده کند. این ویژگی سهمیه همچنین با جلوگیری از استفاده هر اپلیکیشنی از بیش از 90 درصد فضای دیسک یا 50 درصد اینودها، ثبات سیستم را بهبود می بخشد.
پیاده سازی
ویژگی سهمیه بخشی از اجرای پیش فرض installd
است. installd
به طور خودکار از ویژگی سهمیه زمانی که در یک فایل سیستم خاص فعال است استفاده می کند. هنگامی که ویژگی سهمیه در دستگاه بلوک در حال اندازه گیری فعال یا پشتیبانی نمی شود، سیستم به طور خودکار و شفاف محاسبه دستی را از سر می گیرد.
برای فعال کردن پشتیبانی سهمیه در یک دستگاه بلوک خاص:
- گزینه های
CONFIG_QUOTA
،CONFIG_QFMT_V2
، وCONFIG_QUOTACTL
هسته را فعال کنید. - گزینه
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
را مجبور می کند تا تمام ساختارهای داده سهمیه را به روز کند، که ممکن است باعث شود که بوت اول کمی بیشتر طول بکشد. چکمه های بعدی تحت تأثیر قرار نمی گیرند.
پشتیبانی Quota فقط روی ext4 و Linux 3.18 یا بالاتر تست شده است. در صورت فعال کردن در سیستم های فایل دیگر یا نسخه های هسته قدیمی تر، تولیدکنندگان دستگاه مسئول آزمایش و بررسی صحت آمار هستند.
هیچ پشتیبانی سخت افزاری خاصی مورد نیاز نیست.
اعتبار سنجی
تستهای CTS تحت StorageHostTest
وجود دارد که APIهای عمومی را برای اندازهگیری استفاده از دیسک اعمال میکنند. انتظار می رود این APIها بدون توجه به فعال یا غیرفعال شدن پشتیبانی سهمیه، مقادیر صحیح را برگردانند.
اشکال زدایی
برنامه آزمایشی به دقت مناطق فضای دیسک را با استفاده از اعداد اول منحصر به فرد برای اندازه اختصاص می دهد. هنگام اشکالزدایی این تستها، از آن برای تعیین علت هر گونه اختلاف استفاده کنید. به عنوان مثال، اگر آزمایشی با دلتای 11 مگابایتی شکست خورد، روش Utils.useSpace()
را بررسی کنید تا ببینید که حباب 11 مگابایتی در 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