Triển khai giải pháp lưu trữ

Android 8 hỗ trợ thêm storaged, một trình nền gốc Android thu thập và công bố các chỉ số về bộ nhớ trên thiết bị Android.

  • Đối với disstats hằng ngày, storaged sẽ 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 (các thiết bị không phải eMMC).
  • Trong vòng đời của eMMC, storaged sẽ phân tích cú pháp /d/mmc0/mmc0:001/ext_csd (nếu có sẵn).
  • Để đổ lỗi cho I/O của ứng dụng, storaged định kỳ truyền tải /proc/uid_io/stats và duy trì dữ liệu đã phân tích cú pháp, bao gồm cả 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 nhật ký mứ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ả đĩa đã bị treo) và eMMC được ghi vào Nhật ký sự kiện của Android, trong đó dịch vụ đăng ký nền tảng thu thập nhật ký.

Các thao tác storaged diễn ra tự động và do Android xử lý toàn bộ khung nên 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ác giao diện mới) và cách sử dụng thiết kế đó để nhận trạng thái I/O từ nhân hệ điều hành.

thiết kế lưu trữ

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

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

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

<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ừ mộ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/ghi gọi hệ thống.

Nhận trạng thái I/O từ nhân hệ điều hành

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

Lệnh: storaged -u

Định dạng đầu ra của 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 ý: Kết quả này tương tự với kết quả của proc/uid_io/stats. Điều này là do storaged xử lý dữ liệu từ /proc/uid_io/stats rồi tạo dữ liệu riêng.

Kết quả điểm dữ liệu:

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