• Nick Piggin's avatar
    [PATCH] optimise loop driver a bit · 35a82d1a
    Nick Piggin authored
    Looks like locking can be optimised quite a lot.  Increase lock widths
    slightly so lo_lock is taken fewer times per request.  Also it was quite
    trivial to cover lo_pending with that lock, and remove the atomic
    requirement.  This also makes memory ordering explicitly correct, which is
    nice (not that I particularly saw any mem ordering bugs).
    
    Test was reading 4 250MB files in parallel on ext2-on-tmpfs filesystem (1K
    block size, 4K page size).  System is 2 socket Xeon with HT (4 thread).
    
    intel:/home/npiggin# umount /dev/loop0 ; mount /dev/loop0 /mnt/loop ; /usr/bin/time ./mtloop.sh
    
    Before:
    0.24user 5.51system 0:02.84elapsed 202%CPU (0avgtext+0avgdata 0maxresident)k
    0.19user 5.52system 0:02.88elapsed 198%CPU (0avgtext+0avgdata 0maxresident)k
    0.19user 5.57system 0:02.89elapsed 198%CPU (0avgtext+0avgdata 0maxresident)k
    0.22user 5.51system 0:02.90elapsed 197%CPU (0avgtext+0avgdata 0maxresident)k
    0.19user 5.44system 0:02.91elapsed 193%CPU (0avgtext+0avgdata 0maxresident)k
    
    Af...
    35a82d1a
loop.c 32.3 KB