All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/55] Convert skd driver to blk-mq
@ 2017-08-17 20:12 Bart Van Assche
  2017-08-17 20:12 ` [PATCH 01/55] block: Relax a check in blk_start_queue() Bart Van Assche
                   ` (56 more replies)
  0 siblings, 57 replies; 60+ messages in thread
From: Bart Van Assche @ 2017-08-17 20:12 UTC (permalink / raw)
  To: Jens Axboe
  Cc: linux-block, Christoph Hellwig, Damien Le Moal, Akhil Bhansali,
	Bart Van Assche

Hello Jens,

As you know all existing single queue block drivers have to be converted
to blk-mq before the single queue block layer can be removed. Hence this
patch series that converts the skd (sTec s1120) driver to blk-mq. As the
following performance numbers show, this patch series does not affect
performance of the skd driver significantly:

======================================================================
sTec Measurements
===================
Kernel module configuration
...........................
$ cat /etc/modprobe.d/skd.conf
options skd skd_max_queue_depth=200 skd_isr_type=1

blk-sq driver
.............
Kernel: 4.11.10-300.fc26.x86_64
$ (cd /sys/block/skd*/queue && grep -aH '' add_random hw_sector_size max_segments nr_requests rotational rq_affinity scheduler write_cache)
add_random:0
hw_sector_size:512
max_segments:256
nr_requests:128
rotational:0
rq_affinity:2
scheduler:[noop] deadline cfq
write_cache:write back

$ ~bart/software/tools/measure-latency /dev/skd* 512 |&
  tee measurements.txt
I/O pattern: randread
     lat (usec): min=16, max=550, avg=88.33, stdev=14.85
I/O pattern: randwrite
     lat (usec): min=20, max=5096, avg=26.35, stdev=56.03
$ for opt in "" "-w"; do for s in 512 4096 65536; do \
  ~bart/software/tools/max-iops $opt -b$s -j1 /dev/skd*; done; done |&
  tee measurements.txt
   read: IOPS=103k, BW=50.1MiB/s (52.6MB/s)(3006MiB/60002msec)
   read: IOPS=81.4k, BW=318MiB/s (333MB/s)(18.7GiB/60003msec)
   read: IOPS=15.7k, BW=978MiB/s (1026MB/s)(57.4GiB/60015msec)
  write: IOPS=62.4k, BW=30.5MiB/s (31.1MB/s)(1826MiB/60004msec)
  write: IOPS=68.8k, BW=266MiB/s (279MB/s)(15.6GiB/60004msec)
  write: IOPS=13.9k, BW=818MiB/s (858MB/s)(47.1GiB/60012msec)

blk-mq driver
.............
Kernel: 4.13.0-rc2+
$ uname -r
4.13.0-rc2+
$ (cd /sys/block/skd*/queue && grep -aH '' add_random hw_sector_size max_segments nr_requests rotational rq_affinity scheduler write_cache)
add_random:0
hw_sector_size:512
max_segments:256
nr_requests:100
rotational:0
rq_affinity:2
scheduler:[none]
write_cache:write back

$ ~bart/software/tools/measure-latency /dev/skd* 512 |&
  tee measurements.txt
I/O pattern: randread
     lat (usec): min=18, max=297, avg=91.02, stdev=13.16
I/O pattern: randwrite
     lat (usec): min=20, max=4680, avg=26.96, stdev=54.80
$ for opt in "" "-w"; do for s in 512 4096 65536; do \
  ~bart/software/tools/max-iops $opt -b$s -j1 /dev/skd*; done; done |&
  tee measurements.txt
   read: IOPS=101k, BW=49.4MiB/s (51.8MB/s)(2959MiB/60002msec)
   read: IOPS=83.3k, BW=325MiB/s (341MB/s)(19.6GiB/60003msec)
   read: IOPS=15.7k, BW=977MiB/s (1024MB/s)(57.3GiB/60019msec)
  write: IOPS=63.2k, BW=30.8MiB/s (32.3MB/s)(1846MiB/60003msec)
  write: IOPS=70.3k, BW=274MiB/s (288MB/s)(16.9GiB/60003msec)
  write: IOPS=13.2k, BW=823MiB/s (863MB/s)(48.3GiB/60012msec)
======================================================================

Please consider this patch series for kernel v4.14.

Thanks,

Bart.

Bart Van Assche (55):
  block: Relax a check in blk_start_queue()
  skd: Avoid that module unloading triggers a use-after-free
  skd: Submit requests to firmware before triggering the doorbell
  skd: Switch to GPLv2
  skd: Update maintainer information
  skd: Remove unneeded #include directives
  skd: Remove ESXi code
  skd: Remove unnecessary blank lines
  skd: Avoid that gcc 7 warns about fall-through when building with W=1
  skd: Fix spelling in a source code comment
  skd: Fix a function name in a comment
  skd: Remove set-but-not-used local variables
  skd: Remove a set-but-not-used variable from struct skd_device
  skd: Remove useless barrier() calls
  skd: Switch from the pr_*() to the dev_*() logging functions
  skd: Fix endianness annotations
  skd: Document locking assumptions
  skd: Introduce the symbolic constant SKD_MAX_REQ_PER_MSG
  skd: Introduce SKD_SKCOMP_SIZE
  skd: Fix size argument in skd_free_skcomp()
  skd: Reorder the code in skd_process_request()
  skd: Simplify the code for deciding whether or not to send a FIT msg
  skd: Simplify the code for allocating DMA message buffers
  skd: Use a structure instead of hardcoding structure offsets
  skd: Check structure sizes at build time
  skd: Use __packed only when needed
  skd: Make the skd_isr() code more brief
  skd: Use ARRAY_SIZE() where appropriate
  skd: Simplify the code for handling data direction
  skd: Remove superfluous initializations from
    skd_isr_completion_posted()
  skd: Drop second argument of skd_recover_requests()
  skd: Use for_each_sg()
  skd: Remove a redundant init_timer() call
  skd: Remove superfluous occurrences of the 'volatile' keyword
  skd: Use kcalloc() instead of kzalloc() with multiply
  skb: Use symbolic names for SCSI opcodes
  skd: Move a function definition
  skd: Rework request failing code path
  skd: Convert explicit skd_request_fn() calls
  skd: Remove SG IO support
  skd: Remove dead code
  skd: Initialize skd_special_context.req.n_sg to one
  skd: Enable request tags for the block layer queue
  skd: Convert several per-device scalar variables into atomics
  skd: Introduce skd_process_request()
  skd: Split skd_recover_requests()
  skd: Move skd_free_sg_list() up
  skd: Coalesce struct request and struct skd_request_context
  skd: Convert to blk-mq
  skd: Switch to block layer timeout mechanism
  skd: Remove skd_device.in_flight
  skd: Reduce memory usage
  skd: Remove several local variables
  skd: Optimize locking
  skd: Bump driver version

 MAINTAINERS               |    6 +
 block/blk-core.c          |    2 +-
 drivers/block/skd_main.c  | 3196 ++++++++++++---------------------------------
 drivers/block/skd_s1120.h |   38 +-
 4 files changed, 846 insertions(+), 2396 deletions(-)

-- 
2.14.0

^ permalink raw reply	[flat|nested] 60+ messages in thread

end of thread, other threads:[~2017-08-18 15:05 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-17 20:12 [PATCH 00/55] Convert skd driver to blk-mq Bart Van Assche
2017-08-17 20:12 ` [PATCH 01/55] block: Relax a check in blk_start_queue() Bart Van Assche
2017-08-17 20:12 ` [PATCH 02/55] skd: Avoid that module unloading triggers a use-after-free Bart Van Assche
2017-08-17 20:12 ` [PATCH 03/55] skd: Submit requests to firmware before triggering the doorbell Bart Van Assche
2017-08-17 20:12 ` [PATCH 04/55] skd: Switch to GPLv2 Bart Van Assche
2017-08-17 20:12 ` [PATCH 05/55] skd: Update maintainer information Bart Van Assche
2017-08-17 20:12 ` [PATCH 06/55] skd: Remove unneeded #include directives Bart Van Assche
2017-08-17 20:12 ` [PATCH 07/55] skd: Remove ESXi code Bart Van Assche
2017-08-17 20:12 ` [PATCH 08/55] skd: Remove unnecessary blank lines Bart Van Assche
2017-08-17 20:12 ` [PATCH 09/55] skd: Avoid that gcc 7 warns about fall-through when building with W=1 Bart Van Assche
2017-08-17 20:12 ` [PATCH 10/55] skd: Fix spelling in a source code comment Bart Van Assche
2017-08-17 20:12 ` [PATCH 11/55] skd: Fix a function name in a comment Bart Van Assche
2017-08-17 20:12 ` [PATCH 12/55] skd: Remove set-but-not-used local variables Bart Van Assche
2017-08-17 20:12 ` [PATCH 13/55] skd: Remove a set-but-not-used variable from struct skd_device Bart Van Assche
2017-08-17 20:12 ` [PATCH 14/55] skd: Remove useless barrier() calls Bart Van Assche
2017-08-17 20:12 ` [PATCH 15/55] skd: Switch from the pr_*() to the dev_*() logging functions Bart Van Assche
2017-08-17 20:12 ` [PATCH 16/55] skd: Fix endianness annotations Bart Van Assche
2017-08-17 20:13 ` [PATCH 17/55] skd: Document locking assumptions Bart Van Assche
2017-08-17 20:13 ` [PATCH 18/55] skd: Introduce the symbolic constant SKD_MAX_REQ_PER_MSG Bart Van Assche
2017-08-17 20:13 ` [PATCH 19/55] skd: Introduce SKD_SKCOMP_SIZE Bart Van Assche
2017-08-17 20:13 ` [PATCH 20/55] skd: Fix size argument in skd_free_skcomp() Bart Van Assche
2017-08-17 20:13 ` [PATCH 21/55] skd: Reorder the code in skd_process_request() Bart Van Assche
2017-08-17 20:13 ` [PATCH 22/55] skd: Simplify the code for deciding whether or not to send a FIT msg Bart Van Assche
2017-08-17 20:13 ` [PATCH 23/55] skd: Simplify the code for allocating DMA message buffers Bart Van Assche
2017-08-17 20:13 ` [PATCH 24/55] skd: Use a structure instead of hardcoding structure offsets Bart Van Assche
2017-08-17 20:13 ` [PATCH 25/55] skd: Check structure sizes at build time Bart Van Assche
2017-08-17 20:13 ` [PATCH 26/55] skd: Use __packed only when needed Bart Van Assche
2017-08-17 20:13 ` [PATCH 27/55] skd: Make the skd_isr() code more brief Bart Van Assche
2017-08-17 20:13 ` [PATCH 28/55] skd: Use ARRAY_SIZE() where appropriate Bart Van Assche
2017-08-17 20:13 ` [PATCH 29/55] skd: Simplify the code for handling data direction Bart Van Assche
2017-08-17 20:13 ` [PATCH 30/55] skd: Remove superfluous initializations from skd_isr_completion_posted() Bart Van Assche
2017-08-17 20:13 ` [PATCH 31/55] skd: Drop second argument of skd_recover_requests() Bart Van Assche
2017-08-17 20:13 ` [PATCH 32/55] skd: Use for_each_sg() Bart Van Assche
2017-08-17 20:13 ` [PATCH 33/55] skd: Remove a redundant init_timer() call Bart Van Assche
2017-08-17 20:13 ` [PATCH 34/55] skd: Remove superfluous occurrences of the 'volatile' keyword Bart Van Assche
2017-08-17 20:13 ` [PATCH 35/55] skd: Use kcalloc() instead of kzalloc() with multiply Bart Van Assche
2017-08-17 20:13 ` [PATCH 36/55] skb: Use symbolic names for SCSI opcodes Bart Van Assche
2017-08-17 20:13 ` [PATCH 37/55] skd: Move a function definition Bart Van Assche
2017-08-17 20:13 ` [PATCH 38/55] skd: Rework request failing code path Bart Van Assche
2017-08-17 20:13 ` [PATCH 39/55] skd: Convert explicit skd_request_fn() calls Bart Van Assche
2017-08-17 20:13 ` [PATCH 40/55] skd: Remove SG IO support Bart Van Assche
2017-08-17 20:13 ` [PATCH 41/55] skd: Remove dead code Bart Van Assche
2017-08-17 20:13 ` [PATCH 42/55] skd: Initialize skd_special_context.req.n_sg to one Bart Van Assche
2017-08-17 20:13 ` [PATCH 43/55] skd: Enable request tags for the block layer queue Bart Van Assche
2017-08-17 20:13 ` [PATCH 44/55] skd: Convert several per-device scalar variables into atomics Bart Van Assche
2017-08-17 20:13 ` [PATCH 45/55] skd: Introduce skd_process_request() Bart Van Assche
2017-08-17 20:13 ` [PATCH 46/55] skd: Split skd_recover_requests() Bart Van Assche
2017-08-17 20:13 ` [PATCH 47/55] skd: Move skd_free_sg_list() up Bart Van Assche
2017-08-17 20:13 ` [PATCH 48/55] skd: Coalesce struct request and struct skd_request_context Bart Van Assche
2017-08-17 20:13 ` [PATCH 49/55] skd: Convert to blk-mq Bart Van Assche
2017-08-17 20:13 ` [PATCH 50/55] skd: Switch to block layer timeout mechanism Bart Van Assche
2017-08-17 20:13 ` [PATCH 51/55] skd: Remove skd_device.in_flight Bart Van Assche
2017-08-17 20:13 ` [PATCH 52/55] skd: Reduce memory usage Bart Van Assche
2017-08-17 20:13 ` [PATCH 53/55] skd: Remove several local variables Bart Van Assche
2017-08-17 20:13 ` [PATCH 54/55] skd: Optimize locking Bart Van Assche
2017-08-17 20:13 ` [PATCH 55/55] skd: Bump driver version Bart Van Assche
2017-08-17 20:45   ` Jens Axboe
2017-08-17 20:44 ` [PATCH 00/55] Convert skd driver to blk-mq Jens Axboe
2017-08-18 14:46 ` Jens Axboe
2017-08-18 15:05   ` Bart Van Assche

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.