ב-Android 8 נוספה תמיכה ב-storaged
, דימון מקורי ל-Android שאוסף ומפרסם מדדי אחסון במכשירי Android.
- כדי לקבל את נתוני diskstats היומיים,
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 (כולל נתוני diskstats שנתקעו) ונתוני eMMC נרשמים ביומן האירועים של Android, שבו שירות של בדיקת פלטפורמה אוסף את היומנים.
הפעולות של storaged
מתבצעות באופן אוטומטי ומטופלות באופן מלא על ידי מסגרת Android, כך שאין צורך לבצע עבודות הטמעה. בדף הזה מתוארים העיצוב של storaged
(כולל ממשקים חדשים) והשימוש בו כדי לקבל סטטוס של קלט/פלט מהליבה.
עיצוב מאוחסן
כדי לאפשר גמישות בדיווח ובהרשאות, storaged
מיושם כמודול של הליבה שמחזיר מידע על קלט/פלט לכל מזהה משתמש (במקום להשתמש ב-proc/PID/io
הרגיל). נתוני הקלט/פלט הגולמיים של כל בקשת קלט/פלט ממשיכים להישמר ולהתעדכן בליבה task_struct
, והליבה עוקבת אחרי היציאה של תהליך כדי לא לפספס שימוש בקלט/פלט שמתרחש מאז אירוע הסקרים האחרון של storaged
.
המודול קורא נתונים גולמיים ומעבד אותם רק כשהמסגרת מעדכנת אותו על מעבר של uid לחזית/לרקע, או כשהדימון storaged
מבקש דוח. בשלב הזה, המודול מייצא צומת קובץ מהליבה לצורך תקשורת עם המסגרת ועם הדימון storaged
.
storaged
מציג את הממשק /proc/uid_io/stats
, שמחזיר רשימה של נתונים סטטיסטיים של קלט/פלט לכל מזהה משתמש במערכת. הפורמט הוא:
<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.
אחזור סטטוס הקלט/פלט מהליבה
כדי ליצור גרסת dump של השימוש בקלט/פלט מהליבה, משתמשים בפקודה 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