Số liệu thống kê về việc lưu trữ nhanh hơn

Trong các phiên bản Android trước đây, hệ thống đã truyền tải tất cả các tệp thuộc sở hữu của ứng dụng cụ thể để đ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á các tệp dữ liệu được lưu vào bộ nhớ đệm chỉ xem xét thời gian bị sửa đổi trên tất cả các ứng dụng. Điều này cho phép các ứng dụng độc hại làm giảm hiệu suất trải nghiệm tổng thể của người dùng bằng cách đặt thời gian đã sửa đổi xa trong tương lai thành không công bằng ưu tiên bản thân họ hơn các ứng dụng khác.

Để cải thiện những trải nghiệm này, Android 8.0 cho phép tận dụng hệ thống tệp ext4 "hạn mức" để trả lại số liệu thống kê sử dụng ổ đĩa gần như ngay lập tức. Hạn mức này cũng 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 trên 90% dung lượng ổ đĩa hoặc 50% số iốt.

Triển khai

Tính năng hạn mức là một phần trong 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 hệ thống tệp cụ thể. Hệ thống sẽ tiếp tục tự động và minh bạch một cách tự động 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ị chặn đang được đo lường.

Để bật tính năng hỗ trợ hạn mức trên một thiết bị chặn cụ thể, hãy làm như sau:

  1. Bật CONFIG_QUOTA, CONFIG_QFMT_V2 và Tuỳ chọn nhân CONFIG_QUOTACTL.
  2. Thêm tuỳ chọn quota vào phân vùng dữ liệu người dùng trong thẻ fstab của bạn tệp:
    /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 thiết bị. Trong lần khởi động đầu tiên sau khi thay đổi tuỳ chọn fstab, fsmgr buộc bật fsck để cập nhật tất 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. Tiếp theo sẽ không bị ảnh hưởng.

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

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

Xác nhận kết quả

Có các bài kiểm tra CTS trong StorageHostTest, bài tập thể dục công khai Các API để đo lường mức sử dụng ổ đĩa. Những API này được dự kiến là sẽ trả về giá trị chính xác bất kể hỗ trợ hạn mức được 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 dùng thông tin này để xác định nguyên nhân của bất kỳ lỗi nào sự khác biệt. Ví dụ: nếu kiểm thử không thành công với mức delta là 11 MB, hãy kiểm tra Utils.useSpace() để thấy rằng blob 11 MB đã được lưu trữ trong getExternalCacheDir()

Ngoài ra còn có một số thử nghiệm nội bộ có thể hữu ích cho việc gỡ lỗi, nhưng chúng có thể yêu cầu tắt tính năng 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