lkml.org 
[lkml]   [2021]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH resend v2 2/5] mm/madvise: introduce MADV_POPULATE_(READ|WRITE) to prefault page tables
    [sorry for a long silence on this]

    On Tue 11-05-21 10:15:31, David Hildenbrand wrote:
    [...]

    Thanks for the extensive usecase description. That is certainly useful
    background. I am sorry to bring this up again but I am still not
    convinced that READ/WRITE variant are the best interface.

    > While the use case for MADV_POPULATE_WRITE is fairly obvious (i.e.,
    > preallocate memory and prefault page tables for VMs), one issue is that
    > whenever we prefault pages writable, the pages have to be marked dirty,
    > because the CPU could dirty them any time. while not a real problem for
    > hugetlbfs or dax/pmem, it can be a problem for shared file mappings: each
    > page will be marked dirty and has to be written back later when evicting.
    >
    > MADV_POPULATE_READ allows for optimizing this scenario: Pre-read a whole
    > mapping from backend storage without marking it dirty, such that eviction
    > won't have to write it back. As discussed above, shared file mappings
    > might require an explciit fallocate() upfront to achieve
    > preallcoation+prepopulation.

    This means that you want to have two different uses depending on the
    underlying mapping type. MADV_POPULATE_READ seems rather weak for
    anonymous/private mappings. Memory backed by zero pages seems rather
    unhelpful as the PF would need to do all the heavy lifting anyway.
    Or is there any actual usecase when this is desirable?

    So the split into these two modes seems more like gup interface
    shortcomings bubbling up to the interface. I do expect userspace only
    cares about pre-faulting the address range. No matter what the backing
    storage is.

    Or do I still misunderstand all the usecases?
    --
    Michal Hocko
    SUSE Labs

    \
     
     \ /
      Last update: 2021-05-18 12:08    [W:4.505 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site