180,000 kevents - out of memory errors

Terry Lambert tlambert2 at mindspring.com
Mon May 5 20:12:03 PDT 2003


Simon Lai wrote:
> I want to watch approx 200,000 sockets
> using kevent, but I get an ENOMEM error
> when adding kevent structures to the kqueue.
> The machine in question has 1.5GB RAM
> and can happily accept 270,000 TCP connections,
> but I need kevent to manage that many sockets,
> select() being a little too slow.
> 
> I want to add one kevent struct to the queue
> for each connection.
> 
> Currently I can only queue around 80,000 - 90,000
> kevents, with this config -
> 
>    maxfiles=250000
>    nmbclusters=35000
>    nmbufs=210000
> 
> with this config I can make 180,000 connections and
> queue 180,000 kevents -
> 
>    maxfiles=200000
>    nmbclusters=40000
>    nmbufs=240000
> 
> what should I do to improve the number of kevents
> I can queue?

1)	Add 2.5G more RAM.

2)	Reconfigure the KVA space to use 1G for UVA and 3G for
	KVA, instead of 2G/2G, which is the default, so you
	won't run out of page mappings.

3)	Disable IPSEC.

4)	Separate the allocation of tcpcb's and udpcb's; there
	is no reason to support 200,000 for both, when you can
	support 200,000 for one, and 1,000 or less for the other,
	and save all that memory.

-- Terry


More information about the freebsd-hackers mailing list