Sagi Grimberg 40510a639e nvme-tcp: optimize queue io_cpu assignment for multiple queue maps
Currently, queue io_cpu assignment is done sequentially for default,
read and poll queues based on queue id. This causes miss-alignment between
context of CPU initiating I/O and the I/O worker thread processing
queued requests or completions.

Change to modify queue io_cpu assignment to take into account queue
maps offset. Each queue io_cpu will start at zero for each queue map.
This essentially aligns read/poll queues to start over the same range as
default queues.

Testing performed by Mark with:
- ram device (nvmet)
- single CPU core (pinned)
- 100% 4k reads
- engine io_uring (not using sq_thread option)
- hipri flag set

Micro-benchmark results show a net gain of:
- increase of 18%-29% in IOPs
- reduction of 16%-22% in average latency
- reduction of 7%-23% in 99.99% latency

Baseline:
========
QDepth/Batch	| IOPs [k]	| Avg. Lat [us]	| 99.99% Lat [us]
-----------------------------------------------------------------
1/1 		| 32.4		| 30.11		| 50.94
32/8		| 179		| 168.20	| 371

CPU alignment:
=============
QDepth/Batch	| IOPs [k]	| Avg. Lat [us]	| 99.99% Lat [us]
-----------------------------------------------------------------
1/1 		| 38.5		|   25.18	| 39.16
32/8		| 231		|   130.75	| 343

Reported-by: Mark Wunderlich <mark.wunderlich@intel.com>
Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
2020-03-26 04:48:06 +09:00
..
2020-02-28 09:02:18 -08:00
2020-01-29 18:53:37 -08:00
2020-02-06 06:11:50 +00:00
2020-02-08 14:04:19 -08:00
2020-02-29 09:58:47 -06:00
2020-02-08 14:17:27 -08:00
2020-02-08 14:17:27 -08:00
2020-02-08 14:04:19 -08:00
2020-02-08 13:58:44 -08:00
2020-02-28 12:40:49 +10:00
2020-02-04 07:17:41 +00:00
2020-02-22 11:00:52 -08:00
2020-02-16 12:35:52 -08:00
2020-02-04 07:17:41 +00:00
2020-01-16 10:45:44 -08:00
2020-02-04 07:17:41 +00:00
2020-01-27 13:03:00 -08:00
2020-02-08 14:04:19 -08:00
2020-01-27 13:03:00 -08:00
2020-02-08 13:55:25 -08:00
2020-02-03 14:51:57 +00:00
2020-02-04 07:17:41 +00:00
2020-02-29 09:58:47 -06:00
2020-01-31 11:28:31 -08:00
2020-02-13 12:10:07 -08:00
2020-02-03 22:22:05 +00:00
2020-02-09 16:05:50 -08:00
2020-01-29 10:35:54 -08:00
2020-01-29 10:35:54 -08:00
2020-02-28 09:02:18 -08:00
2020-02-21 16:10:10 -08:00
2020-02-09 16:05:50 -08:00