On Wed, Jul 06, 2016 at 09:42:00AM +0100, Mel Gorman wrote: <snip> > > > > > > > > If buffer_head is over limit, old logic force to reclaim highmem but > > > > this zone_balanced logic will prevent it. > > > > > > > > > > The old logic was always busted on 64-bit because is_highmem would always > > > be 0. The original intent appears to be that buffer_heads_over_limit > > > would release the buffers when pages went inactive. There are a number > > > > Yes but the difference is in old, it was handled both direct and background > > reclaim once buffers_heads is over the limit but your change slightly > > changs it so kswapd couldn't reclaim high zone if any eligible zone > > is balanced. I don't know how big difference it can make but we saw > > highmem buffer_head problems several times, IIRC. So, I just wanted > > to notice it to you. whether it's handled or not, it's up to you. > > > > The last time I remember buffer_heads_over_limit was an NTFS filesystem > using small sub-page block sizes with a large highmem:lowmem ratio. If a > similar situation is encountered then a test patch would be something like; > > diff --git a/mm/vmscan.c b/mm/vmscan.c > index dc12af938a8d..a8ebd1871f16 100644 > --- a/mm/vmscan.c > +++ b/mm/vmscan.c > @@ -3151,7 +3151,7 @@ static int balance_pgdat(pg_data_t *pgdat, int order, int classzone_idx) > * zone was balanced even under extreme pressure when the > * overall node may be congested. > */ > - for (i = sc.reclaim_idx; i >= 0; i--) { > + for (i = sc.reclaim_idx; i >= 0 && !buffer_heads_over_limit; i--) { > zone = pgdat->node_zones + i; > if (!populated_zone(zone)) > continue; > > I'm not going to go with it for now because buffer_heads_over_limit is not > necessarily a problem unless lowmem is factor. We don't want background > reclaim to go ahead unnecessarily just because buffer_heads_over_limit. > It could be distinguished by only forcing reclaim to go ahead on systems > with highmem. If you don't think it's a problem, I don't want to insist on it because I don't have any report/workload right now. Instead, please write some comment in there for others to understand why kswapd is okay to ignore buffer_heads_over_limit unlike direct reclaim. Such non-symmetric behavior is really hard to follow without any description. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>