تنفيذ storaged

يضيف نظام التشغيل Android 8 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 لتسجيل استخدام I/O للتطبيق في تقرير الخطأ.

يتم تسجيل معلومات Diskstat (بما في ذلك diskstats المتوقّفة) وeMMC في سجلّ أحداث Android، حيث تجمع خدمة التحقّق من النظام الأساسي السجلات.

تحدث عمليات storaged تلقائيًا ويعالجها إطار عمل Android بالكامل، لذا لا تحتاج إلى تنفيذ أي عمل. تصف هذه الصفحة تصميم storaged (بما في ذلك الواجهات الجديدة) وكيفية استخدامه لمحاولة الحصول على حالة I/O من النواة.

التصميم المخزَّن

من أجل مرونة احتساب العمليات والأذونات، يتم تنفيذ storaged كوحدة برمجية للنواة تُعرِض معلومات الإدخال/الإخراج لكل معرّف مستخدم (بدلاً من استخدام proc/PID/io العادي). ويستمر تخزين بيانات الإدخال/الإخراج الأوّلية لكل طلب إدخال/إخراج وتعديلها في نواة task_struct، وتتتبّع النواة وقت خروج إحدى العمليات حتى لا تفوت استخدام الإدخال/الإخراج الذي يحدث من حدث الاستطلاعstoraged الأخير.

لا تقرأ الوحدة البيانات الأولية وتعالجها إلا عندما يُعلمها إطار العمل بتغيير uid إلى المقدّمة أو الخلفية أو عندما يطلب الخادم العميقstoraged تقريرًا. في ذلك الوقت، تُصدِّر الوحدة عقدة ملف من kernel للتواصل مع إطار العمل وبرنامج 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>
  • وحدات البايت المقروءة أو المكتوبة هي أحداث إدخال/إخراج من جهاز تخزين.
  • أحرف القراءة/الكتابة (بالبايت أيضًا) هي بيانات تطلبها طلبات قراءة/كتابة النظام.

الحصول على حالة I/O من النواة

لتفريغ استخدام I/O من النواة، استخدِم الأمر 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