On 04.08.20 12:03, Mike Rapoport wrote: > On Tue, Aug 04, 2020 at 11:55:10AM +0200, David Hildenbrand wrote: >> On 04.08.20 11:33, Mike Rapoport wrote: >>> On Tue, Aug 04, 2020 at 09:24:08AM +0200, David Hildenbrand wrote: >>>> Let's document what ZONE_MOVABLE means, how it's used, and which special >>>> cases we have regarding unmovable pages (memory offlining vs. migration / >>>> allocations). >>>> >>>> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> >>>> Cc: Michal Hocko <mhocko@xxxxxxxx> >>>> Cc: Michael S. Tsirkin <mst@xxxxxxxxxx> >>>> Cc: Mike Kravetz <mike.kravetz@xxxxxxxxxx> >>>> Cc: Mike Rapoport <rppt@xxxxxxxxxx> >>>> Cc: Pankaj Gupta <pankaj.gupta.linux@xxxxxxxxx> >>>> Cc: Baoquan He <bhe@xxxxxxxxxx> >>>> Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> >>> >>> Several nits below, othersize >>> >>> Acked-by: Mike Rapoport <rppt@xxxxxxxxxxxxx> >>> >>>> --- >>>> include/linux/mmzone.h | 34 ++++++++++++++++++++++++++++++++++ >>>> 1 file changed, 34 insertions(+) >>>> >>>> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h >>>> index f6f884970511d..600d449e7d9e9 100644 >>>> --- a/include/linux/mmzone.h >>>> +++ b/include/linux/mmzone.h >>>> @@ -372,6 +372,40 @@ enum zone_type { >>>> */ >>>> ZONE_HIGHMEM, >>>> #endif >>>> + /* >>>> + * ZONE_MOVABLE is similar to ZONE_NORMAL, except that it *primarily* >>>> + * only contains movable pages. Main use cases are to make memory >>> >>> "Primarily only" sounds awkward. Maybe >>> >>> ... except that it only contains movable pages with few exceptional >>> cases described below. >>> >>> And then >>> >>> Main use cases for ZONE_MOVABLE are ... >> >> Ack! >> >>> >>>> + * offlining more likely to succeed, and to locally limit unmovable >>>> + * allocations - e.g., to increase the number of THP/huge pages. >>>> + * Notable special cases are: >>>> + * >>>> + * 1. Pinned pages: (Long-term) pinning of movable pages might >>> >>> ^long, capital L looked out of place for me >> >> Ack! >> >>> >>>> + * essentially turn such pages unmovable. Memory offlining might >>>> + * retry a long time. >>>> + * 2. memblock allocations: kernelcore/movablecore setups might create >>>> + * situations where ZONE_MOVABLE contains unmovable allocations >>>> + * after boot. Memory offlining and allocations fail early. >>>> + * 3. Memory holes: Such pages cannot be allocated. Applies only to >>>> + * boot memory, not hotplugged memory. Memory offlining and >>>> + * allocations fail early. >>> >>> I would clarify where page struct for abscent memory come from >> >> Something like: >> >> Memory holes: We might have a memmap for memory holes, for example, if > > ^w ;-) > >> we have sections that are only partially System RAM. Such pages cannot >> be ... > > How about > > ... sections that are only partially populated > > ? Yeah, shorter. Thanks! -- Thanks, David / dhildenb