summaryrefslogtreecommitdiff
path: root/cmds/installd/CacheItem.h
AgeCommit message (Collapse)Author
2017-03-22Follow "atomic" to "group" refactoring. Jeff Sharkey
Remove noisy logging about UIDs that are relying on default cache quota of 64MiB. Move away from yucky old statfs() and use statvfs() instead. Test: /data/nativetest/installd_cache_test/installd_cache_test Bug: 35812899, 35684969, 36482620 Change-Id: I3d68da97eac2ebcda489bdf9d27061cac5b3f7cc
2017-02-22Logic for atmoic/tombstone behavior; split mode. Jeff Sharkey
Flesh out logic for cache directories that request new atomic and/or tombstone clearing behaviors. Atomic directories are considered for deletion as a single all-or-nothing unit, and tombstone directories truncate any removed files instead of unlinking them. Since these behaviors can be mixed together, add local tests that quickly verify several different permutations. Reduce memory footprint of CacheItem objects by only storing name and pointer to parent (instead of full path). Fix ordering bug by switching to std::stable_sort. Add "V2_DEFY_QUOTA" flag so we can split clearing into two distinct phases: clearing data for apps above their quotas, and then pushing deeper by clearing data for apps below their quotas. Test: adb shell /data/nativetest64/installd_cache_test/installd_cache_test Bug: 34692014, 33811826 Change-Id: I156897de1d1d1c371b2b837128b2e286bf33d40d
2017-01-18First pass at updated cache clearing logic. Jeff Sharkey
The old clearing algorithm is very naive and it sorts all cached files globally by modified time. This sadly lets apps gamify the system by setting their modified times far in the future, and it's very expensive because it requires a global filesystem traversal to free up even the smallest amount of data. Instead, this CL introduces a much more fair cache clearing algorithm that deletes files from specific UIDs based on how much cache space that UID is using proportional to the space allocated to them. This new design has several nice properties: -- It uses the recently added quotactl() feature to rapidly target the apps that are using the most space. -- We only need to traverse the filesystem for UIDs that actively enter the crosshairs of the clearing algorithm. -- Disciplined apps who stay under their allocated quota will be the last to have their cached data cleared. -- This design can be easily adapted to support additional features such as atomic purging and tombstones. In summary, the new algorithm is extremely efficient when freeing up the typical small-to-medium amounts of disk space, and is only moderately less efficient than the old algorithm when forced to clear all cached data. Test: builds, boots, clearing strategy looks sane Bug: 33965858 Change-Id: I66f95089cb33f1add3f31fcf1082ab2469870fda