First pass at updated cache clearing logic.
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
Loading
Please register or sign in to comment