summaryrefslogtreecommitdiffstats
path: root/include/linux/loop.h
diff options
context:
space:
mode:
authorNick Piggin2005-06-23 09:09:06 +0200
committerLinus Torvalds2005-06-23 18:45:18 +0200
commit35a82d1a53e1a9ad54efafcc940f9335beaed5c3 (patch)
tree776d5b01970c5ce3e2c9fd4a2c4cf2168a0afa3c /include/linux/loop.h
parent[PATCH] CON_CONSDEV bit not set correctly on last console (diff)
downloadkernel-qcow2-linux-35a82d1a53e1a9ad54efafcc940f9335beaed5c3.tar.gz
kernel-qcow2-linux-35a82d1a53e1a9ad54efafcc940f9335beaed5c3.tar.xz
kernel-qcow2-linux-35a82d1a53e1a9ad54efafcc940f9335beaed5c3.zip
[PATCH] optimise loop driver a bit
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 After: 0.07user 2.34system 0:01.68elapsed 143%CPU (0avgtext+0avgdata 0maxresident)k 0.06user 2.37system 0:01.68elapsed 144%CPU (0avgtext+0avgdata 0maxresident)k 0.06user 2.39system 0:01.68elapsed 145%CPU (0avgtext+0avgdata 0maxresident)k 0.06user 2.36system 0:01.68elapsed 144%CPU (0avgtext+0avgdata 0maxresident)k 0.06user 2.42system 0:01.68elapsed 147%CPU (0avgtext+0avgdata 0maxresident)k Signed-off-by: Nick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux/loop.h')
-rw-r--r--include/linux/loop.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/loop.h b/include/linux/loop.h
index 8220d9c9da00..53fa51595443 100644
--- a/include/linux/loop.h
+++ b/include/linux/loop.h
@@ -61,7 +61,7 @@ struct loop_device {
struct semaphore lo_sem;
struct semaphore lo_ctl_mutex;
struct semaphore lo_bh_mutex;
- atomic_t lo_pending;
+ int lo_pending;
request_queue_t *lo_queue;
};