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 locks. 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. v3: * 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 ip_vs_has_real_service * "ipvs: convert locks used in persistence engines" needs only synchronize_rcu, not rcu_barrier, we do not use rcu callbacks v2: * 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://git.kernel.org/pub/scm/linux/kernel/git/horms/ipvs-next.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 http://vger.kernel.org/majordomo-info.html