ipvs: optimize release of connections in OPS mode
authorMarco Angaroni <marcoangaroni@gmail.com>
Tue, 5 Apr 2016 16:26:52 +0000 (18:26 +0200)
committerSimon Horman <horms@verge.net.au>
Wed, 20 Apr 2016 02:34:17 +0000 (12:34 +1000)
commit013b042465d3fefef84b4b87947747eda08277e2
tree5efb954d5aa9250166c5bd69bdf9f7d55eac4597
parent39b9722315364121c6e2524515a6e95d52287549
ipvs: optimize release of connections in OPS mode

One-packet-scheduling is the most expensive mode in IPVS from
performance point of view: for each packet to be processed a new
connection data structure is created and, after packet is sent,
deleted by starting a new timer set to expire immediately.

SIP persistent-engine needs OPS mode to have Call-ID based load
balancing, so OPS mode performance has negative impact in SIP
protocol load balancing.

This patch aims to improve performance of OPS mode by means of the
following changes in the release mechanism of OPS connections:
a) call expire callback ip_vs_conn_expire() directly instead of
   starting a timer programmed to fire immediately.
b) avoid call_rcu() overhead inside expire callback, since OPS
   connection are not inserted in the hash-table and last just the
   time to process the packet, hence there is no concurrent access
   to such data structures.

Signed-off-by: Marco Angaroni <marcoangaroni@gmail.com>
Acked-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
net/netfilter/ipvs/ip_vs_conn.c