A checkpoint is also tasked with garbage collection. It has to clean up the older content from a file that is now obsolete. To do so, the checkpoint-cleanup process can effectively visit and load all of the internal pages in a file. Doing so when the cache has already reached an aggressive state can be counterproductive. Not only reading of the pages into the cache for the cleanup can be slower, but the checkpoint itself could hold eviction in the aggressive state longer. Eviction of dirty content from a file doesn't happen while the checkpoint is running on that file, reducing the chances of eviction going back to its normal state.
When the eviction is set to aggressive, the checkpoint could skip loading the internal pages that are not already in cache. This will help a faster checkpoint, and a higher chance for cache to get back to normal.
Here is a change for this issue as written by haribabu.kommi: