• Anish Moorthy's avatar
    KVM: selftests: Use EPOLL in userfaultfd_util reader threads · 0cba6442
    Anish Moorthy authored
    With multiple reader threads POLLing a single UFFD, the demand paging test
    suffers from the thundering herd problem: performance degrades as the
    number of reader threads is increased. Solve this issue [1] by switching
    the the polling mechanism to EPOLL + EPOLLEXCLUSIVE.
    
    Also, change the error-handling convention of uffd_handler_thread_fn.
    Instead of just printing errors and returning early from the polling
    loop, check for them via TEST_ASSERT(). "return NULL" is reserved for a
    successful exit from uffd_handler_thread_fn, i.e. one triggered by a
    write to the exit pipe.
    
    Performance samples generated by the command in [2] are given below.
    
    Num Reader Threads, Paging Rate (POLL), Paging Rate (EPOLL)
    1      249k      185k
    2      201k      235k
    4      186k      155k
    16     150k      217k
    32     89k       198k
    
    [1] Single-vCPU performance does suffer somewhat.
    [2] ./demand_paging_test -u MINOR -s shmem -v 4 -o -r <num readers>
    Signed-off-by: default avatarAnish Moorthy <amoorthy@google.com>
    Acked-by: default avatarJames Houghton <jthoughton@google.com>
    Link: https://lore.kernel.org/r/20240215235405.368539-13-amoorthy@google.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
    0cba6442
userfaultfd_util.c 5.82 KB