[PATCH 00/15 v3] IPVS optimizations (repost)

To: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx>, David Miller <davem@xxxxxxxxxxxxx>
Subject: [PATCH 00/15 v3] IPVS optimizations (repost)
Cc: lvs-devel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxxxxxx, netfilter-devel@xxxxxxxxxxxxxxx, Wensong Zhang <wensong@xxxxxxxxxxxx>, Julian Anastasov <ja@xxxxxx>
From: Simon Horman <horms@xxxxxxxxxxxx>
Date: Thu, 28 Mar 2013 14:39:29 +0900
Hi Dave, Hi Pablo, Hi All,

This is a repost of an IPVS optimisations series by Julian Anastasov
which has been acked by Hans Schillstrom.

I have tentatively applied them to the ipvs-next tree.
However, the first patch of the series "net: add skb_dst_set_noref_force"
touches core code and thus I believe it needs some review on netdev,
this is the reason for me posting the series.

Assuming the patch is ok it would be easiest for me if
it went through the ipvs-next tree. But if there is a preference
for taking it through net-next, feel free.

What follows is Julian's cover-email for the series.
And then git information. I am happy for Pablo to pull this
if Dave is happy with that.


Date: Thu, 21 Mar 2013 11:57:57 +0200
From: Julian Anastasov <ja@xxxxxx>
To: Simon Horman <horms@xxxxxxxxxxxx>
Cc: lvs-devel@xxxxxxxxxxxxxxx
Subject: [PATCHv3 net-next 00/15] IPVS optimizations

        This is a first patchset for IPVS optimizations.
Another patchset will address the locking in schedulers
and moving the global _bh disabling from LOCAL_OUT to all

        All patches are for net-next and Simon can
take them for ipvs-next.

        The changes in this patchset eliminate locks
and dst refcnt operations from packet processing by
using RCU. There are more details in the patches.

* in "ipvs: consolidate all dst checks on transmit in one place"
  preserve original skb dst even for local client, remove the
  rt_is_input_route and skb->dev check. Call update_pmtu only for
  local client by providing sk instead of skb.
* in "ipvs: optimize dst usage for real server" use
  rcu_dereference_protected for __ip_vs_dst_cache_reset instead of
  rcu_dereference_raw. Use the new skb_dst_set_noref_force func.
* in "ipvs: remove rs_lock by using RCU" prefer the port check in
* "ipvs: convert locks used in persistence engines" needs only
  synchronize_rcu, not rcu_barrier, we do not use rcu callbacks

* use "net: add skb_dst_set_unref" instead of
  "net: add dst_get_noref and refdst_ptr helpers"
* add "ipvs: no need to reroute anymore on DNAT over loopback"
* add "ipvs: do not use skb_share_check"
* add "ipvs: consolidate all dst checks on transmit in one place", so
  that we can avoid the refdst games in next patch
* after "ipvs: consolidate all dst checks on transmit in one place"
  "ipvs: optimize dst usage for real server" is simpler and
  uses the new skb_dst_set_unref function
* extend "ipvs: reorder keys in connection structure" with
  changes in ip_vs_ct_in_get
* fix "ipvs: avoid kmem_cache_zalloc in ip_vs_conn_new" to use new
  function ip_vs_addr_set, so that we reset all address fields
  that are used for hashing by hash_conntrack_raw


The following changes since commit dece40e848f6e022f960dc9de54be518928460c3:

  netfilter: nf_conntrack: speed up module removal path if netns in use 
(2013-03-19 17:08:31 +0100)

are available in the git repository at:

  git:// master

for you to fetch changes up to e8a0eb703e38870118928384ffd5eeeb47e7e1ef:

  ipvs: avoid kmem_cache_zalloc in ip_vs_conn_new (2013-03-28 14:16:38 +0900)

Julian Anastasov (15):
      net: add skb_dst_set_noref_force
      ipvs: avoid routing by TOS for real server
      ipvs: prefer NETDEV_DOWN event to free cached dsts
      ipvs: convert the IP_VS_XMIT macros to functions
      ipvs: rename functions related to dst_cache reset
      ipvs: no need to reroute anymore on DNAT over loopback
      ipvs: do not use skb_share_check
      ipvs: consolidate all dst checks on transmit in one place
      ipvs: optimize dst usage for real server
      ipvs: convert app locks
      ipvs: remove rs_lock by using RCU
      ipvs: convert locks used in persistence engines
      ipvs: convert connection locking
      ipvs: reorder keys in connection structure
      ipvs: avoid kmem_cache_zalloc in ip_vs_conn_new

 include/linux/skbuff.h                |   35 +-
 include/net/ip_vs.h                   |   71 ++-
 net/core/dst.c                        |    9 +-
 net/netfilter/ipvs/ip_vs_app.c        |   27 +-
 net/netfilter/ipvs/ip_vs_conn.c       |  271 +++++----
 net/netfilter/ipvs/ip_vs_core.c       |   16 +-
 net/netfilter/ipvs/ip_vs_ctl.c        |  143 +++--
 net/netfilter/ipvs/ip_vs_ftp.c        |    2 +
 net/netfilter/ipvs/ip_vs_pe.c         |   43 +-
 net/netfilter/ipvs/ip_vs_pe_sip.c     |    1 +
 net/netfilter/ipvs/ip_vs_proto_sctp.c |   18 +-
 net/netfilter/ipvs/ip_vs_proto_tcp.c  |   18 +-
 net/netfilter/ipvs/ip_vs_proto_udp.c  |   19 +-
 net/netfilter/ipvs/ip_vs_xmit.c       | 1046 ++++++++++++++-------------------
 14 files changed, 810 insertions(+), 909 deletions(-)
To unsubscribe from this list: send the line "unsubscribe lvs-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at

<Prev in Thread] Current Thread [Next in Thread>