Số liệu thống kê về bộ nhớ nhanh hơn

Trong các phiên bản Android trước, hệ thống đã duyệt qua tất cả tệp do một ứng dụng cụ thể sở hữu để đo lường mức sử dụng ổ đĩa. Quá trình đo lường thủ công này có thể mất vài phút để tính toán trước khi hiển thị kết quả cho người dùng trong phần Cài đặt.

Ngoài ra, thuật toán nội bộ để xoá tệp dữ liệu được lưu vào bộ nhớ đệm chỉ xem xét thời gian sửa đổi trên tất cả ứng dụng. Điều này cho phép các ứng dụng độc hại làm giảm trải nghiệm tổng thể của người dùng bằng cách đặt thời gian sửa đổi trong tương lai xa để ưu tiên bản thân một cách không công bằng so với các ứng dụng khác.

Để cải thiện những trải nghiệm này, Android 8.0 cung cấp tính năng hỗ trợ "hạn mức" của hệ thống tệp ext4 để trả về số liệu thống kê về mức sử dụng ổ đĩa gần như ngay lập tức. Tính năng hạn mức này cũng giúp cải thiện độ ổn định của hệ thống bằng cách ngăn mọi ứng dụng sử dụng nhiều hơn 90% dung lượng ổ đĩa hoặc 50% inode.

Triển khai

Tính năng hạn mức là một phần của quá trình triển khai mặc định của installd. installd tự động sử dụng tính năng hạn mức khi được bật trên một hệ thống tệp cụ thể. Hệ thống sẽ tự động và minh bạch tiếp tục tính toán thủ công khi tính năng hạn mức không được bật hoặc không được hỗ trợ trên thiết bị khối đang được đo lường.

Cách bật tính năng hỗ trợ hạn mức trên một thiết bị chặn cụ thể:

  1. Bật các tuỳ chọn hạt nhân CONFIG_QUOTA, CONFIG_QFMT_V2CONFIG_QUOTACTL.
  2. Thêm tuỳ chọn quota vào phân vùng dữ liệu người dùng trong tệp fstab:
    /dev/block/platform/soc/624000.ufshc/by-name/userdata   /data
    ext4    noatime,nosuid,nodev,barrier=1,noauto_da_alloc
    latemount,wait,check,formattable,fileencryption=ice,quota

Bạn có thể bật hoặc tắt tuỳ chọn fstab một cách an toàn trên các thiết bị hiện có. Trong lần khởi động đầu tiên sau khi thay đổi tuỳ chọn fstab, fsmgr buộc phải truyền fsck để cập nhật tất cả cấu trúc dữ liệu hạn mức, điều này có thể khiến lần khởi động đầu tiên mất nhiều thời gian hơn một chút. Các lần khởi động tiếp theo sẽ không bị ảnh hưởng.

Tính năng hỗ trợ hạn mức chỉ được kiểm thử trên ext4 và Linux 3.18 trở lên. Nếu bật tính năng này trên các hệ thống tệp khác hoặc trên các phiên bản hạt nhân cũ, nhà sản xuất thiết bị sẽ chịu trách nhiệm kiểm thử và kiểm tra tính chính xác của số liệu thống kê.

Không cần hỗ trợ phần cứng đặc biệt.

Xác nhận kết quả

Có các bài kiểm thử CTS trong StorageHostTest, các bài kiểm thử này thực thi các API công khai để đo lường mức sử dụng ổ đĩa. Các API này dự kiến sẽ trả về giá trị chính xác bất kể tính năng hỗ trợ hạn mức đang bật hay tắt.

Gỡ lỗi

Ứng dụng kiểm thử phân bổ cẩn thận các vùng dung lượng ổ đĩa bằng cách sử dụng các số nguyên tố duy nhất cho kích thước. Khi gỡ lỗi các chương trình kiểm thử này, hãy sử dụng thông tin này để xác định nguyên nhân gây ra bất kỳ sự khác biệt nào. Ví dụ: nếu một kiểm thử không đạt với delta là 11 MB, hãy kiểm tra phương thức Utils.useSpace() để xem blob 11 MB đã được lưu trữ trong getExternalCacheDir().

Ngoài ra, có một số kiểm thử nội bộ có thể hữu ích cho việc gỡ lỗi, nhưng bạn có thể phải tắt các bước kiểm tra bảo mật để vượt qua:

runtest -x frameworks/base/services/tests/servicestests/ \
  src/com/android/server/pm/InstallerTest.java
adb shell /data/nativetest64/installd_utils_test/installd_utils_test
adb shell /data/nativetest64/installd_cache_test/installd_cache_test
adb shell /data/nativetest64/installd_service_test/installd_service_test