On 10.12.18 14:53, osalvador@xxxxxxx wrote: > On 2018-12-07 11:35, osalvador@xxxxxxx wrote: >> On 2018-12-07 11:32, Michal Hocko wrote: >>> On Fri 07-12-18 10:54:50, Vlastimil Babka wrote: >>>> Well, __pageblock_pfn_to_page() has to be called for each pageblock >>>> in >>>> compaction, when zone_contiguous is false. And that's unchanged since >>>> the introduction of zone_contiguous, so the numbers should still >>>> hold. >>> >>> OK, this means that we have to carefully re-evaluate zone_contiguous >>> for >>> each offline operation. > > I started to think about this but some questions arose. > > Actually, no matter what we do, if we re-evaluate zone_contiguous > in the offline operation, zone_contiguous will be left unset. > > set_zone_contiguous() calls __pageblock_pfn_to_page() in > pageblock_nr_pages chunks to determine if the zone is contiguous, > and checks the following: > > * first/end pfn of the pageblock are valid sections > * first pfn of the pageblock is online > * we do not intersect different zones > * first/end pfn belong to the same zone > > Now, when dropping the shrink code and re-evaluating zone_contiguous in > offline > operation, set_zone_contiguous() will return false, leaving us with > zone_contiguous > unset. > > I wonder if we want that, or we want to stick with the optimization that > zone_contiguous brings us. > > If we do not care, dropping everything and just calling > clear_zone_contiguous and > set_zone_contiguous is the right thing to go. > But, if we want to keep the zone_contiguous optimization, I am afraid > that we need > to re-adjust zone boundaries in the offline operation whenever we remove > first/end > section. > In that case, set_zone_contiguous will still keep zone_contiguous as > set. > > So, it seems that the only headache we still have is this > zone_contiguous thing. > Ideas? Suggestions? At least for memory hot(un)plug we always online/offline complete sections. And they all go to the same zone. However we check on pageblock granularity. I would assume that we only have mixed zones on one section for some corner cases sections in our system? I wonder if we could optimize somehow differently. E.g. mark sections as belonging completely to a zone. If not, check on pageblock granularity. E.g. SECTION_SINGLE_ZONE -- Thanks, David / dhildenb