linux/drivers
Nick Piggin 35a82d1a53 [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>
2005-06-23 09:45:18 -07:00
..
acorn [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
acpi [PATCH] smp_processor_id() cleanup 2005-06-21 18:46:13 -07:00
atm
base [PATCH] driver core: Fix up the device_attach() error handling in bus_add_device() 2005-06-22 23:01:10 -07:00
block [PATCH] optimise loop driver a bit 2005-06-23 09:45:18 -07:00
bluetooth
cdrom
char [PATCH] mips: add vr41xx gpio support 2005-06-21 18:46:32 -07:00
cpufreq [PATCH] sysfs: (rest) if show/store is missing return -EIO 2005-06-20 15:15:03 -07:00
crypto
dio [PATCH] Driver Core: drivers/base - drivers/i2c/chips/adm1026.c: update device attribute callbacks 2005-06-20 15:15:32 -07:00
eisa [PATCH] Driver Core: drivers/base - drivers/i2c/chips/adm1026.c: update device attribute callbacks 2005-06-20 15:15:32 -07:00
fc4 fc4/fc: fix warnings and errors related to recent SCSI EH updates 2005-06-19 21:47:56 -04:00
firmware [PATCH] sysfs: (rest) if show/store is missing return -EIO 2005-06-20 15:15:03 -07:00
i2c [PATCH] I2C: fix ds1374 build 2005-06-21 21:55:00 -07:00
ide [PATCH] NUMA aware block device control structure allocation 2005-06-23 09:45:09 -07:00
ieee1394 [PATCH] Driver Core: drivers/i2c/chips/w83781d.c - drivers/s390/block/dcssblk.c: update device attribute callbacks 2005-06-20 15:15:34 -07:00
infiniband [PATCH] sysfs: (rest) if show/store is missing return -EIO 2005-06-20 15:15:03 -07:00
input [PATCH] smp_processor_id() cleanup 2005-06-21 18:46:13 -07:00
isdn [PATCH] class: convert drivers/* to use the new class api instead of class_simple 2005-06-20 15:15:09 -07:00
macintosh [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
mca [PATCH] Driver Core: drivers/i2c/chips/w83781d.c - drivers/s390/block/dcssblk.c: update device attribute callbacks 2005-06-20 15:15:34 -07:00
md [PATCH] create a kstrdup library function 2005-06-23 09:45:18 -07:00
media [PATCH] I2C: Merge unused address lists in some video drivers 2005-06-21 21:51:49 -07:00
message [PATCH] Driver Core: drivers/i2c/chips/w83781d.c - drivers/s390/block/dcssblk.c: update device attribute callbacks 2005-06-20 15:15:34 -07:00
misc [PATCH] ibmasm driver: fix race in command refcount logic 2005-06-21 19:07:35 -07:00
mmc [PATCH] Driver Core: drivers/i2c/chips/w83781d.c - drivers/s390/block/dcssblk.c: update device attribute callbacks 2005-06-20 15:15:34 -07:00
mtd
net Merge 'misc-fixes' branch of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6 2005-06-23 09:25:04 -07:00
nubus
oprofile [PATCH] smp_processor_id() cleanup 2005-06-21 18:46:13 -07:00
parisc
parport [PATCH] create a kstrdup library function 2005-06-23 09:45:18 -07:00
pci [PATCH] PCI: fix show_modalias() function due to attribute change 2005-06-20 15:28:51 -07:00
pcmcia [PATCH] m32r: Update m32r_cfc.[ch] to support Mappi-III platform 2005-06-21 19:07:30 -07:00
pnp [PATCH] Driver Core: drivers/i2c/chips/w83781d.c - drivers/s390/block/dcssblk.c: update device attribute callbacks 2005-06-20 15:15:34 -07:00
s390 [PATCH] s390: cio max channels checks 2005-06-21 19:07:32 -07:00
sbus
scsi [PATCH] megaraid build fix 2005-06-21 18:46:11 -07:00
serial [PATCH] ioc4: PCI bus speed detection 2005-06-21 18:46:32 -07:00
sh [PATCH] Driver Core: drivers/s390/net/qeth_sys.c - drivers/usb/gadget/pxa2xx_udc.c: update device attribute callbacks 2005-06-20 15:15:35 -07:00
sn [PATCH] ioc4: PCI bus speed detection 2005-06-21 18:46:32 -07:00
tc
telephony
usb [PATCH] USB: fix hid core to return proper error code from probe 2005-06-22 23:01:09 -07:00
video [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
w1 [PATCH] w1: fix compiler warnings 2005-06-21 21:43:12 -07:00
zorro [PATCH] Driver Core: drivers/usb/input/aiptek.c - drivers/zorro/zorro-sysfs.c: update device attribute callbacks 2005-06-20 15:15:35 -07:00
Kconfig [PATCH] ioc4: CONFIG split 2005-06-21 18:46:32 -07:00
Makefile [PATCH] ioc4: CONFIG split 2005-06-21 18:46:32 -07:00