Shaohua Li
9dedf60313
md/raid1: read balance chooses idlest disk for SSD
...
SSD hasn't spindle, distance between requests means nothing. And the original
distance based algorithm sometimes can cause severe performance issue for SSD
raid.
Considering two thread groups, one accesses file A, the other access file B.
The first group will access one disk and the second will access the other disk,
because requests are near from one group and far between groups. In this case,
read balance might keep one disk very busy but the other relative idle. For
SSD, we should try best to distribute requests to as many disks as possible.
There isn't spindle move penality anyway.
With below patch, I can see more than 50% throughput improvement sometimes
depending on workloads.
The only exception is small requests can be merged to a big request which
typically can drive higher throughput for SSD too. Such small requests are
sequential reads. Unlike hard disk, sequential read which can't be merged (for
example direct IO, or read without readahead) can be ignored for SSD. Again
there is no spindle move penality. readahead dispatches small requests and such
requests can be merged.
Last patch can help detect sequential read well, at least if concurrent read
number isn't greater than raid disk number. In that case, distance based
algorithm doesn't work well too.
V2: For hard disk and SSD mixed raid, doesn't use distance based algorithm for
random IO too. This makes the algorithm generic for raid with SSD.
Signed-off-by: Shaohua Li <shli@fusionio.com>
Signed-off-by: NeilBrown <neilb@suse.de>
2012-07-31 10:03:53 +10:00
..
accessibility
acpi
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
2012-07-14 12:44:26 -07:00
amba
ata
Viresh has moved
2012-06-20 14:39:36 -07:00
atm
auxdisplay
base
PM / Sleep: Prevent waiting forever on asynchronous suspend after abort
2012-06-24 23:31:09 +02:00
bcma
bcma: fix null pointer in bcma_core_pci_irq_ctl
2012-06-08 13:47:07 -04:00
block
blk: fix wrong idr_pre_get() error check in loop.c
2012-07-14 15:39:58 -07:00
bluetooth
Bluetooth: btmrvl: Do not send vendor events to bluetooth stack
2012-06-19 00:19:11 -03:00
cdrom
char
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
2012-06-18 12:20:36 -07:00
clk
clk: fix parent validation in __clk_set_parent()
2012-07-03 12:05:14 -07:00
clocksource
clocksource: sh_tmu: Use clockevents_config_and_register().
2012-06-11 17:10:16 +09:00
connector
cpufreq
cpuidle
crypto
dca
devfreq
dio
dma
Merge branch 'fixes' of git://git.infradead.org/users/vkoul/slave-dma
2012-06-20 22:12:52 -07:00
edac
edac: Do alignment logic properly in edac_align_ptr()
2012-06-11 12:43:16 -03:00
eisa
extcon
extcon: max8997: Add missing kfree for info->edev in max8997_muic_remove()
2012-06-18 16:30:42 -07:00
firewire
firmware
gpio
gpio/gpio-tps65910: gpio_chip.of_node referenced without CONFIG_OF_GPIO defined
2012-07-10 22:53:31 +02:00
gpu
drm/i915: kick any firmware framebuffers before claiming the gtt
2012-07-03 11:18:48 +01:00
hid
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
2012-07-13 10:33:18 -07:00
hsi
hv
hwmon
hwmon: (it87) Preserve configuration register bits on init
2012-07-12 22:47:37 +02:00
hwspinlock
hwspinlock/core: use global ID to register hwspinlocks on multiple devices
2012-07-07 22:35:30 +03:00
i2c
i2c: Add generic I2C multiplexer using pinctrl API
2012-06-04 16:49:43 +02:00
ide
drivers/ide/ide-cs.c: adjust suspicious bit operation
2012-06-12 15:51:41 -07:00
idle
ieee802154
iio
iio: drop wrong reference from Kconfig
2012-06-14 17:28:46 -07:00
infiniband
Merge branches 'cma' and 'ocrdma' into for-linus
2012-06-24 04:59:59 -07:00
input
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
2012-07-13 10:33:18 -07:00
iommu
iommu/amd: fix type bug in flush code
2012-07-02 12:11:40 +02:00
isdn
leds
leds: heartbeat: fix bug on panic
2012-07-04 15:55:19 +08:00
lguest
macintosh
md
md/raid1: read balance chooses idlest disk for SSD
2012-07-31 10:03:53 +10:00
media
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
2012-07-13 10:29:41 -07:00
memory
memstick
message
Merge branch 'akpm' (Andrew's patch-bomb)
2012-05-31 18:10:18 -07:00
mfd
mfd: Add missing hunk to change palmas irq to clear on read
2012-07-09 00:16:26 +02:00
misc
Merge branch 'akpm' (Andrew's patch-bomb)
2012-07-11 16:06:54 -07:00
mmc
mmc: cd-gpio: pass IRQF_ONESHOT to request_threaded_irq()
2012-07-10 23:03:57 -04:00
mtd
Late MTD fixes for 3.5:
2012-07-13 09:56:26 -07:00
net
e1000e: remove use of IP payload checksum
2012-07-01 00:25:32 -07:00
nfc
nubus
of
ARM: SoC fixes for 3.5-rc
2012-07-11 12:44:25 -07:00
oprofile
oprofile: perf: use NR_CPUS instead or nr_cpumask_bits for static array
2012-06-21 16:15:11 +02:00
parisc
parport
pci
PCI: EHCI: fix crash during suspend on ASUS computers
2012-07-10 09:52:05 -07:00
pcmcia
pinctrl
Merge branch 'akpm' (Andrew's patch-bomb)
2012-06-20 14:41:57 -07:00
platform
drivers/platform/x86/acerhdf.c: correct Boris' mail address
2012-06-07 14:43:55 -07:00
pnp
power
A bunch of fixes for v3.5, nothing extraordinary.
2012-05-31 12:10:15 -07:00
pps
ps3
ptp
rapidio
rapidio/tsi721: add DMA engine support
2012-05-31 17:49:31 -07:00
regulator
regulator: Fix recursive mutex lockdep warning
2012-07-03 20:25:58 +01:00
remoteproc
remoteproc: fix missing CONFIG_FW_LOADER configurations
2012-07-04 11:01:12 +03:00
rpmsg
rpmsg: make sure inflight messages don't invoke just-removed callbacks
2012-07-04 11:51:59 +03:00
rtc
drivers/rtc/rtc-twl.c: fix threaded IRQ to use IRQF_ONESHOT
2012-07-11 16:04:48 -07:00
s390
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
2012-05-31 10:51:10 -07:00
sbus
scsi
[SCSI] bnx2i: Removed the reference to the netdev->base_addr
2012-07-08 09:52:03 +01:00
sfi
sh
sn
spi
SPI: fix over-eager devm_xxx() conversion
2012-06-18 11:27:04 +01:00
ssb
staging
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
2012-06-25 14:53:09 -07:00
target
tcm_fc: Resolve suspicious RCU usage warnings
2012-07-06 12:52:09 -07:00
tc
thermal
tty
tty/hvc_opal: Fix debug function name
2012-07-10 19:16:25 +10:00
uio
usb
MFD Fixes for 3.5
2012-07-13 09:54:26 -07:00
uwb
vhost
vhost: use USER_DS in vhost_worker thread
2012-06-26 21:10:56 -07:00
video
fbdev fixes for 3.5
2012-07-11 16:17:14 -07:00
virt
virtio
virtio-balloon: fix add/get API use
2012-07-09 09:07:22 +09:30
vlynq
vme
w1
watchdog
watchdog: core: fix WDIOC_GETSTATUS return value
2012-06-28 20:40:56 +02:00
xen
Five bug-fixes:
2012-06-15 17:17:15 -07:00
zorro
Kconfig
Makefile