נתונים סטטיסטיים מהירים יותר לגבי אחסון

בגרסאות קודמות של Android, המערכת עברה את כל הקבצים שבבעלות אפליקציה ספציפית כדי למדוד את השימוש בכונן. המדידה הידנית הזו עשויה להימשך כמה דקות כדי לחשב לפני הצגת התוצאות למשתמשים בהגדרות.

בנוסף, האלגוריתם הפנימי לניקוי קובצי נתונים שנשמרו במטמון בחן רק זמן שונה בכל האפליקציות. כך אפליקציות זדוניות יכולות לפגוע את חוויית המשתמש הכוללת באמצעות הגדרת זמני שינויים רחוקים בעתיד באופן לא הוגן. להעדיף את עצמם על פני אפליקציות אחרות.

כדי לשפר את החוויות האלה, מערכת Android 8.0 מציעה למנף את מערכת הקבצים ext4 מכסה תמיכה בהחזרת נתוני שימוש בדיסק כמעט באופן מיידי. המכסה הזו בנוסף, התכונה משפרת את יציבות המערכת בכך שהיא מונעת מאפליקציה יחידה להשתמש יותר מ-90% משטח הדיסק או 50% מצמתי inode.

הטמעה

תכונת המכסה היא חלק מיישום ברירת המחדל של installd. installd משתמש באופן אוטומטי בתכונת המכסה כאשר הוא מופעל למערכת קבצים מסוימת. המערכת ממשיכה באופן אוטומטי ובשקיפות חישוב ידני כשתכונת המכסה לא מופעלת או לא נתמכת התקן בלוקים הנמדד.

כדי להפעיל תמיכה במכסות במכשיר בלוקים מסוים:

  1. מפעילים את CONFIG_QUOTA, CONFIG_QFMT_V2 ואת אפשרויות ליבה (kernel) של CONFIG_QUOTACTL.
  2. מוסיפים את האפשרות quota למחיצת נתוני המשתמשים ב-fstab file:
    /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 למדידת השימוש בכונן. ממשקי ה-API האלה צפויים להחזיר ערכים נכונים בלי קשר להפעלה או להשבתה של התמיכה במכסות.

ניפוי באגים

אפליקציית הבדיקה מקצה בקפידה אזורי אחסון בדיסק באמצעות מספרים ראשוניים ייחודיים בהתאם לגודל. במהלך ניפוי באגים בבדיקות האלה, אפשר להשתמש במדד הזה כדי לקבוע את הסיבה פערים בנתונים. לדוגמה, אם בדיקה נכשלת דלתא של 11MB, שיטה Utils.useSpace() כדי לראות שה-blob בנפח 11MB מאוחסן ב 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