• Alexander Duyck's avatar
    async: Add support for queueing on specific NUMA node · 6be9238e
    Alexander Duyck authored
    Introduce four new variants of the async_schedule_ functions that allow
    scheduling on a specific NUMA node.
    
    The first two functions are async_schedule_near and
    async_schedule_near_domain end up mapping to async_schedule and
    async_schedule_domain, but provide NUMA node specific functionality. They
    replace the original functions which were moved to inline function
    definitions that call the new functions while passing NUMA_NO_NODE.
    
    The second two functions are async_schedule_dev and
    async_schedule_dev_domain which provide NUMA specific functionality when
    passing a device as the data member and that device has a NUMA node other
    than NUMA_NO_NODE.
    
    The main motivation behind this is to address the need to be able to
    schedule device specific init work on specific NUMA nodes in order to
    improve performance of memory initialization.
    
    I have seen a significant improvement in initialziation time for persistent
    memory as a result of this approach. In the case of 3TB of memory on a
    single node the initialization time in the worst case went from 36s down to
    about 26s for a 10s improvement. As such the data shows a general benefit
    for affinitizing the async work to the node local to the device.
    Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
    Reviewed-by: default avatarDan Williams <dan.j.williams@intel.com>
    Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6be9238e
async.c 10.4 KB