اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release
بدلاً من aosp-main
لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنفيذ 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
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Implement storaged\n\nAndroid 8 adds support for `storaged`, an Android native daemon that\ncollects and publishes storage metrics on Android devices.\n\n- For daily diskstats, `storaged` periodically parses `/sys/block/mmcblk0/stat` (eMMC storage devices) or `/sys/block/sda/stat` (non-eMMC devices).\n- For eMMC lifetime, `storaged` parses `/d/mmc0/mmc0:001/ext_csd` (if available).\n- For app I/O blaming, `storaged` periodically traverses `/proc/uid_io/stats` and maintains parsed data, which includes data from all apps (not just running apps). `dumpsys` can call `storaged` to log the app I/O usage in a bug report.\n\nDiskstat (including stalled diskstats) and eMMC information is logged to the\nAndroid event log, where a platform checkin service collects the logs.\n\n`storaged` operations occur automatically and are handled entirely by the Android\nframework, so you don't need to do any implementation work. This page\ndescribes the design of `storaged` (including new interfaces) and how to use it to\nget I/O status from the kernel.\n\nstoraged design\n---------------\n\nFor accounting and permission flexibility, `storaged` is implemented as a kernel\nmodule that returns per-uid I/O information (instead of using standard\n`proc/PID/io`). Raw I/O data for each I/O request continues to be\nstored and updated in kernel `task_struct`, and the kernel keeps\ntrack of when a process exits so it doesn't miss I/O usage that occurs from the\nlast `storaged` polling event.\n\nThe module reads raw data and processes it only when the framework notifies it\nof a uid foreground/background switch or when the `storaged` daemon requests a\nreport. At that time, the module exports a file node from kernel for\ncommunication with framework and `storaged` daemon.\n\n`storaged` introduces the `/proc/uid_io/stats` interface, which returns\na list of I/O stats for each UID in the system. The format is: \n\n```\n\u003cuid\u003e: \u003cforeground read bytes\u003e \u003cforeground write bytes\u003e \u003cforeground read chars\u003e \u003cforeground write chars\u003e \u003cbackground read bytes\u003e \u003cbackground write bytes\u003e \u003cbackground read chars\u003e \u003cbackground write chars\u003e\n```\n\n- read/write bytes are I/O events from a storage device.\n- read/write chars (also in bytes) are data requested by read/write syscalls.\n\nGet I/O status from the kernel\n------------------------------\n\nTo dump I/O usage from the kernel, use the `storaged` command with\nthe **`-u`** option.\n\nCommand: `storaged -u`\n\nCommand output format: `name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes\nbg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync`\n\n**Note:** This output is similar to the output for\n`proc/uid_io/stats`. This is because `storaged` processes data from\n`/proc/uid_io/stats` and generates its own data.\n\nExample output: \n\n```\ncom.google.android.backuptransport 2269 60 0 0 1719845663 143912573 149065728 184180736\ncom.android.vending 2170 60 0 0 219904796 38693092 174436352 18944000\n```"]]