Triển khai lưu trữ

Android O bổ sung hỗ trợ cho storaged , một daemon gốc của Android thu thập và xuất bản số liệu lưu trữ trên thiết bị Android.

  • Đối với số liệu thống kê đĩa hàng ngày, storaged phân tích cú pháp định kỳ /sys/block/mmcblk0/stat (thiết bị lưu trữ eMMC) hoặc /sys/block/sda/stat (thiết bị không phải eMMC).
  • Đối với thời gian tồn tại của eMMC, các phân tích cú pháp storaged /d/mmc0/mmc0:001/ext_csd (nếu có).
  • Để đổ lỗi cho ứng dụng I/O, storaged định kỳ duyệt qua /proc/uid_io/stats và duy trì dữ liệu được phân tích cú pháp, bao gồm dữ liệu từ tất cả các ứng dụng (không chỉ các ứng dụng đang chạy). dumpsys có thể gọi storaged để ghi lại việc sử dụng I/O của ứng dụng trong báo cáo lỗi.

Thông tin Diskstat (bao gồm cả diskstat bị đình trệ) và thông tin eMMC được ghi vào nhật ký sự kiện Android, nơi dịch vụ đăng ký nền tảng sẽ thu thập nhật ký.

Các hoạt động storaged diễn ra tự động và được xử lý hoàn toàn bằng khung Android, do đó bạn không cần thực hiện bất kỳ công việc triển khai nào. Trang này mô tả thiết kế của storaged (bao gồm các giao diện mới) và cách sử dụng nó để lấy trạng thái I/O từ kernel.

thiết kế lưu trữ

Để tính linh hoạt về tính toán và quyền, storaged được triển khai dưới dạng mô-đun hạt nhân trả về thông tin I/O cho mỗi uid (thay vì sử dụng tiêu chuẩn proc/PID/io ). Dữ liệu I/O thô cho mỗi yêu cầu I/O tiếp tục được lưu trữ và cập nhật trong kernel task_struct và kernel theo dõi thời điểm một quá trình thoát ra để nó không bỏ lỡ việc sử dụng I/O xảy ra từ sự kiện bỏ phiếu storaged cuối cùng.

Mô-đun này đọc dữ liệu thô và chỉ xử lý nó khi khung thông báo cho nó về chuyển đổi nền trước/nền uid hoặc khi trình nền storaged yêu cầu báo cáo. Vào thời điểm đó, mô-đun xuất một nút tệp từ hạt nhân để liên lạc với khung và trình nền storaged .

storaged giới thiệu giao diện /proc/uid_io/stats , giao diện này trả về danh sách số liệu thống kê I/O cho từng UID trong hệ thống. Định dạng là:

<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>
  • byte đọc/ghi là các sự kiện I/O từ thiết bị lưu trữ.
  • Ký tự đọc/ghi (cũng tính bằng byte) là dữ liệu được yêu cầu bởi các tòa nhà chọc trời đọc/ghi.

Nhận trạng thái I/O từ kernel

Để kết xuất việc sử dụng I/O từ kernel, hãy sử dụng lệnh storaged với tùy chọn -u .

Lệnh: storaged -u

Định dạng đầu ra lệnh: name/uid fg_rchar fg_wchar fg_rbytes fg_wbytes bg_rchar bg_wchar bg_rbytes bg_wbytes fg_fsync bg_fsync

Lưu ý: Đầu ra này tương tự với đầu ra của proc/uid_io/stats . Điều này là do storaged xử lý dữ liệu từ /proc/uid_io/stats và tạo dữ liệu của riêng nó.

Đầu ra ví dụ:

com.google.android.backuptransport  2269  60  0  0  1719845663  143912573  149065728  184180736
com.android.vending  2170  60  0  0  219904796  38693092  174436352  18944000