• Jens Axboe's avatar
    io-wq: provide a way to limit max number of workers · 2e480058
    Jens Axboe authored
    io-wq divides work into two categories:
    
    1) Work that completes in a bounded time, like reading from a regular file
       or a block device. This type of work is limited based on the size of
       the SQ ring.
    
    2) Work that may never complete, we call this unbounded work. The amount
       of workers here is just limited by RLIMIT_NPROC.
    
    For various uses cases, it's handy to have the kernel limit the maximum
    amount of pending workers for both categories. Provide a way to do with
    with a new IORING_REGISTER_IOWQ_MAX_WORKERS operation.
    
    IORING_REGISTER_IOWQ_MAX_WORKERS takes an array of two integers and sets
    the max worker count to what is being passed in for each category. The
    old values are returned into that same array. If 0 is being passed in for
    either category, it simply returns the current value.
    
    The value is capped at RLIMIT_NPROC. This actually isn't that important
    as it's more of a hint, if we're exceeding the value then our attempt
    to fork a new worker will fail. This happens naturally already if more
    than one node is in the system, as these values are per-node internally
    for io-wq.
    Reported-by: default avatarJohannes Lundberg <johalun0@gmail.com>
    Link: https://github.com/axboe/liburing/issues/420Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    2e480058
io-wq.c 28.2 KB