• Jens Axboe's avatar
    io-wq: eliminate the need for a manager thread · 685fe7fe
    Jens Axboe authored
    io-wq relies on a manager thread to create/fork new workers, as needed.
    But there's really no strong need for it anymore. We have the following
    cases that fork a new worker:
    
    1) Work queue. This is done from the task itself always, and it's trivial
       to create a worker off that path, if needed.
    
    2) All workers have gone to sleep, and we have more work. This is called
       off the sched out path. For this case, use a task_work items to queue
       a fork-worker operation.
    
    3) Hashed work completion. Don't think we need to do anything off this
       case. If need be, it could just use approach 2 as well.
    
    Part of this change is incrementing the running worker count before the
    fork, to avoid cases where we observe we need a worker and then queue
    creation of one. Then new work comes in, we fork a new one. That last
    queue operation should have waited for the previous worker to come up,
    it's quite possible we don't even need it. Hence move the worker running
    from before we fork it off to more efficiently handle that case.
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    685fe7fe
io-wq.c 25.6 KB