linux/drivers
Dan Williams 8b3e6cdc53 md: introduce get_priority_stripe() to improve raid456 write performance
Improve write performance by preventing the delayed_list from dumping all its
stripes onto the handle_list in one shot.  Delayed stripes are now further
delayed by being held on the 'hold_list'.  The 'hold_list' is bypassed when:

  * a STRIPE_IO_STARTED stripe is found at the head of 'handle_list'
  * 'handle_list' is empty and i/o is being done to satisfy full stripe-width
    write requests
  * 'bypass_count' is less than 'bypass_threshold'.  By default the threshold
    is 1, i.e. every other stripe handled is a preread stripe provided the
    top two conditions are false.

Benchmark data:
System: 2x Xeon 5150, 4x SATA, mem=1GB
Baseline: 2.6.24-rc7
Configuration: mdadm --create /dev/md0 /dev/sd[b-e] -n 4 -l 5 --assume-clean
Test1: dd if=/dev/zero of=/dev/md0 bs=1024k count=2048
  * patched:  +33% (stripe_cache_size = 256), +25% (stripe_cache_size = 512)

Test2: tiobench --size 2048 --numruns 5 --block 4096 --block 131072 (XFS)
  * patched: +13%
  * patched + preread_bypass_threshold = 0: +37%

Changes since v1:
* reduce bypass_threshold from (chunk_size / sectors_per_chunk) to (1) and
  make it configurable.  This defaults to fairness and modest performance
  gains out of the box.
Changes since v2:
* [neilb@suse.de]: kill STRIPE_PRIO_HI and preread_needed as they are not
  necessary, the important change was clearing STRIPE_DELAYED in
  add_stripe_bio and this has been moved out to make_request for the hang
  fix.
* [neilb@suse.de]: simplify get_priority_stripe
* [dan.j.williams@intel.com]: reset the bypass_count when ->hold_list is
  sampled empty (+11%)
* [dan.j.williams@intel.com]: decrement the bypass_count at the detection
  of stripes being naturally promoted off of hold_list +2%.  Note, resetting
  bypass_count instead of decrementing on these events yields +4% but that is
  probably too aggressive.
Changes since v3:
* cosmetic fixups

Tested-by: James W. Laferriere <babydr@baby-dragons.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-28 08:58:42 -07:00
..
acorn/char
acpi drivers/acpi/thermal.c: fix build with CONFIG_DMI=n 2008-04-28 08:58:30 -07:00
amba
ata pata_bf54x: decrease count first. 2008-04-25 01:26:28 -04:00
atm drivers/atm: use time_before, time_before_eq, etc 2008-04-19 18:14:50 -07:00
auxdisplay
base bus_remove_device: be more careful about incomplete initialization 2008-04-22 17:40:36 -07:00
block return pfn from direct_access, for XIP 2008-04-28 08:58:23 -07:00
bluetooth hci_usb: remove code obfuscation 2008-04-19 18:17:26 -07:00
cdrom cdrom: use kmalloced buffers instead of buffers on stack 2008-04-21 09:50:08 +02:00
char VT notifier extension for accessibility 2008-04-28 08:58:32 -07:00
clocksource
connector
cpufreq
cpuidle
crypto [CRYPTO] padlock-aes: Use generic setkey function 2008-04-21 10:19:34 +08:00
dca
dio
dma DMA engine: typo fixes 2008-04-21 22:38:45 +00:00
edac
eisa
firewire Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
firmware Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6 2008-04-21 15:49:58 -07:00
gpio gpiochip_reserve() 2008-04-28 08:58:34 -07:00
hid Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2008-04-25 12:38:14 -07:00
hwmon
i2c i2c: Fix platform driver hotplug/coldplug 2008-04-22 22:16:49 +02:00
ide ide-tape: remove tape->merge_stage 2008-04-27 15:38:34 +02:00
ieee1394 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6 2008-04-25 12:24:06 -07:00
infiniband RDMA/nes: Remove volatile qualifier from struct nes_hw_cq.cq_vbase 2008-04-23 11:55:45 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2008-04-27 10:10:37 -07:00
isdn isdn: rename CONFIG_AVMB1_COMPAT to not look like a Kconfig variable 2008-04-28 08:58:34 -07:00
leds leds: Add default-on trigger 2008-04-25 00:06:52 +01:00
lguest drivers: Remove unnecessary inclusions of asm/semaphore.h 2008-04-18 22:16:32 -04:00
macintosh mac-hid: fix build after lockdep annotation 2008-04-25 18:57:09 -07:00
mca
md md: introduce get_priority_stripe() to improve raid456 write performance 2008-04-28 08:58:42 -07:00
media mm: remove nopage 2008-04-28 08:58:18 -07:00
memstick memstick: convert struct class_device to struct device 2008-04-19 19:10:29 -07:00
message SCSI: convert struct class_device to struct device 2008-04-19 19:10:33 -07:00
mfd mfd: use shorter set_current_state() 2008-04-28 08:58:32 -07:00
misc Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-04-27 11:25:00 -07:00
mmc mmc: sdio_ops.c should #include "sdio_ops.h" 2008-04-18 20:05:33 +02:00
mtd [MTD] m25p80: Add Support for ATMEL AT25DF641 64-Megabit SPI Flash 2008-04-25 09:14:23 +01:00
net Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2008-04-27 10:10:14 -07:00
nubus
of [POWERPC] drivers/of/of_i2c.c: Add MODULE_LICENSE 2008-04-24 20:58:01 +10:00
oprofile oprofile: change cpu_buffer from array to per_cpu variable 2008-04-28 08:58:31 -07:00
parisc PCI: remove parisc consumer of the pci global_list 2008-04-20 21:47:01 -07:00
parport avr32: don't offer PARPORT_PC 2008-04-19 20:40:10 -04:00
pci intel-iommu.c: dma ops fix 2008-04-24 23:15:43 +02:00
pcmcia [ARM] pxa: fix 0e623941be 2008-04-21 12:52:03 +01:00
pnp pnpacpi: fix potential corruption on "pnpacpi: exceeded the max number of IRQ resources 2" 2008-04-23 12:22:13 -07:00
power
ps3
rapidio
rtc rtc: replace remaining __FUNCTION__ occurrences 2008-04-28 08:58:17 -07:00
s390 return pfn from direct_access, for XIP 2008-04-28 08:58:23 -07:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-04-27 11:25:00 -07:00
serial atmel_serial: remove duplicated macro definition 2008-04-28 08:58:30 -07:00
sh
sn
spi spi: spi_imx updates 2008-04-28 08:58:31 -07:00
ssb ssb: Fix all-ones boardflags 2008-04-23 21:25:35 -04:00
tc
telephony
thermal acpi thermal trip points increased to 12 2008-04-15 19:35:41 -07:00
uio UIO: hold a reference to the device's owner while the device is open 2008-04-19 19:10:18 -07:00
usb usb: don't update devnum for wusb devices 2008-04-24 21:16:59 -07:00
video video: replace remaining __FUNCTION__ occurrences 2008-04-28 08:58:42 -07:00
virtio
w1
watchdog Convert asm/semaphore.h users to linux/semaphore.h 2008-04-18 22:22:54 -04:00
xen xen: add balloon driver 2008-04-24 23:57:33 +02:00
zorro
Kconfig xen: add balloon driver 2008-04-24 23:57:33 +02:00
Makefile