تنفيذ المخزنة

يضيف 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