پیاده سازی ذخیره شده

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 فراخوانی کند تا کاربرد 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