• Jens Axboe's avatar
    mm: provide filemap_range_needs_writeback() helper · 63135aa3
    Jens Axboe authored
    Patch series "Improve IOCB_NOWAIT O_DIRECT reads", v3.
    
    An internal workload complained because it was using too much CPU, and
    when I took a look, we had a lot of io_uring workers going to town.
    
    For an async buffered read like workload, I am normally expecting _zero_
    offloads to a worker thread, but this one had tons of them.  I'd drop
    caches and things would look good again, but then a minute later we'd
    regress back to using workers.  Turns out that every minute something
    was reading parts of the device, which would add page cache for that
    inode.  I put patches like these in for our kernel, and the problem was
    solved.
    
    Don't -EAGAIN IOCB_NOWAIT dio reads just because we have page cache
    entries for the given range.  This causes unnecessary work from the
    callers side, when the IO could have been issued totally fine without
    blocking on writeback when there is none.
    
    This patch (of 3):
    
    For O_DIRECT reads/writes, we check if we need to issue a call to
    filemap_write_and_wait_range() to issue and/or wait for writeback for any
    page in the given range.  The existing mechanism just checks for a page in
    the range, which is suboptimal for IOCB_NOWAIT as we'll fallback to the
    slow path (and needing retry) if there's just a clean page cache page in
    the range.
    
    Provide filemap_range_needs_writeback() which tries a little harder to
    check if we actually need to issue and/or wait for writeback in the range.
    
    Link: https://lkml.kernel.org/r/20210224164455.1096727-1-axboe@kernel.dk
    Link: https://lkml.kernel.org/r/20210224164455.1096727-2-axboe@kernel.dkSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    63135aa3
filemap.c 109 KB