svcrdma: Fewer calls to wake_up() in Send completion handler
authorChuck Lever <chuck.lever@oracle.com>
Wed, 7 Jul 2021 18:57:28 +0000 (14:57 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Tue, 17 Aug 2021 15:47:53 +0000 (11:47 -0400)
commit6c8c84f525100a1cade5698320b4abe43062e159
tree0a665e57c6c80fd1b2dc72f19ff979fdc2367114
parentcd2d644ddba183ec7b451b7c20d5c7cc06fcf0d7
svcrdma: Fewer calls to wake_up() in Send completion handler

Because wake_up() takes an IRQ-safe lock, it can be expensive,
especially to call inside of a single-threaded completion handler.
What's more, the Send wait queue almost never has waiters, so
most of the time, this is an expensive no-op.

As always, the goal is to reduce the average overhead of each
completion, because a transport's completion handlers are single-
threaded on one CPU core. This change reduces CPU utilization of
the Send completion thread by 2-3% on my server.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Reviewed-By: Tom Talpey <tom@talpey.com>
include/linux/sunrpc/svc_rdma.h
net/sunrpc/xprtrdma/svc_rdma_rw.c
net/sunrpc/xprtrdma/svc_rdma_sendto.c