يضيف Android O دعمًا لـ storaged
، وهو برنامج خفي أصلي لنظام 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 (بما في ذلك diskstats المتوقفة) ومعلومات eMMC في سجل أحداث Android، حيث تقوم خدمة تسجيل الوصول إلى النظام الأساسي بجمع السجلات.
تحدث العمليات storaged
تلقائيًا ويتم التعامل معها بالكامل بواسطة إطار عمل Android، لذلك لا تحتاج إلى القيام بأي أعمال تنفيذ. تصف هذه الصفحة تصميم storaged
(بما في ذلك الواجهات الجديدة) وكيفية استخدامه للحصول على حالة الإدخال/الإخراج من النواة.
تصميم مخزن
للحصول على مرونة في المحاسبة والأذونات، يتم تنفيذ storaged
كوحدة نمطية kernel تقوم بإرجاع معلومات الإدخال/الإخراج لكل معرف (بدلاً من استخدام proc/PID/io
القياسي). يستمر تخزين بيانات الإدخال/الإخراج الأولية لكل طلب إدخال/إخراج وتحديثها في kernel task_struct
، وتتتبع النواة وقت خروج العملية حتى لا تفوت استخدام الإدخال/الإخراج الذي يحدث من آخر حدث استقصاء storaged
.
تقرأ الوحدة البيانات الأولية وتعالجها فقط عندما يقوم إطار العمل بإعلامها بمفتاح واجهة المستخدم/الخلفية أو عندما يطلب البرنامج storaged
تقريرًا. في ذلك الوقت، تقوم الوحدة بتصدير عقدة ملف من kernel للتواصل مع إطار العمل والبرنامج 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>
- وحدات البايت للقراءة/الكتابة هي أحداث إدخال/إخراج من جهاز تخزين.
- أحرف القراءة/الكتابة (بالبايت أيضًا) هي البيانات المطلوبة بواسطة مكالمات النظام للقراءة/الكتابة.
الحصول على حالة الإدخال/الإخراج من النواة
لتفريغ استخدام الإدخال/الإخراج من النواة، استخدم الأمر 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