ב-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