סטטיסטיקת אחסון מהירה יותר

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

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

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

יישום

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

כדי לאפשר תמיכה במכסה במכשיר חסימה מסוים:

  1. הפעל את אפשרויות הליבה CONFIG_QUOTA , CONFIG_QFMT_V2 ו- CONFIG_QUOTACTL .
  2. הוסף את אפשרות quota למחיצת נתוני המשתמש שלך בקובץ 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 ציבוריים למדידת השימוש בדיסק. ממשקי API אלה צפויים להחזיר ערכים נכונים ללא קשר להפעלת או השבתת התמיכה במכסה.

איתור באגים

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