Kernel tuning for large maxsockets

Scot Loach sloach at sandvine.com
Thu Jul 17 17:45:39 PDT 2003


Bosko:

The problem I have is that each of the four pcb types has its own zone that
is preallocated to hold maxsockets pcbs.  This is a waste of kva that could
be better used.  Since I'm not using divert sockets or raw sockets, I would
rather cap these zones to a small constant number, and increase the others
as much as possible.

I should have a patch for this next week sometime.

-----Original Message-----
From: Bosko Milekic [mailto:bmilekic at technokratis.com]
Sent: Wednesday, July 16, 2003 5:52 AM
To: Scot Loach
Cc: 'freebsd-net at freebsd.org'
Subject: Re: Kernel tuning for large maxsockets



On Tue, Jul 15, 2003 at 05:22:55PM -0400, Scot Loach wrote:
> Currently, whenever maxsockets is increased, this causes kernel memory to
be
> preallocated for each type of pcb (tcp, udp, raw, divert).  The number of
> pcbs preallocated for each of these is always the same as maxsockets.
> 
> This is probably a waste of memory for raw sockets and divert sockets,
since
> they would not normally be used in large numbers.   A large server could
> save kvm by reducing the number of divert and raw pcbs preallocated.  For
> example, on a machine configured for 200,000 maxsockets we would save 75MB
> of kvm out of a total of 262MB that would have been preallocated.  This
kvm
> savings can be used to increase maxsockets even more.

  What version of FreeBSD are you talking about here?  In -current, the
  pcbs come off of zones which are capped at a maximum w.r.t.
  maxsockets.  The kva space comes out of kmem_map and the objects are
  kept cached in their respective zones.  One thing to note is that the
  zones are setup with UMA_ZONE_NOFREE, so the pages wired down for pcb
  use are probably never unwired.

  I don't know why, exactly, UMA_ZONE_NOFREE is required for all of the
  pcb zones in the netinet code.

> Is there any reason I should not modify the kernel code to only let a
small,
> fixed number of raw and divert pcbs be preallocated instead of having them
> scale with maxsockets?
> 
> Next, does this seem like a generally useful thing that could be rolled
back
> into the source tree?  I could make this a kernel option or a tunable
sysctl
> variable.
> 
> thanks
> 
> Scot Loach

-- 
Bosko Milekic  *  bmilekic at technokratis.com  *  bmilekic at FreeBSD.org
TECHNOkRATIS Consulting Services  *  http://www.technokratis.com/


More information about the freebsd-net mailing list