實作儲存功能

Android 8 已新增對 storaged 的支援,這個 Android 原生 Daemon 收集與發布 Android 裝置上的儲存空間指標

  • 針對每日磁碟 stats,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 (包括 stalleddiskstats) 和 eMMC 資訊會記錄在 Android 事件記錄,平台登記服務會收集這些記錄。

storaged 作業會自動執行,並完全由 Android 處理 因此您不必進行任何導入作業這個頁面 說明瞭 storaged 的設計 (包括新介面),以及如何使用此介面 從核心取得 I/O 狀態

儲存體設計

為保障會計和權限的靈活彈性,storaged 是以核心的形式實作 這個模組會傳回個別 I/O 資訊 (而不是使用標準 proc/PID/io)。系統將繼續提供每個 I/O 要求的原始 I/O 資料 且核心會保留在核心 task_struct 中,而核心會保留 追蹤程序結束的時間,這樣就不會遺漏 上一次storaged輪詢事件。

模組會讀取原始資料,並只在架構收到通知時處理原始資料 uid 前景/背景切換,或 storaged Daemon 要求傳送 報表。屆時,模組會從核心匯出檔案節點 與架構和 storaged Daemon 通訊

storaged 導入 /proc/uid_io/stats 介面, 系統中每個 UID 的 I/O 統計資料清單。格式如下:

<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 事件。
  • 讀取/寫入字元 (也以位元組為單位) 是讀取/寫入要求的資料 syscalls

從核心取得 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