Thống kê lưu trữ nhanh hơn

Trong các phiên bản Android trước, hệ thống duyệt qua tất cả các tệp thuộc sở hữu của một ứng dụng cụ thể để đo mức sử dụng ổ đĩa. Phép đo 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 Cài đặt.

Ngoài ra, thuật toán nội bộ để xóa các tệp dữ liệu được lưu trong bộ nhớ đệm chỉ xem xét thời gian được 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 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 để ưu tiên chúng 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 đề xuất tận dụng hỗ trợ "hạn ngạch" của hệ thống tệp ext4 để trả về số liệu thống kê sử dụng ổ đĩa gần như ngay lập tức. Tính năng hạn ngạch này cũng cải thiện độ ổn định của hệ thống bằng cách ngăn không cho bất kỳ ứng dụng nào sử dụng hơn 90% dung lượng ổ đĩa hoặc 50% số nút.

Thực hiện

Tính năng hạn ngạch 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 ngạch khi được bật trên một hệ thống tệp cụ thể. Hệ thống tự động và minh bạch tiếp tục tính toán thủ công khi tính năng hạn ngạch không được bật hoặc hỗ trợ trên thiết bị khối đang được đo.

Để bật hỗ trợ hạn ngạch trên một thiết bị khối cụ thể:

  1. Kích hoạt các tùy chọn hạt nhân CONFIG_QUOTA , CONFIG_QFMT_V2CONFIG_QUOTACTL .
  2. Thêm tùy chọn quota vào phân vùng dữ liệu người dùng trong tệp fstab của bạn:
    /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

Tùy chọn fstab có thể được bật hoặc tắt 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 tùy chọn fstab , fsmgr buộc vượt qua fsck để cập nhật tất cả cấu trúc dữ liệu hạn ngạch, đ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. Những lần khởi động tiếp theo sẽ không bị ảnh hưởng.

Hỗ trợ hạn mức chỉ được thử nghiệm trên ext4 và Linux 3.18 trở lên. Nếu kích hoạt trên các hệ thống tệp khác hoặc trên các phiên bản kernel cũ hơn, nhà sản xuất thiết bị chịu trách nhiệm kiểm tra 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.

Thẩm định

Có các thử nghiệm CTS trong StorageHostTest , thực hiện các API công khai để đo 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ể hỗ trợ hạn ngạch được bật hay tắt.

Gỡ lỗi

Ứng dụng thử nghiệm phân bổ cẩn thận các vùng không gian đĩ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 thử nghiệm này, hãy sử dụng điều này để xác định nguyên nhân của bất kỳ sự khác biệt nào. Ví dụ: nếu thử nghiệm không thành công với delta là 11 MB, hãy kiểm tra phương thức Utils.useSpace() để biết 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 vô hiệu hóa 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