• Jeff Moyer's avatar
    aio: allocate kiocbs in batches · 080d676d
    Jeff Moyer authored
    In testing aio on a fast storage device, I found that the context lock
    takes up a fair amount of cpu time in the I/O submission path.  The reason
    is that we take it for every I/O submitted (see __aio_get_req).  Since we
    know how many I/Os are passed to io_submit, we can preallocate the kiocbs
    in batches, reducing the number of times we take and release the lock.
    
    In my testing, I was able to reduce the amount of time spent in
    _raw_spin_lock_irq by .56% (average of 3 runs).  The command I used to
    test this was:
    
       aio-stress -O -o 2 -o 3 -r 8 -d 128 -b 32 -i 32 -s 16384 <dev>
    
    I also tested the patch with various numbers of events passed to
    io_submit, and I ran the xfstests aio group of tests to ensure I didn't
    break anything.
    Signed-off-by: default avatarJeff Moyer <jmoyer@redhat.com>
    Cc: Daniel Ehrenberg <dehrenberg@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    080d676d
aio.c 47.7 KB