Re: [PATCH 2/2] fs/dcache: Make negative dentries easier to be reclaimed
From: Michal Hocko <mhocko@kernel.org>
Date: 2018-08-30 07:20:56
Also in:
linux-fsdevel, linux-mm, lkml
On Wed 29-08-18 15:58:52, Waiman Long wrote:
On 08/29/2018 03:51 AM, Michal Hocko wrote:quoted
On Tue 28-08-18 13:19:40, Waiman Long wrote:quoted
For negative dentries that are accessed once and never used again, they should be removed first before other dentries when shrinker is running. This is done by putting negative dentries at the head of the LRU list instead at the tail. A new DCACHE_NEW_NEGATIVE flag is now added to a negative dentry when it is initially created. When such a dentry is added to the LRU, it will be added to the head so that it will be the first to go when a shrinker is running if it is never accessed again (DCACHE_REFERENCED bit not set). The flag is cleared after the LRU list addition.Placing object to the head of the LRU list can be really tricky as Dave pointed out. I am not familiar with the dentry cache reclaim so my comparison below might not apply. Let me try anyway. Negative dentries sound very similar to MADV_FREE pages from the reclaim POV. They are primary candidate for reclaim, yet you want to preserve aging to other easily reclaimable objects (including other MADV_FREE pages). What we do for those pages is to move them from the anonymous LRU list to the inactive file LRU list. Now you obviously do not have anon/file LRUs but something similar to active/inactive LRU lists might be a reasonably good match. Have easily reclaimable dentries on the inactive list including negative dentries. If negative entries are heavily used then they can promote to the active list because there is no reason to reclaim them soon. Just my 2cAs mentioned in my reply to Dave, I did considered using a 2 LRU list solution. However, that will add more complexity to the dcache LRU management code than my current approach and probably more potential for slowdown.
I completely agree with Dave here. This is not easy but trying to sneak in something that works for an _artificial_ workload is simply a no go. So if it takes to come with a more complex solution to cover more general workloads then be it. Someone has to bite a bullet and explore that direction. It won't be a simple project but well, if negative dentries really matter then it is worth making the reclaim design robust and comprehensible rather than adhoc and unpredictable. -- Michal Hocko SUSE Labs