linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: "孙世龙 sunshilong" <sunshilong369@gmail.com>
To: David Rientjes <rientjes@google.com>
Cc: David Hildenbrand <david@redhat.com>, linux-mm@kvack.org
Subject: Re: Are there still some methods that could be used by the Linux kernel to reduce memory fragmentation while both CONFIG-MIGRATION and CONFIG-COMPACTION are disabled?
Date: Thu, 25 Jun 2020 11:22:16 +0800	[thread overview]
Message-ID: <CAAvDm6YzPcMyqGJ5dLDSBjWe-gnZMBo+aJTjfAsxQo1kY9dXtw@mail.gmail.com> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2006241017580.261553@chino.kir.corp.google.com>

[-- Attachment #1: Type: text/plain, Size: 6039 bytes --]

Hi,David Rientjes, David Hildenbrand
Thanks a lot to both of you.

>Grouping pages by mobility simply means that we attempt (best
>effort) to allocate unmovable pages from the same pageblocks and movable
>pages from the same pageblocks.

How can I understand it in the right way, especially for "from the same
pageblocks"? Could you please explain that in more detail?

>Yes, you can use kernelcore= (or movablecore=) on the kernel command line
>to set this up: allocations from this zone must have __GFP_MOVABLE so
>they "should" be migratable.  This is typically only useful when
>CONFIG_COMPACTION is enabled, however, to do that defragmentation work so
>that higher order memory becomes available.
I was very hopeful for this method(i.e. ZONE_MOVABLE).
It's really bad news. As the subject, I have no choice other than disabling
these options(i.e. CONFIG-MIGRATION and CONFIG-COMPACTION)
since I am using a real-time OS(i.e. it needs a patch to the Linux kernel
and some kconfig options should be disabled).

Are there still some methods that could be used by the Linux kernel
to reduce memory fragmentation?


>> Is there some potential problems that I should be aware of if I enable
>> "ZONE_MOVABLE" on real-time system?
>>

>Yes, if ZONE_MOVABLE is made too big then you can risk out of memory
>kills: movable allocations can fallback to ZONE_NORMAL but unmovable
>allocations cannot graduate to ZONE_MOVABLE.  So if ZONE_NORMAL is full
>(either because you have too much unmovable memory in-use or too much
>movable fell back to ZONE_NORMAL), and you have more unmovable
>allocations, you'll get reclaim in ZONE_NORMAL and, at worst case, oom
>kills.
I can draw the conclusion that ZONE_NORMAL is only used to allocate
unmovable memory(i.e. no movable memory could be allocated from
ZONE_NORMAL) while "kernelcore= (or movablecore=)" option is set.
Am I right?


As the kernel without such option(i.e. kernelcore= or movablecore=), there
are
both movable memory and unmovable memory in ZONE_NORMAL.
For details, see the footnote.

It's different with the option and without the option:
Only unmovable memory could be allocated from ZONE_NORMAL while the option
is set whereas both unmovable and movable could be allocated from it
without
setting the option.
Am I right?


Here is part of the output when executing "sudo cat /proc/pagetypeinfo" on
the platform
without the option(i.e. kernelcore= or movablecore=):
Free pages count per migrate type at order
                           0   1   2   3   4   5   6   7   8   9   10
   DMA, type    Unmovable  0   1   1   0   2   1   1   0   1   0    0
   DMA, type      Movable  0   0   0   0   0   0   0   0   0   1    3
   DMA, type  Reclaimable  0   0   0   0   0   0   0   0   0   0    0
   DMA, type   HighAtomic  0   0   0   0   0   0   0   0   0   0    0
   DMA, type      Isolate  0   0   0   0   0   0   0   0   0   0    0
 DMA32, type    Unmovable  1   0   0   0   0   0   1   1   1   1    0
 DMA32, type      Movable  8   6   7   5   5   4   6   5   2   2  723
 DMA32, type  Reclaimable  0   0   0   0   0   0   0   0   0   0    0
 DMA32, type   HighAtomic  0   0   0   0   0   0   0   0   0   0    0
 DMA32, type      Isolate  0   0   0   0   0   0   0   0   0   0    0
Normal, type    Unmovable  0  23   9   2   1   1   0   1  10  11    0
Normal, type      Movable  1 791 767 630 111  11   5   5   2   0  929
Normal, type  Reclaimable  0   2   4   2   2   1   1   1   1   1    0
Normal, type   HighAtomic  0   0   0   0   0   0   0   0   0   0    0
Normal, type      Isolate  0   0   0   0   0   0   0   0   0   0    0

Number of blocks type Unmovable Movable Reclaimable HighAtomic Isolate
Node 0, zone      DMA        1       7           0          0       0
Node 0, zone    DMA32        2    1526           0          0       0
Node 0, zone   Normal      160    2318          74          0       0

Best regards.

David Rientjes <rientjes@google.com> 于2020年6月25日周四 上午1:22写道:

> On Wed, 24 Jun 2020, 孙世龙 sunshilong wrote:
>
> > >> Are there still some methods that could be used by the Linux kernel
> > >> to reduce memory fragmentation while both CONFIG-MIGRATION
> > >> and CONFIG-COMPACTION are disabled?
> > >
> > >
> > >We do have mobility grouping on pageblock order.
> > >Also, I think you can use ZONE_MOVABLE without migration and compaction,
> > >to at least locally limit unmovable fragmentation.
> > It's a good news.
> >
> > Could you please explain that in more detail for me or suggest some
> documents
> > for me to go through.
> >
>
> /proc/buddyinfo and /proc/pagetypeinfo will show the various pageblocks on
> the system.  Grouping pages by mobility simply means that we attempt (best
> effort) to allocate unmovable pages from the same pageblocks and movable
> pages from the same pageblocks.
>
> > As per the post(
> http://lkml.iu.edu/hypermail/linux/kernel/1703.1/06782.html),
> > I think it's something like ZONE_NORMAL. And I find that
> > "ZONE_MOVEABLE" is available on Linux-v4.9.
> >
>
> Yes, you can use kernelcore= (or movablecore=) on the kernel command line
> to set this up: allocations from this zone must have __GFP_MOVABLE so they
> "should" be migratable.  This is typically only useful when
> CONFIG_COMPACTION is enabled, however, to do that defragmentation work so
> that higher order memory becomes available.
>
> > Is there some potential problems that I should be aware of if I enable
> > "ZONE_MOVABLE" on real-time system?
> >
>
> Yes, if ZONE_MOVABLE is made too big then you can risk out of memory
> kills: movable allocations can fallback to ZONE_NORMAL but unmovable
> allocations cannot graduate to ZONE_MOVABLE.  So if ZONE_NORMAL is full
> (either because you have too much unmovable memory in-use or too much
> movable fell back to ZONE_NORMAL), and you have more unmovable
> allocations, you'll get reclaim in ZONE_NORMAL and, at worst case, oom
> kills.

[-- Attachment #2: Type: text/html, Size: 7311 bytes --]

  reply	other threads:[~2020-06-25  3:22 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-23 15:52 Are there still some methods that could be used by the Linux kernel to reduce memory fragmentation while both CONFIG-MIGRATION and CONFIG-COMPACTION are disabled? 孙世龙 sunshilong
2020-06-24  9:53 ` David Hildenbrand
2020-06-24 11:16   ` 孙世龙 sunshilong
2020-06-24 17:22     ` David Rientjes
2020-06-25  3:22       ` 孙世龙 sunshilong [this message]
2020-06-28  3:27         ` David Rientjes
2020-06-28  5:15           ` 孙世龙 sunshilong
2020-06-28 20:39             ` David Rientjes
  -- strict thread matches above, loose matches on Subject: below --
2020-06-23 15:39 孙世龙 sunshilong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAAvDm6YzPcMyqGJ5dLDSBjWe-gnZMBo+aJTjfAsxQo1kY9dXtw@mail.gmail.com \
    --to=sunshilong369@gmail.com \
    --cc=david@redhat.com \
    --cc=linux-mm@kvack.org \
    --cc=rientjes@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).