Thread (105 messages) 105 messages, 13 authors, 2008-11-24

Re: [PATCH] net: Convert TCP/DCCP listening hash tables to use RCU

From: Paul E. McKenney <hidden>
Date: 2008-11-23 22:33:03

On Sun, Nov 23, 2008 at 09:18:17PM +0100, Eric Dumazet wrote:
Paul E. McKenney a écrit :
quoted
On Sun, Nov 23, 2008 at 07:42:14PM +0100, Eric Dumazet wrote:
quoted
Paul E. McKenney a écrit :
quoted
On Sun, Nov 23, 2008 at 10:33:28AM +0100, Eric Dumazet wrote:
quoted
Hi David

Please find patch to convert TCP/DCCP listening hash tables
to RCU.

A followup patch will cleanup all sk_node fields and macros
that are not used anymore.

Thanks

[PATCH] net: Convert TCP/DCCP listening hash tables to use RCU

This is the last step to be able to perform full RCU lookups
in __inet_lookup() : After established/timewait tables, we
add RCU lookups to listening hash table.

The only trick here is that a socket of a given type (TCP ipv4,
TCP ipv6, ...) can now flight between two different tables
(established and listening) during a RCU grace period, so we
must use different 'nulls' end-of-chain values for two tables.

We define a large value :

#define LISTENING_NULLS_BASE (1U << 29)
I do like this use of the full set up upper bits!  However, wouldn't it
be a good idea to use a larger base value for 64-bit systems, perhaps
using CONFIG_64BIT to choose?  500M entries might not seem like that
many in a few years time...
Well, this value is correct up to 2^29 slots, and a hash table of 2^32 
bytes
(8 bytes per pointer)

A TCP socket uses about 1472 bytes on 64bit arches, so 2^29 sessions
would need 800 GB of ram, not counting dentries, inodes, ...

I really doubt a machine, even with 4096 cpus should/can handle so many
tcp sessions :)
200MB per CPU, right?
But yes, now that you mention it, 800GB of memory dedicated to TCP
connections sounds almost as ridiculous as did 640K of memory in the
late 1970s.  ;-)
;)
quoted
Nevertheless, I don't have an overwhelming objection to the current
code.  Easy enough to change should it become a problem, right?
Sure. By that time, cpus might be 128 bits or 256 bits anyway :)
Or even 640K bits.  ;-)

							Thanx, Paul
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help