[PATCHSET 0/3] Split queue lock into submission/completion locks
Jens Axboe
axboe at kernel.dk
Thu May 17 08:22:32 PDT 2018
On 5/17/18 9:02 AM, Jens Axboe wrote:
> This series is on top of the previous work from yesterday, including
> Christophs patch. It splits nvmeq->q_lock into two locks:
>
> 1) ->sq_lock, that protects the submission side of things
> 2) ->cq_lock, that protects the completion side
>
> This also means that we can drop the IRQ safe nature of the submission
> side locking.
Series also here:
http://git.kernel.dk/cgit/linux-block/log/?h=nvme-4.18
NOT on top of Christophs change, as it seems to regress performance for me.
Quick test on polling on an xpoint device with 4 threads shows a nice
improvement for me:
Current master:
read: IOPS=519k, BW=253MiB/s (266MB/s)(2532MiB/10001msec)
clat (usec): min=5, max=630, avg= 7.38, stdev= 3.16
lat (usec): min=5, max=630, avg= 7.41, stdev= 3.16
clat percentiles (nsec):
| 1.00th=[ 6560], 5.00th=[ 6688], 10.00th=[ 6688], 20.00th=[ 6752],
| 30.00th=[ 6816], 40.00th=[ 6880], 50.00th=[ 6944], 60.00th=[ 7072],
| 70.00th=[ 7136], 80.00th=[ 7328], 90.00th=[ 7712], 95.00th=[ 8256],
| 99.00th=[18048], 99.50th=[19072], 99.90th=[36096], 99.95th=[36608],
| 99.99th=[41216]
and with this series:
read: IOPS=507k, BW=248MiB/s (260MB/s)(2476MiB/10001msec)
clat (usec): min=6, max=640, avg= 7.56, stdev= 3.19
lat (usec): min=6, max=640, avg= 7.59, stdev= 3.19
clat percentiles (nsec):
| 1.00th=[ 6688], 5.00th=[ 6816], 10.00th=[ 6880], 20.00th=[ 6944],
| 30.00th=[ 7008], 40.00th=[ 7072], 50.00th=[ 7136], 60.00th=[ 7200],
| 70.00th=[ 7328], 80.00th=[ 7520], 90.00th=[ 7904], 95.00th=[ 8384],
| 99.00th=[18048], 99.50th=[18816], 99.90th=[36096], 99.95th=[36608],
| 99.99th=[42752]
For polling, looking at CPU utilization usually means seeing if we decrease
system time and shift that to app time instead. For master, it's
5.49/94.52% usr/sys, and with the patchset it's 5.71/94.27%.
--
Jens Axboe
More information about the Linux-nvme
mailing list