On 08/02/2014 11:47 AM, Thomas Graf wrote: > Heavy Netlink users such as Open vSwitch spend a considerable amount of > time in netlink_lookup() due to the read-lock on nl_table_lock. Use of > RCU relieves the lock contention. > > Makes use of the new resizable hash table to avoid locking on the > lookup. > > The hash table will grow if entries exceeds 75% of table size up to a > total table size of 64K. It will automatically shrink if usage falls > below 30%. > > Also splits nl_table_lock into a separate mutex to protect hash table > mutations and allow synchronize_rcu() to sleep while waiting for readers > during expansion and shrinking. > > Before: > 9.16% kpktgend_0 [openvswitch] [k] masked_flow_lookup > 6.42% kpktgend_0 [pktgen] [k] mod_cur_headers > 6.26% kpktgend_0 [pktgen] [k] pktgen_thread_worker > 6.23% kpktgend_0 [kernel.kallsyms] [k] memset > 4.79% kpktgend_0 [kernel.kallsyms] [k] netlink_lookup > 4.37% kpktgend_0 [kernel.kallsyms] [k] memcpy > 3.60% kpktgend_0 [openvswitch] [k] ovs_flow_extract > 2.69% kpktgend_0 [kernel.kallsyms] [k] jhash2 > > After: > 15.26% kpktgend_0 [openvswitch] [k] masked_flow_lookup > 8.12% kpktgend_0 [pktgen] [k] pktgen_thread_worker > 7.92% kpktgend_0 [pktgen] [k] mod_cur_headers > 5.11% kpktgend_0 [kernel.kallsyms] [k] memset > 4.11% kpktgend_0 [openvswitch] [k] ovs_flow_extract > 4.06% kpktgend_0 [kernel.kallsyms] [k] _raw_spin_lock > 3.90% kpktgend_0 [kernel.kallsyms] [k] jhash2 > [...] > 0.67% kpktgend_0 [kernel.kallsyms] [k] netlink_lookup > > Signed-off-by: Thomas Graf <tgraf@xxxxxxx> > --- > net/netlink/af_netlink.c | 285 ++++++++++++++++++----------------------------- > net/netlink/af_netlink.h | 18 +-- > net/netlink/diag.c | 11 +- > 3 files changed, 119 insertions(+), 195 deletions(-) > Reviewed-by: Nikolay Aleksandrov <nikolay@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html