Skip to content
  • Andrea Arcangeli's avatar
    userfaultfd: wake pending userfaults · ba85c702
    Andrea Arcangeli authored
    
    
    This is an optimization but it's a userland visible one and it affects
    the API.
    
    The downside of this optimization is that if you call poll() and you
    get POLLIN, read(ufd) may still return -EAGAIN. The blocked userfault
    may be waken by a different thread, before read(ufd) comes
    around. This in short means that poll() isn't really usable if the
    userfaultfd is opened in blocking mode.
    
    userfaults won't wait in "pending" state to be read anymore and any
    UFFDIO_WAKE or similar operations that has the objective of waking
    userfaults after their resolution, will wake all blocked userfaults
    for the resolved range, including those that haven't been read() by
    userland yet.
    
    The behavior of poll() becomes not standard, but this obviates the
    need of "spurious" UFFDIO_WAKE and it lets the userland threads to
    restart immediately without requiring an UFFDIO_WAKE. This is even
    more significant in case of repeated faults on the same address from
    multiple threads.
    
    This optimization is justified by the measurement that the number of
    spurious UFFDIO_WAKE accounts for 5% and 10% of the total
    userfaults for heavy workloads, so it's worth optimizing those away.
    
    Signed-off-by: default avatarAndrea Arcangeli <aarcange@redhat.com>
    Acked-by: default avatarPavel Emelyanov <xemul@parallels.com>
    Cc: Sanidhya Kashyap <sanidhya.gatech@gmail.com>
    Cc: zhang.zhanghailiang@huawei.com
    Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
    Cc: Andres Lagar-Cavilla <andreslc@google.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Peter Feiner <pfeiner@google.com>
    Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: "Huangpeng (Peter)" <peter.huangpeng@huawei.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ba85c702