Android 8 پشتیبانی از storaged را اضافه میکند، یک دیمون بومی اندروید که معیارهای ذخیرهسازی را در دستگاههای 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 (شامل دیسکهای متوقف شده) و اطلاعات eMMC در گزارش رویداد Android ثبت میشود، جایی که یک سرویس بررسی پلت فرم گزارشها را جمعآوری میکند.
عملیات storaged به طور خودکار انجام می شود و به طور کامل توسط چارچوب Android مدیریت می شود، بنابراین شما نیازی به انجام هیچ کار اجرایی ندارید. این صفحه طراحی storaged (از جمله رابط های جدید) و نحوه استفاده از آن برای دریافت وضعیت I/O از هسته را توضیح می دهد.
طراحی ذخیره شده
برای انعطافپذیری حسابداری و مجوز، storaged بهعنوان یک ماژول هسته پیادهسازی میشود که اطلاعات ورودی/خروجی per-uid را برمیگرداند (بهجای استفاده از proc/PID/io استاندارد). دادههای خام ورودی/خروجی برای هر درخواست ورودی/خروجی همچنان در kernel task_struct ذخیره و بهروزرسانی میشوند، و هسته زمان خروج یک فرآیند را پیگیری میکند تا استفاده I/O را که از آخرین رویداد نظرسنجی storaged رخ میدهد، از دست ندهد.
ماژول دادههای خام را میخواند و آنها را فقط زمانی پردازش میکند که فریم ورک آن را از یک سوئیچ uid پیشزمینه/پسزمینه مطلع میکند یا زمانی که دیمون storaged درخواست گزارش میکند. در آن زمان، ماژول یک گره فایل را از هسته برای ارتباط با چارچوب و دیمون storaged صادر می کند.
storaged رابط /proc/uid_io/stats را معرفی می کند که لیستی از آمارهای I/O را برای هر 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>
- بایت های خواندن/نوشتن رویدادهای ورودی/خروجی از یک دستگاه ذخیره سازی هستند.
- کاراکترهای خواندن/نوشتن (همچنین بر حسب بایت) دادههایی هستند که توسط سیستمهای خواندن/نوشتن درخواست میشوند.
وضعیت 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