Re: OOM killer changes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 08/19/2016 09:33 AM, Michal Hocko wrote:
> On Fri 19-08-16 08:27:34, Vlastimil Babka wrote:
>> On 08/19/2016 04:42 AM, Ralf-Peter Rohbeck wrote:
>>> On 18.08.2016 13:12, Vlastimil Babka wrote:
>>>> On 18.8.2016 22:01, Ralf-Peter Rohbeck wrote:
>>>>> On 17.08.2016 23:57, Vlastimil Babka wrote:
>>>>>> Vlastimil
>>>>> Yes, that change was in my test with linux-next-20160817. Here's the diff:
>>>>>
>>>>> diff --git a/mm/compaction.c b/mm/compaction.c
>>>>> index f94ae67..60a9ca2 100644
>>>>> --- a/mm/compaction.c
>>>>> +++ b/mm/compaction.c
>>>>> @@ -1083,8 +1083,10 @@ static void isolate_freepages(struct
>>>>> compact_control *cc)
>>>>>                           continue;
>>>>>
>>>>>                   /* Check the block is suitable for migration */
>>>>> +/*
>>>>>                   if (!suitable_migration_target(page))
>>>>>                           continue;
>>>>> +*/
>>>> OK, could you please also try if uncommenting the above still works without OOM?
>>>> Or just plain linux-next-20160817, I guess we don't need the printk's to test
>>>> this difference.
>>>>
>>>> Thanks a lot!
>>>> Vlastimil
>>>>
>>> With the two lines back in I had OOMs again. See the attached logs.
>>
>> Thanks for the confirmation.
>>
>> We however shouldn't disable the heuristic completely, so here's a compromise
>> patch hooking into the new compaction priorities. Can you please test on top of
>> linux-next?
>>
>> -----8<-----
>> >From 0927cc2a4c6a3247111168eace9012c23d06f9db Mon Sep 17 00:00:00 2001
>> From: Vlastimil Babka <vbabka@xxxxxxx>
>> Date: Thu, 18 Aug 2016 16:01:14 +0200
>> Subject: [PATCH] mm, compaction: make full priority ignore pageblock
>>  suitability
>>
>> Ralf-Peter Rohbeck has reported premature OOMs for order-2 allocations (stack)
>> due to OOM rework in 4.7. In his scenario (parallel kernel build and dd writing
>> to two drives) many pageblocks get marked as Unmovable and compaction free
>> scanner struggles to isolate free pages. Joonsoo Kim pointed out that the free
>> scanner skips pageblocks that are not movable to prevent filling them and
>> forcing non-movable allocations to fallback to other pageblocks. Such heuristic
>> makes sense to help prevent long-term fragmentation, but premature OOMs are
>> relatively more urgent problem. As a compromise, this patch disables the
>> heuristic only for the ultimate compaction priority.
>>
>> Reported-by: Ralf-Peter Rohbeck <Ralf-Peter.Rohbeck@xxxxxxxxxxx>
>> Suggested-by: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
>> Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx>
> 
> Thanks to both of you! I do agree that we should drop all these
> heuristics when we struggle and there is an OOM risk. I have just a
> small nit here. I would prefer
> s@COMPACT_PRIO_SYNC_FULL@MIN_COMPACT_PRIORITY@ when disabling them
> because this would be easier to follow and it would be easier for future
> changes.

OK, but then we should start with a change to
mm-compaction-add-the-ultimate-direct-compaction-priority.patch
(fix at the end of this e-mail) to make things consistent.
Then I will apply that to the new patch if it's successfully tested.

> Which brings me to another thing I was suggesting earlier. I
> believe we should go to this MIN_COMPACT_PRIORITY only for !costly
> requests because costly orders shouldn't get all those exceptions and
> risk long term fragmentation issues. We do not have that many costly
> requests (except for hugetlb) so it doesn't matter all that much right
> now but long term we want to differentiate those I believe.

I'll send such change afterwards as well.

> That being said, let's wait for the feedback on this patch + linux-next.
> If it works out I will send a stable 4.7 patch which drops compaction
> feedback from should_compact_retry (turn it to the !COMPACTION version)
> so that 4.7 users do not suffer from the premature OOM and will ask
> Andrew to sneak the compaction patches to 4.8 as they fix a real issue
> and the risk is not really high.

Agreed.

> Acked-by: Michal Hocko <mhocko@xxxxxxxx>

Thanks!

-----8<-----
>From c4da7022e85e52f5463055cdc474656652e7a504 Mon Sep 17 00:00:00 2001
From: Vlastimil Babka <vbabka@xxxxxxx>
Date: Fri, 19 Aug 2016 09:40:31 +0200
Subject: [PATCH] mm, compaction: add the ultimate direct compaction
 priority-fix

Use the MIN_COMPACT_PRIORITY alias instead of COMPACT_PRIO_SYNC_FULL to
disable heuristics "because this would be easier to follow and it would be
easier for future changes", per Michal.

Suggested-by: Michal Hocko <mhocko@xxxxxxx>
Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx>
Fixes: mmotm mm-compaction-add-the-ultimate-direct-compaction-priority.patch
---
 mm/compaction.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/mm/compaction.c b/mm/compaction.c
index ae4f40afcca1..3e35fce2cace 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -1644,8 +1644,8 @@ static enum compact_result compact_zone_order(struct zone *zone, int order,
 		.alloc_flags = alloc_flags,
 		.classzone_idx = classzone_idx,
 		.direct_compaction = true,
-		.whole_zone = (prio == COMPACT_PRIO_SYNC_FULL),
-		.ignore_skip_hint = (prio == COMPACT_PRIO_SYNC_FULL)
+		.whole_zone = (prio == MIN_COMPACT_PRIORITY),
+		.ignore_skip_hint = (prio == MIN_COMPACT_PRIORITY)
 	};
 	INIT_LIST_HEAD(&cc.freepages);
 	INIT_LIST_HEAD(&cc.migratepages);
@@ -1691,7 +1691,7 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
 								ac->nodemask) {
 		enum compact_result status;
 
-		if (prio > COMPACT_PRIO_SYNC_FULL
+		if (prio > MIN_COMPACT_PRIORITY
 					&& compaction_deferred(zone, order)) {
 			rc = max_t(enum compact_result, COMPACT_DEFERRED, rc);
 			continue;
-- 
2.9.2



--
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>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]