All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v4 0/3] Lockless netlink_lookup() with new concurrent hash table
@ 2014-08-01 11:58 ` Thomas Graf
  0 siblings, 0 replies; 29+ messages in thread
From: Thomas Graf @ 2014-08-01 11:58 UTC (permalink / raw)
  To: davem-fT/PcQaiUtIeIZ0/mPfg9Q, netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: dev-yBygre7rU0TnMu66kgdUjQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	josh-iaAMLnmF4UmaiuxdJuQwMA, nikolay-H+wXaHxf7aLQT0dZR+AlfA,
	netfilter-devel-u79uwXL29TY76Z2rM5mHXA,
	tklauser-93Khv+1bN0NyDzI6CaY1VQ,
	paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8,
	kaber-dcUjhNyLwpNeoWH0uzbU5w, walpole-sKt6ljEC1JY3uPMLIKxrzw

Netlink sockets are maintained in a hash table to allow efficient lookup
via the port ID for unicast messages. However, lookups currently require
a read lock to be taken. This series adds a new generic, resizable,
scalable, concurrent hash table based on the paper referenced in the first
patch. It then makes use of the new data type to implement lockless
netlink_lookup().

Patch 3/3 to convert nft_hash is included for reference but should be
merged via the netfilter tree. Inclusion in this series is to provide
context for the suggested API.

Against net-next since the initial user of the new hash table is in net/

Changes:
v3-v4
 - fixed wrong shift assignment placement as spotted by Nikolay Aleksandrov
 - reverted default size of nft_hash to 4 as requested by Patrick McHardy,
   default size for other hash tables remains at 64 if no hint is given
 - fixed copyright as requested by Patrick McHardy
v2-v3:
 - fixed typo in nft_hash_destroy() when passing rhashtable handle
v1-v2:
 - fixed traversal off-by-one as spotted by Tobias Klauser
 - removed unlikely() from BUG_ON() as spotted by Josh Triplett
 - new 3rd patch to convert nft_hash to rhashtable
 - make rhashtable_insert() return void
 - nl_sk_hash_lock must be a mutex
 - fixed wrong name of rht_shrink_below_30()
 - exported symbols rht_grow_above_75() and rht_shrink_below_30()
 - allow table freeing with RCU callback

Thomas Graf (3):
  lib: Resizable, Scalable, Concurrent Hash Table
  netlink: Convert netlink_lookup() to use RCU protected hash table
  nftables: Convert nft_hash to use generic rhashtable

 include/linux/rhashtable.h | 213 ++++++++++++
 lib/Kconfig.debug          |   8 +
 lib/Makefile               |   2 +-
 lib/rhashtable.c           | 797 +++++++++++++++++++++++++++++++++++++++++++++
 net/netfilter/nft_hash.c   | 292 +++--------------
 net/netlink/af_netlink.c   | 285 ++++++----------
 net/netlink/af_netlink.h   |  18 +-
 net/netlink/diag.c         |  11 +-
 8 files changed, 1192 insertions(+), 434 deletions(-)
 create mode 100644 include/linux/rhashtable.h
 create mode 100644 lib/rhashtable.c

-- 
1.9.3

^ permalink raw reply	[flat|nested] 29+ messages in thread
* [PATCH net-next v5 0/3] Lockless netlink_lookup() with new concurrent hash table
@ 2014-08-02  9:47 Thomas Graf
  2014-08-02  9:47 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Graf @ 2014-08-02  9:47 UTC (permalink / raw)
  To: davem-fT/PcQaiUtIeIZ0/mPfg9Q, netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: dev-yBygre7rU0TnMu66kgdUjQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	josh-iaAMLnmF4UmaiuxdJuQwMA, nikolay-H+wXaHxf7aLQT0dZR+AlfA,
	netfilter-devel-u79uwXL29TY76Z2rM5mHXA,
	paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8,
	kaber-dcUjhNyLwpNeoWH0uzbU5w, walpole-sKt6ljEC1JY3uPMLIKxrzw

Netlink sockets are maintained in a hash table to allow efficient lookup
via the port ID for unicast messages. However, lookups currently require
a read lock to be taken. This series adds a new generic, resizable,
scalable, concurrent hash table based on the paper referenced in the first
patch. It then makes use of the new data type to implement lockless
netlink_lookup().

Patch 3/3 to convert nft_hash is included for reference but should be
merged via the netfilter tree. Inclusion in this series is to provide
context for the suggested API.

Against net-next since the initial user of the new hash table is in net/

Changes:
v4-v5:
 - use GFP_KERNEL to alloc Netlink buckets as suggested by Nikolay
   Aleksandrov
 - free nft hash element on removal as spotted by Nikolay Aleksandrov
   and Patrick McHardy
v3-v4:
 - fixed wrong shift assignment placement as spotted by Nikolay Aleksandrov
 - reverted default size of nft_hash to 4 as requested by Patrick McHardy,
   default size for other hash tables remains at 64 if no hint is given
 - fixed copyright as requested by Patrick McHardy
v2-v3:
 - fixed typo in nft_hash_destroy() when passing rhashtable handle
v1-v2:
 - fixed traversal off-by-one as spotted by Tobias Klauser
 - removed unlikely() from BUG_ON() as spotted by Josh Triplett
 - new 3rd patch to convert nft_hash to rhashtable
 - make rhashtable_insert() return void
 - nl_sk_hash_lock must be a mutex
 - fixed wrong name of rht_shrink_below_30()
 - exported symbols rht_grow_above_75() and rht_shrink_below_30()
 - allow table freeing with RCU callback

Thomas Graf (3):
  lib: Resizable, Scalable, Concurrent Hash Table
  netlink: Convert netlink_lookup() to use RCU protected hash table
  nftables: Convert nft_hash to use generic rhashtable

 include/linux/rhashtable.h | 213 ++++++++++++
 lib/Kconfig.debug          |   8 +
 lib/Makefile               |   2 +-
 lib/rhashtable.c           | 797 +++++++++++++++++++++++++++++++++++++++++++++
 net/netfilter/nft_hash.c   | 291 ++++-------------
 net/netlink/af_netlink.c   | 285 ++++++----------
 net/netlink/af_netlink.h   |  18 +-
 net/netlink/diag.c         |  11 +-
 8 files changed, 1193 insertions(+), 432 deletions(-)
 create mode 100644 include/linux/rhashtable.h
 create mode 100644 lib/rhashtable.c

-- 
1.9.3

^ permalink raw reply	[flat|nested] 29+ messages in thread
* [PATCH net-next v3 0/3] Lockless netlink_lookup() with new concurrent hash table
@ 2014-08-01  8:51 Thomas Graf
  2014-08-01  8:52 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Graf @ 2014-08-01  8:51 UTC (permalink / raw)
  To: davem-fT/PcQaiUtIeIZ0/mPfg9Q, netdev-u79uwXL29TY76Z2rM5mHXA
  Cc: dev-yBygre7rU0TnMu66kgdUjQ, linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	josh-iaAMLnmF4UmaiuxdJuQwMA,
	netfilter-devel-u79uwXL29TY76Z2rM5mHXA,
	tklauser-93Khv+1bN0NyDzI6CaY1VQ,
	paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8,
	kaber-dcUjhNyLwpNeoWH0uzbU5w, walpole-sKt6ljEC1JY3uPMLIKxrzw

Netlink sockets are maintained in a hash table to allow efficient lookup
via the port ID for unicast messages. However, lookups currently require
a read lock to be taken. This series adds a new generic, resizable,
scalable, concurrent hash table based on the paper referenced in the first
patch. It then makes use of the new data type to implement lockless
netlink_lookup().

Patch 3/3 to convert nft_hash is included for reference but should be
merged via the netfilter tree. Inclusion in this series is to provide
context for the suggested API.

Against net-next since the initial user of the new hash table is in net/

Changes:
v2-v3:
 - fixed typo in nft_hash_destroy() when passing rhashtable handle
v1-v2:
 - fixed traversal off-by-one as spotted by Tobias Klauser
 - removed unlikely() from BUG_ON() as spotted by Josh Triplett
 - new 3rd patch to convert nft_hash to rhashtable
 - make rhashtable_insert() return void
 - nl_sk_hash_lock must be a mutex
 - fixed wrong name of rht_shrink_below_30()
 - exported symbols rht_grow_above_75() and rht_shrink_below_30()
 - allow table freeing with RCU callback

Thomas Graf (3):
  lib: Resizable, Scalable, Concurrent Hash Table
  netlink: Convert netlink_lookup() to use RCU protected hash table
  nftables: Convert nft_hash to use generic rhashtable

 include/linux/rhashtable.h | 213 ++++++++++++
 lib/Kconfig.debug          |   8 +
 lib/Makefile               |   2 +-
 lib/rhashtable.c           | 797 +++++++++++++++++++++++++++++++++++++++++++++
 net/netfilter/nft_hash.c   | 291 +++--------------
 net/netlink/af_netlink.c   | 285 ++++++----------
 net/netlink/af_netlink.h   |  18 +-
 net/netlink/diag.c         |  11 +-
 8 files changed, 1190 insertions(+), 435 deletions(-)
 create mode 100644 include/linux/rhashtable.h
 create mode 100644 lib/rhashtable.c

-- 
1.9.3

^ permalink raw reply	[flat|nested] 29+ messages in thread
* [PATCH v2 0/3 net-next] Lockless netlink_lookup() with new concurrent hash table
@ 2014-07-31 22:56 Thomas Graf
  2014-07-31 22:56 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Graf @ 2014-07-31 22:56 UTC (permalink / raw)
  To: davem, netdev
  Cc: linux-kernel, kaber, paulmck, josh, challa, walpole, dev,
	tklauser, netfilter-devel

Netlink sockets are maintained in a hash table to allow efficient lookup
via the port ID for unicast messages. However, lookups currently require
a read lock to be taken. This series adds a new generic, resizable,
scalable, concurrent hash table based on the paper referenced in the first
patch. It then makes use of the new data type to implement lockless
netlink_lookup().

Patch 3/3 to convert nft_hash is included for reference but should be
merged via the netfilter tree. Inclusion in this series is to provide
context for the suggested API.

Against net-next since the initial user of the new hash table is in net/

Changes:
v1-v2:
 - fixed traversal off-by-one as spotted by Tobias Klauser
 - removed unlikely() from BUG_ON() as spotted by Josh Triplett
 - new 3rd patch to convert nft_hash to rhashtable
 - make rhashtable_insert() return void
 - nl_sk_hash_lock must be a mutex
 - fixed wrong name of rht_shrink_below_30()
 - exported symbols rht_grow_above_75() and rht_shrink_below_30()
 - allow table freeing with RCU callback

Thomas Graf (3):
  lib: Resizable, Scalable, Concurrent Hash Table
  netlink: Convert netlink_lookup() to use RCU protected hash table
  nftables: Convert nft_hash to use generic rhashtable

 include/linux/rhashtable.h | 213 ++++++++++++
 lib/Kconfig.debug          |   8 +
 lib/Makefile               |   2 +-
 lib/rhashtable.c           | 797 +++++++++++++++++++++++++++++++++++++++++++++
 net/netfilter/nft_hash.c   | 291 +++--------------
 net/netlink/af_netlink.c   | 285 ++++++----------
 net/netlink/af_netlink.h   |  18 +-
 net/netlink/diag.c         |  11 +-
 8 files changed, 1190 insertions(+), 435 deletions(-)
 create mode 100644 include/linux/rhashtable.h
 create mode 100644 lib/rhashtable.c

-- 
1.9.3

^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2014-08-02 10:57 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-01 11:58 [PATCH net-next v4 0/3] Lockless netlink_lookup() with new concurrent hash table Thomas Graf
2014-08-01 11:58 ` Thomas Graf
     [not found] ` <cover.1406891028.git.tgraf-G/eBtMaohhA@public.gmane.org>
2014-08-01 11:58   ` [PATCH net-next 1/3] lib: Resizable, Scalable, Concurrent Hash Table Thomas Graf
2014-08-01 11:58     ` Thomas Graf
2014-08-01 11:58   ` [PATCH net-next 2/3] netlink: Convert netlink_lookup() to use RCU protected hash table Thomas Graf
2014-08-01 11:58     ` Thomas Graf
     [not found]     ` <72a64dfee4f20f2ca596df26f3e4ae543cf4c068.1406891028.git.tgraf-G/eBtMaohhA@public.gmane.org>
2014-08-01 14:51       ` Nikolay Aleksandrov
2014-08-01 14:51         ` Nikolay Aleksandrov
     [not found]         ` <53DBA976.8030103-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2014-08-01 15:15           ` Thomas Graf
2014-08-01 15:15             ` Thomas Graf
     [not found]             ` <20140801151527.GF7331-FZi0V3Vbi30CUdFEqe4BF2D2FQJk+8+b@public.gmane.org>
2014-08-01 15:20               ` Nikolay Aleksandrov
2014-08-01 15:20                 ` Nikolay Aleksandrov
2014-08-01 11:58 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf
     [not found]   ` <bd4d9fa542072358cb0bd77e493ec5785a1d9666.1406891028.git.tgraf-G/eBtMaohhA@public.gmane.org>
2014-08-01 12:21     ` Nikolay Aleksandrov
2014-08-01 12:21       ` Nikolay Aleksandrov
2014-08-01 13:49       ` Thomas Graf
2014-08-01 14:12         ` Patrick McHardy
2014-08-01 14:51           ` Thomas Graf
2014-08-01 15:00             ` Patrick McHardy
  -- strict thread matches above, loose matches on Subject: below --
2014-08-02  9:47 [PATCH net-next v5 0/3] Lockless netlink_lookup() with new concurrent hash table Thomas Graf
2014-08-02  9:47 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf
     [not found]   ` <583cb5fc8f1bc2f47d338dfba06f514e7b89a548.1406971567.git.tgraf-G/eBtMaohhA@public.gmane.org>
2014-08-02 10:56     ` Nikolay Aleksandrov
2014-08-02 10:56       ` Nikolay Aleksandrov
2014-08-01  8:51 [PATCH net-next v3 0/3] Lockless netlink_lookup() with new concurrent hash table Thomas Graf
2014-08-01  8:52 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf
2014-08-01 10:17   ` Patrick McHardy
     [not found]     ` <970429e5-2465-40f2-998b-b82dab3debe8-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2014-08-01 10:39       ` Thomas Graf
2014-08-01 10:39         ` Thomas Graf
     [not found]         ` <20140801103901.GC7331-FZi0V3Vbi30CUdFEqe4BF2D2FQJk+8+b@public.gmane.org>
2014-08-01 10:47           ` Patrick McHardy
2014-08-01 10:47             ` Patrick McHardy
2014-07-31 22:56 [PATCH v2 0/3 net-next] Lockless netlink_lookup() with new concurrent hash table Thomas Graf
2014-07-31 22:56 ` [PATCH net-next 3/3] nftables: Convert nft_hash to use generic rhashtable Thomas Graf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.