• Qu Wenruo's avatar
    btrfs: Add threshold workqueue based on kernel workqueue · 0bd9289c
    Qu Wenruo authored
    The original btrfs_workers has thresholding functions to dynamically
    create or destroy kthreads.
    
    Though there is no such function in kernel workqueue because the worker
    is not created manually, we can still use the workqueue_set_max_active
    to simulated the behavior, mainly to achieve a better HDD performance by
    setting a high threshold on submit_workers.
    (Sadly, no resource can be saved)
    
    So in this patch, extra workqueue pending counters are introduced to
    dynamically change the max active of each btrfs_workqueue_struct, hoping
    to restore the behavior of the original thresholding function.
    
    Also, workqueue_set_max_active use a mutex to protect workqueue_struct,
    which is not meant to be called too frequently, so a new interval
    mechanism is applied, that will only call workqueue_set_max_active after
    a count of work is queued. Hoping to balance both the random and
    sequence performance on HDD.
    Signed-off-by: default avatarQu Wenruo <quwenruo@cn.fujitsu.com>
    Tested-by: default avatarDavid Sterba <dsterba@suse.cz>
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    0bd9289c
async-thread.c 25.5 KB