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:
- Bật
CONFIG_QUOTA
,CONFIG_QFMT_V2
và Tuỳ chọn nhânCONFIG_QUOTACTL
. - 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