• Jens Axboe's avatar
    block: pre-allocate requests if plug is started and is a batch · 47c122e3
    Jens Axboe authored
    The caller typically has a good (or even exact) idea of how many requests
    it needs to submit. We can make the request/tag allocation a lot more
    efficient if we just allocate N requests/tags upfront when we queue the
    first bio from the batch.
    
    Provide a new plug start helper that allows the caller to specify how many
    IOs are expected. This sets plug->nr_ios, and we can use that for smarter
    request allocation. The plug provides a holding spot for requests, and
    request allocation will check it before calling into the normal request
    allocation path.
    
    The blk_finish_plug() is called, check if there are unused requests and
    free them. This should not happen in normal operations. The exception is
    if we get merging, then we may be left with requests that need freeing
    when done.
    
    This raises the per-core performance on my setup from ~5.8M to ~6.1M
    IOPS.
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    47c122e3
blk-core.c 47.6 KB