[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4FEC86BA.9050004@redhat.com>
Date: Thu, 28 Jun 2012 12:30:50 -0400
From: Rik van Riel <riel@...hat.com>
To: Mel Gorman <mel@....ul.ie>
CC: linux-mm@...ck.org, akpm@...ux-foundation.org,
kamezawa.hiroyu@...fujitsu.com, minchan@...nel.org,
linux-kernel@...r.kernel.org, jaschut@...dia.gov
Subject: Re: [PATCH -mm] mm: have order>0 compaction start off where it left
On 06/28/2012 06:29 AM, Mel Gorman wrote:
> Lets say there are two parallel compactions running. Process A meets
> the migration PFN and moves to the end of the zone to restart. Process B
> finishes scanning mid-way through the zone and updates last_free_pfn. This
> will cause Process A to "jump" to where Process B left off which is not
> necessarily desirable.
>
> Another side effect is that a workload that allocations/frees
> aggressively will not compact as well as the "free" scanner is not
> scanning the end of the zone each time. It would be better if
> last_free_pfn was updated when a full pageblock was encountered
>
> So;
>
> 1. Initialise last_free_pfn to the end of the zone
> 2. On compaction, scan from last_free_pfn and record where it started
> 3. If a pageblock is full, update last_free_pfn
> 4. If the migration and free scanner meet, reset last_free_pfn and
> the free scanner. Abort if the free scanner wraps to where it started
>
> Does that make sense?
Yes, that makes sense. We still have to keep track
of whether we have wrapped around, but I guess that
allows for a better name for the bool :)
Maybe cc->wrapped?
Does anyone have a better name?
As for point (4), should we abort when we wrap
around to where we started, or should we abort
when free_pfn and migrate_pfn meet after we
wrapped around?
>> diff --git a/mm/internal.h b/mm/internal.h
>> index 2ba87fb..b041874 100644
>> --- a/mm/internal.h
>> +++ b/mm/internal.h
>> @@ -120,6 +120,7 @@ struct compact_control {
>> unsigned long free_pfn; /* isolate_freepages search base */
>> unsigned long migrate_pfn; /* isolate_migratepages search base */
>> bool sync; /* Synchronous migration */
>> + bool last_round; /* Last round for order>0 compaction */
>>
>
> I don't get what you mean by last_round. Did you mean "wrapped". When
> false, it means the free scanner started from last_pfn and when true it
> means it started from last_pfn, met the migrate scanner and wrapped
> around to the end of the zone?
Yes, I do mean "wrapped" :)
--
All rights reversed
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists