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

يتوافق Android 8 مع storaged، وهو برنامج خفي أصلي لنظام التشغيل Android جمع مقاييس التخزين ونشرها على أجهزة Android.

  • بالنسبة إلى إحصاءات الأقراص اليومية، يحلّل storaged بشكل دوري. /sys/block/mmcblk0/stat (أجهزة تخزين eMMC) أو /sys/block/sda/stat (الأجهزة التي لا تستخدم eMMC)
  • بالنسبة إلى فترة بقاء eMMC، يحلّل storaged القيمة /d/mmc0/mmc0:001/ext_csd (إذا كان ذلك المتوفرة).
  • بالنسبة إلى إلقاء اللوم في مؤتمر I/O على التطبيق، يتجاوز storaged بشكل دوري /proc/uid_io/stats مع الاحتفاظ بالبيانات التي تم تحليلها، والتي تشمل البيانات من جميع التطبيقات (وليس فقط التطبيقات قيد التشغيل). يمكن لـ dumpsys يمكنك الاتصال بـ storaged لتسجيل استخدام مؤتمر I/O للتطبيق في تقرير خطأ.

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

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

تصميم مخزَّن

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

تقرأ الوحدة البيانات الأولية وتعالجها فقط عندما يُبلغها إطار العمل بذلك. مفتاح تحكّم في المقدمة/الخلفية uid أو عندما يطلب البرنامج الخفي storaged إبلاغ. وفي هذا الوقت، تصدر الوحدة عقدة ملف من النواة التواصل باستخدام إطار العمل وبرنامج 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.

الحصول على حالة وحدات الإدخال والإخراج من النواة

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