Paolo Valente
3c395a969a
null_blk: set a separate timer for each command
...
For the Timer IRQ mode (i.e., when command completions are delayed),
there is one timer for each CPU. Each of these timers
. has a completion queue associated with it, containing all the
command completions to be executed when the timer fires;
. is set, and a new completion-to-execute is inserted into its
completion queue, every time the dispatch code for a new command
happens to be executed on the CPU related to the timer.
This implies that, if the dispatch of a new command happens to be
executed on a CPU whose timer has already been set, but has not yet
fired, then the timer is set again, to the completion time of the
newly arrived command. When the timer eventually fires, all its queued
completions are executed.
This way of handling delayed command completions entails the following
problem: if more than one command completion is inserted into the
queue of a timer before the timer fires, then the expiration time for
the timer is moved forward every time each of these completions is
enqueued. As a consequence, only the last completion enqueued enjoys a
correct execution time, while all previous completions are unjustly
delayed until the last completion is executed (and at that time they
are executed all together).
Specifically, if all the above completions are enqueued almost at the
same time, then the problem is negligible. On the opposite end, if
every completion is enqueued a while after the previous completion was
enqueued (in the extreme case, it is enqueued only right before the
timer would have expired), then every enqueued completion, except for
the last one, experiences an inflated delay, proportional to the number
of completions enqueued after it. In the end, commands, and thus I/O
requests, may be completed at an arbitrarily lower rate than the
desired one.
This commit addresses this issue by replacing per-CPU timers with
per-command timers, i.e., by associating an individual timer with each
command.
Signed-off-by: Paolo Valente <paolo.valente@unimore.it>
Signed-off-by: Arianna Avanzini <avanzini@google.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
2015-12-01 10:52:08 -07:00
..
accessibility
acpi
Merge branches 'acpi-smbus', 'acpi-ec' and 'acpi-pci'
2015-11-20 01:22:52 +01:00
amba
android
ata
SCSI misc on 20151113
2015-11-13 20:35:54 -08:00
atm
auxdisplay
base
Merge branch 'pm-sleep'
2015-11-20 01:22:33 +01:00
bcma
block
null_blk: set a separate timer for each command
2015-12-01 10:52:08 -07:00
bluetooth
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-11-10 18:11:41 -08:00
bus
ARM: SoC driver updates for v4.4
2015-11-10 15:00:03 -08:00
cdrom
char
ipmi watchdog : add panic_wdt_timeout parameter
2015-11-16 06:28:43 -06:00
clk
h8300 update for v4.4
2015-11-12 15:26:39 -08:00
clocksource
clocksource: Disallow drivers for ARCH_USES_GETTIMEOFFSET
2015-11-16 19:07:08 +01:00
connector
mm, page_alloc: distinguish between being unable to sleep, unwilling to sleep and avoiding waking kswapd
2015-11-06 17:50:42 -08:00
cpufreq
Merge branches 'pm-cpufreq' and 'acpi-cppc'
2015-11-20 01:22:10 +01:00
cpuidle
crypto
Merge branch 'linus' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
2015-11-17 09:40:05 -08:00
dca
devfreq
dio
dma
dmaengine: at_hdmac: use %pad format string for dma_addr_t
2015-11-16 09:21:05 +05:30
dma-buf
dma-buf/fence: add fence_wait_any_timeout function v2
2015-10-30 01:16:16 -04:00
edac
asm-generic cleanups
2015-11-06 14:22:15 -08:00
eisa
extcon
Merge branches 'ib-extcon-mfd-4.4', 'ib-mfd-i2c-v4.4', 'ib-mfd-power-4.4', 'ib-mfd-regmap-4.4' and 'ib-mfd-regulator-4.4' into ibs-for-mfd-merged
2015-10-26 14:48:22 +00:00
firewire
IEEE 1394 subsystem patch:
2015-11-11 10:21:34 -08:00
firmware
ARM: SoC driver updates for v4.4
2015-11-10 15:00:03 -08:00
fmc
fpga
fpga: socfpga: Fix check of return value of devm_request_irq
2015-10-29 15:20:25 -07:00
gpio
asm-generic cleanups
2015-11-06 14:22:15 -08:00
gpu
Merge tag 'drm-intel-fixes-2015-11-19' of git://anongit.freedesktop.org/drm-intel into drm-fixes
2015-11-20 09:45:31 +10:00
hid
HID: wacom: fixup quirks setup for WACOM_DEVICETYPE_PAD
2015-11-17 00:24:14 +01:00
hsi
hsi: controllers:remove redundant code
2015-10-30 16:10:40 +01:00
hv
drivers/hv: share Hyper-V SynIC constants with userspace
2015-11-04 16:24:33 +01:00
hwmon
hwmon: (scpi) skip unsupported sensors properly
2015-11-16 09:59:50 -08:00
hwspinlock
hwtracing
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2015-11-13 20:04:17 -08:00
i2c
i2c: i801: add Intel Lewisburg device IDs
2015-11-20 16:22:21 +01:00
ide
mm, page_alloc: rename __GFP_WAIT to __GFP_RECLAIM
2015-11-06 17:50:42 -08:00
idle
iio
First set of IIO fixes for the 4.4 cycle.
2015-11-18 13:15:50 -08:00
infiniband
SCSI misc on 20151113
2015-11-13 20:35:54 -08:00
input
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
2015-11-13 21:41:14 -08:00
iommu
s390/pci_dma: handle dma table failures
2015-11-09 09:10:49 +01:00
ipack
irqchip
irqchip/gic: Add save/restore of the active state
2015-11-17 14:25:59 +01:00
isdn
TTY/Serial driver patches for 4.4-rc1
2015-11-04 21:35:12 -08:00
leds
spi: Updates for v4.4
2015-11-05 13:15:12 -08:00
lguest
lightnvm
lightnvm: missing nvm_lock acquire
2015-11-29 14:34:58 -07:00
macintosh
mailbox
mailbox: mailbox-test: avoid reading iomem twice
2015-11-04 14:03:04 +05:30
mcb
mcb: Destroy IDA on module unload
2015-10-29 09:02:16 +09:00
md
dm thin: fix regression in advertised discard limits
2015-11-23 14:54:46 -05:00
media
various: fix pci_set_dma_mask return value checking
2015-11-20 16:17:32 -08:00
memory
ARM: SoC driver updates for v4.4
2015-11-10 15:00:03 -08:00
memstick
message
SCSI queue for 4.4.
2015-11-12 07:06:18 -05:00
mfd
asm-generic cleanups
2015-11-06 14:22:15 -08:00
misc
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2015-11-13 20:04:17 -08:00
mmc
mmc: remove bondage between REQ_META and reliable write
2015-11-09 14:04:52 +01:00
mtd
mtd: nand: fix shutdown/reboot for multi-chip systems
2015-11-16 10:51:39 -08:00
net
various: fix pci_set_dma_mask return value checking
2015-11-20 16:17:32 -08:00
nfc
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-11-10 18:11:41 -08:00
ntb
NTB: fix 32-bit compiler warning
2015-11-08 16:24:43 -05:00
nubus
nvdimm
libnvdimm, pmem: fix size trim in pmem_direct_access()
2015-11-12 09:55:23 -08:00
nvme
lightnvm: unconverted ppa returned in get_bb_tbl
2015-11-29 14:34:58 -07:00
nvmem
of
More power management and ACPI updates for v4.4-rc1
2015-11-12 11:50:33 -08:00
oprofile
parisc
pci: remove pci_dma_supported
2015-11-10 16:32:11 -08:00
parport
pci
Merge branches 'acpi-smbus', 'acpi-ec' and 'acpi-pci'
2015-11-20 01:22:52 +01:00
pcmcia
perf
arm64 updates for 4.4:
2015-11-04 14:47:13 -08:00
phy
phy: qcom-ufs: fix build error when the component is built as a module
2015-11-09 17:44:24 -05:00
pinctrl
This is the bulk of GPIO changes for v4.4:
2015-11-02 12:59:12 -08:00
platform
platform/chrome: Branch for v4.4
2015-11-13 21:53:18 -08:00
pnp
power
- New Device Support
2015-11-06 10:23:50 -08:00
powercap
pps
ps3
ptp
pwm
pwm: Changes for v4.4-rc1
2015-11-11 09:16:10 -08:00
rapidio
ras
regulator
spi: Updates for v4.4
2015-11-05 13:15:12 -08:00
remoteproc
reset
rpmsg
rtc
RTC for 4.4
2015-11-10 10:01:21 -08:00
s390
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
2015-11-18 08:59:29 -08:00
sbus
scsi
SCSI misc on 20151113
2015-11-13 20:35:54 -08:00
sfi
sh
drivers: sh: Get rid of CONFIG_ARCH_SHMOBILE_MULTI
2015-11-17 02:12:46 +09:00
sn
soc
ARM: SoC driver updates for v4.4
2015-11-10 15:00:03 -08:00
spi
Merge remote-tracking branches 'spi/topic/s3c64xx', 'spi/topic/ti-qspi' and 'spi/topic/txx9' into spi-next
2015-11-04 11:02:16 +00:00
spmi
char/misc drivers for 4.4-rc1
2015-11-04 22:15:15 -08:00
ssb
ssb: add Kconfig entry for compiling SoC related code
2015-10-28 21:05:21 +02:00
staging
Revert "Staging: wilc1000: coreconfigurator: Drop unneeded wrapper functions"
2015-11-18 13:22:44 -08:00
target
SCSI misc on 20151113
2015-11-13 20:35:54 -08:00
tc
thermal
thermal: rockchip: fix compile error
2015-11-11 19:52:39 -08:00
thunderbolt
tty
serial: export fsl8250_handle_irq
2015-11-20 16:19:54 -08:00
uio
usb
usblp: do not set TASK_INTERRUPTIBLE before lock
2015-11-19 16:31:42 -08:00
uwb
driver core update for 4.4-rc1
2015-11-04 21:50:37 -08:00
vfio
VFIO updates for v4.4-rc1
2015-11-13 17:05:32 -08:00
vhost
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2015-11-13 20:04:17 -08:00
video
fbdev changes for 4.4
2015-11-10 10:00:09 -08:00
virt
virtio
vlynq
vme
char/misc drivers for 4.4-rc1
2015-11-04 22:15:15 -08:00
w1
power supply and reset changes for the v4.4 series
2015-11-05 12:28:15 -08:00
watchdog
Merge git://www.linux-watchdog.org/linux-watchdog
2015-11-10 10:11:12 -08:00
xen
Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
2015-11-13 20:04:17 -08:00
zorro
Kconfig
char/misc drivers for 4.4-rc1
2015-11-04 22:15:15 -08:00
Makefile
null_blk: register as a LightNVM device
2015-11-16 15:22:28 -07:00