Re: [RFC 12/13] mm, compaction: more reliably increase direct compaction priority

From: Michal Hocko
Date: Fri May 13 2016 - 10:15:46 EST


On Tue 10-05-16 09:36:02, Vlastimil Babka wrote:
> During reclaim/compaction loop, compaction priority can be increased by the
> should_compact_retry() function, but the current code is not optimal for
> several reasons:
>
> - priority is only increased when compaction_failed() is true, which means
> that compaction has scanned the whole zone. This may not happen even after
> multiple attempts with the lower priority due to parallel activity, so we
> might needlessly struggle on the lower priority.

OK, I can see that this can be changed if we have a guarantee that at
least one full round is guaranteed. Which seems to be the case for the
lowest priority.

>
> - should_compact_retry() is only called when should_reclaim_retry() returns
> false. This means that compaction priority cannot get increased as long
> as reclaim makes sufficient progress. Theoretically, reclaim should stop
> retrying for high-order allocations as long as the high-order page doesn't
> exist but due to races, this may result in spurious retries when the
> high-order page momentarily does exist.

This is intentional behavior and I would like to preserve it if it is
possible. For higher order pages should_reclaim_retry retries as long
as there are some eligible high order pages present which are just hidden
by the watermark check. So this is mostly to get us over watermarks to
start carrying about fragmentation. If we race there then nothing really
terrible should happen and we should eventually converge to a terminal
state.

Does this make sense to you?
--
Michal Hocko
SUSE Labs