Message ID | 86802c440912121825h20663affv9ff8d004974d0d31@mail.gmail.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
On Sat, Dec 12, 2009 at 6:25 PM, Yinghai Lu <yinghai@kernel.org> wrote: > On Sat, Dec 12, 2009 at 5:57 PM, Yinghai Lu <yinghai@kernel.org> wrote: >> On Sat, Dec 12, 2009 at 5:05 PM, Yinghai Lu <yinghai@kernel.org> wrote: >>> >>> [f86dcc5aa8c7908f2c287e7a211228df599e3e71] udp: dynamically >>> size hash tables at boot time >> >> commit f86dcc5aa8c7908f2c287e7a211228df599e3e71 >> Author: Eric Dumazet <eric.dumazet@gmail.com> >> Date: Wed Oct 7 00:37:59 2009 +0000 >> >> udp: dynamically size hash tables at boot time >> >> UDP_HTABLE_SIZE was initialy defined to 128, which is a bit small for >> several setups. >> >> 4000 active UDP sockets -> 32 sockets per chain in average. An >> incoming frame has to lookup all sockets to find best match, so long >> chains hurt latency. >> >> Instead of a fixed size hash table that cant be perfect for every >> needs, let UDP stack choose its table size at boot time like tcp/ip >> route, using alloc_large_system_hash() helper >> >> Add an optional boot parameter, uhash_entries=x so that an admin can >> force a size between 256 and 65536 if needed, like thash_entries and >> rhash_entries. >> >> dmesg logs two new lines : >> [ 0.647039] UDP hash table entries: 512 (order: 0, 4096 bytes) >> [ 0.647099] UDP Lite hash table entries: 512 (order: 0, 4096 bytes) >> >> Maximal size on 64bit arches would be 65536 slots, ie 1 MBytes for non >> debugging spinlocks. >> >> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> >> Signed-off-by: David S. Miller <davem@davemloft.net> >> >> cause the problem: nfs mount fail. >> >> the setup is: >> 64bit kernel, have all needed drivers in kernel, and boot with >> ip=dhcp, root disk is 256M ramdisk. >> then try to mount nfs.... >> > > change entries default value from 65536 to 256, > nfs mount will work. > > YH > > diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c > index 1f95348..57c13c3 100644 > --- a/net/ipv4/udp.c > +++ b/net/ipv4/udp.c > @@ -2054,7 +2054,7 @@ void udp4_proc_exit(void) > } > #endif /* CONFIG_PROC_FS */ > > -static __initdata unsigned long uhash_entries; > +static __initdata unsigned long uhash_entries = UDP_HTABLE_SIZE_MIN; > static int __init set_uhash_entries(char *str) > { > if (!str) > interesting: m:~/dump # grep UDP dmesg.txt [ 28.996034] UDP hash table entries: 65536 (order: 11, 10485760 bytes) [ 29.032364] UDP-Lite hash table entries: 65536 (order: 11, 10485760 bytes) will not work but 32768 will work. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 1f95348..57c13c3 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -2054,7 +2054,7 @@ void udp4_proc_exit(void) } #endif /* CONFIG_PROC_FS */ -static __initdata unsigned long uhash_entries; +static __initdata unsigned long uhash_entries = UDP_HTABLE_SIZE_MIN; static int __init set_uhash_entries(char *str) { if (!str)