On 9/11/19 8:42 AM, David Hildenbrand wrote: > On 11.09.19 14:25, Michal Hocko wrote: >> On Wed 11-09-19 14:19:41, Michal Hocko wrote: >>> On Wed 11-09-19 08:08:38, Michael S. Tsirkin wrote: >>>> On Wed, Sep 11, 2019 at 01:36:19PM +0200, Michal Hocko wrote: >>>>> On Tue 10-09-19 14:23:40, Alexander Duyck wrote: >>>>> [...] >>>>>> We don't put any limitations on the allocator other then that it needs to >>>>>> clean up the metadata on allocation, and that it cannot allocate a page >>>>>> that is in the process of being reported since we pulled it from the >>>>>> free_list. If the page is a "Reported" page then it decrements the >>>>>> reported_pages count for the free_area and makes sure the page doesn't >>>>>> exist in the "Boundary" array pointer value, if it does it moves the >>>>>> "Boundary" since it is pulling the page. >>>>> This is still a non-trivial limitation on the page allocation from an >>>>> external code IMHO. I cannot give any explicit reason why an ordering on >>>>> the free list might matter (well except for page shuffling which uses it >>>>> to make physical memory pattern allocation more random) but the >>>>> architecture seems hacky and dubious to be honest. It shoulds like the >>>>> whole interface has been developed around a very particular and single >>>>> purpose optimization. >>>>> >>>>> I remember that there was an attempt to report free memory that provided >>>>> a callback mechanism [1], which was much less intrusive to the internals >>>>> of the allocator yet it should provide a similar functionality. Did you >>>>> see that approach? How does this compares to it? Or am I completely off >>>>> when comparing them? >>>>> >>>>> [1] mostly likely not the latest version of the patchset >>>>> http://lkml.kernel.org/r/1502940416-42944-5-git-send-email-wei.w.wang@xxxxxxxxx >>>> Linus nacked that one. He thinks invoking callbacks with lots of >>>> internal mm locks is too fragile. >>> I would be really curious how much he would be happy about injecting >>> other restrictions on the allocator like this patch proposes. This is >>> more intrusive as it has a higher maintenance cost longterm IMHO. >> Btw. I do agree that callbacks with internal mm locks are not great >> either. We do have a model for that in mmu_notifiers and it is something >> I do consider PITA, on the other hand it is mostly sleepable part of the >> interface which makes it the real pain. The above callback mechanism was >> explicitly documented with restrictions and that the context is >> essentially atomic with no access to particular struct pages and no >> expensive operations possible. So in the end I've considered it >> acceptably painful. Not that I want to override Linus' nack but if >> virtualization usecases really require some form of reporting and no >> other way to do that push people to invent even more interesting >> approaches then we should simply give them/you something reasonable >> and least intrusive to our internals. >> > The issue with "[PATCH v14 4/5] mm: support reporting free page blocks" > is that it cannot really handle the use case we have here if I am not > wrong. While a page is getting processed by the hypervisor (e.g. > MADV_DONTNEED), it must not get reused. > > "Some page blocks may > leave the free list after zone->lock is released, so it is the caller's > responsibility to either detect or prevent the use of such pages." > > If I'm not wrong, this only made sense to speed up migration in the > hypervisor, where you can deal with false positives differently. Another difference between the two approaches is the origin from where the reporting request is getting generated. (If I remember correctly) In Alexander's series or in my series [1], VM is able to report pages dynamically without any requirement of host intervention. [1] https://lkml.org/lkml/2019/8/12/593 -- Thanks Nitesh