On 07/29/2014 11:12 AM, Vlastimil Babka wrote:
On 07/29/2014 08:38 AM, Joonsoo Kim wrote:
I still don't understand why defer_compaction() is needed here.
defer_compaction() is intended for not struggling doing compaction on
the zone where we already have tried compaction and found that it
isn't suitable for compaction. Allocation failure doesn't tell us
that we have tried compaction for all the zone range so we shouldn't
make a decision here to defer compaction on this zone carelessly.
OK I can remove that, it should make the code nicer anyway.
Weird, that removal of this defer_compaction() call seems ho have
quadrupled compact_stall and compact_fail counts. The scanner pages
counters however increased by only 10% so that could indicate the
problem is occuring only in a small zone such as DMA. Could be another
case of mismatch between watermark checking in compaction and
allocation? Perhaps the lack of proper classzone_idx in the compaction
check? Sigh.
I also agree
with the argument "for all the zone range" and I also realized that it's
not (both before and after this patch) really the case. I planned to fix
that in the future, but I can probably do it now.
The plan is to call defer_compaction() only when compaction returned
COMPACT_COMPLETE (and not COMPACT_PARTIAL) as it means the whole zone
was scanned. Otherwise there will be bias towards the beginning of the
zone in the migration scanner - compaction will be deferred half-way and
then cached pfn's might be reset when it restarts, and the rest of the
zone won't be scanned at all.
Hm despite expectations, this didn't seem to make much difference. But
maybe there will be once I have some idea what happened to those stalls.
Thanks.