Triển khai bộ nhớ

Android 8 hỗ trợ thêm storaged, một trình nền gốc của Android giúp thu thập và xuất bản các chỉ số bộ nhớ trên thiết bị Android.

  • Đối với số liệu thống kê về ổ đĩa hằng ngày, storaged định kỳ phân tích cú pháp /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 hoạt động của eMMC, storaged sẽ phân tích cú pháp /d/mmc0/mmc0:001/ext_csd (nếu có).
  • Đối với lỗi đổ lỗi I/O của ứng dụng, storaged định kỳ duyệt qua /proc/uid_io/stats và duy trì dữ liệu đã phân tích cú pháp, bao gồm dữ liệu từ tất cả ứng dụng (không chỉ các ứng dụng đang chạy). dumpsys có thể gọi storaged để ghi lại mức sử dụng I/O của ứng dụng trong báo cáo lỗi.

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

Các thao tác storaged diễn ra tự động và do khung Android xử lý hoàn toàn, vì vậy, 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ả giao diện mới) và cách sử dụng giao diện này để lấy trạng thái I/O từ hạt nhân.

thiết kế được lưu trữ

Để tính toán và cấp quyền linh hoạt, storaged được triển khai dưới dạng mô-đun hạt nhân trả về thông tin I/O theo uid (thay vì sử dụng proc/PID/io tiêu chuẩn). 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 hạt nhân task_struct, đồng thời hạt nhân theo dõi thời điểm một quy trình thoát để không bỏ lỡ hoạt động sử dụng I/O xảy ra từ sự kiện thăm dò ý kiến storaged gần đây nhất.

Mô-đun này chỉ đọc dữ liệu thô và xử lý dữ liệu đó khi khung thông báo cho mô-đun về nút chuyển chế độ nền trước/nền của 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ừ hạt nhân để giao tiếp 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à 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 do các syscall đọc/ghi yêu cầu.

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

Để kết xuất mức sử dụng I/O từ nhân, hãy sử dụng lệnh storaged với tuỳ 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ự như kết quả cho proc/uid_io/stats. Lý do là storaged xử lý dữ liệu từ /proc/uid_io/stats và 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