יישום האחסון

ב-Android 8 מתווספים תמיכה ב-storaged, דימון (daemon) מקורי של Android אוסף ומפרסם מדדי אחסון במכשירי Android.

  • עבור דיסקים יומיים, storaged מנתח מדי פעם את הנתונים /sys/block/mmcblk0/stat (התקני אחסון eMMC) או /sys/block/sda/stat (מכשירים שאינם eMMC).
  • לכל משך החיים של eMMC, storaged מנתח /d/mmc0/mmc0:001/ext_csd (אם זמין).
  • במקרה של האשמת קלט/פלט באפליקציה, storaged עובר מדי פעם /proc/uid_io/stats ושומרת את הנתונים שנותחו, כולל נתונים מכל האפליקציות (לא רק אפליקציות שפועלות). dumpsys יכולה צריך להפעיל את storaged כדי לתעד את השימוש בקלט/פלט באפליקציה בדוח על באג.

נתוני Diskstat (כולל דיסקים של דיסקים מושהים) ופרטי eMMC נרשמים יומן אירועים ב-Android, שבו שירות הצ'ק-אין של הפלטפורמה אוסף את היומנים.

פעולות storaged מתבצעות באופן אוטומטי ומטופלות באופן מלא על ידי Android , כך שלא צריך לבצע עבודת הטמעה. הדף הזה מתארת את העיצוב של storaged (כולל ממשקים חדשים) ואיך להשתמש בו כדי לקבל סטטוס קלט/פלט מהליבה.

עיצוב באחסון

לצורך גמישות בחשבונאות ובהרשאות, storaged מוטמע בתור ליבה של מודול שמחזיר נתוני קלט/פלט לפי משתמש (במקום להשתמש proc/PID/io). נתוני קלט/פלט גולמיים עבור כל בקשת קלט/פלט (I/O) ממשיכים מאוחסנים ומעודכנים בליבה (kernel) task_struct, והליבה שומרת לעקוב אחר היציאה של תהליך כדי שלא יפספס שימוש בקלט/פלט (I/O) המתרחש אירוע הקלפיות האחרון (storaged).

המודול קורא נתונים גולמיים ומעבד אותם רק כאשר ה-framework שולח התראה על כך של מתג uid/רקע, או כשהדימון (daemon) של storaged מבקש שלנו. באותו זמן, המודול מייצא צומת של קובץ מהליבה עבור תקשורת עם framework ודימון (daemon) של storaged.

storaged מציג את הממשק של /proc/uid_io/stats, שמחזיר רשימה של נתונים סטטיסטיים של קלט/פלט עבור כל UID במערכת. הפורמט הוא:

<uid>: <foreground read bytes> <foreground write bytes> <foreground read chars> <foreground write chars> <background read bytes> <background write bytes> <background read chars> <background write chars>
  • בייטים לקריאה/כתיבה הם אירועי קלט/פלט מהתקן אחסון.
  • סימני קריאה/כתיבה של תווים (גם בבייטים) הם נתונים שנדרשים על-ידי קריאה/כתיבה קריאות לפעולה (syscalls).

קבלת סטטוס קלט/פלט מהליבה (kernel)

כדי למחוק את השימוש בקלט/פלט מהליבה, משתמשים בפקודה storaged עם האפשרות -u.

פקודה: storaged -u

פורמט הפלט של הפקודה: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

הערה: הפלט הזה דומה לפלט של proc/uid_io/stats. הסיבה לכך היא שמערכת storaged מעבדת נתונים מ: /proc/uid_io/stats ויוצר נתונים משלו.

פלט לדוגמה:

com.google.android.backuptransport  2269  60  0  0  1719845663  143912573  149065728  184180736
com.android.vending  2170  60  0  0  219904796  38693092  174436352  18944000