On Sun, Apr 15, 2018 at 10:25:36PM +0200, Sebastian Benoit wrote:
> Claudio Jeker([email protected]) on 2018.04.15 13:36:25 +0200:
> > Relayd has a limit of 1024 session per relay process. This is not enough
> > on busy web proxies with decent keep-alive usage. Once the limit is
> > reached new sessions are just dropped with makes the situation worse.
> > Since relayd already handles out of file descriptor situation more
> > gracefully I see no need to keep this artifical limit around.
> > 
> > The following diff removes RELAY_MAX_SESSIONS, OK?
> > -- 
> > :wq Claudio
> > 
> > Index: parse.y
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/relayd/parse.y,v
> > retrieving revision 1.221
> > diff -u -p -r1.221 parse.y
> > --- parse.y 29 Nov 2017 15:24:50 -0000      1.221
> > +++ parse.y 15 Apr 2018 11:29:18 -0000
> > @@ -1081,7 +1081,7 @@ tcpflags      : SACK                  { 
> > proto->tcpflags |= T
> >             | SPLICE                { /* default */ }
> >             | NO SPLICE             { proto->tcpflags |= TCPFLAG_NSPLICE; }
> >             | BACKLOG NUMBER        {
> > -                   if ($2 < 0 || $2 > RELAY_MAX_SESSIONS) {
> > +                   if ($2 < 0 || $2 > 512) {
> 
> maybe use (new) RELAY_MAX_BACKLOG there instead of 512?
> why 512 instead of 1024?

Mainly because the listen backlog is limited by the kernel to 128 by
default and needs a tunable to change that. Also having 512 tcp sessions
in the backlog is probably good enough. I can throw in a define for that.
 
> i think this needs mentioning in the manpage
> 
> diff --git usr.sbin/relayd/relayd.conf.5 usr.sbin/relayd/relayd.conf.5
> index b6fd6530d79..bbe71739db4 100644
> --- usr.sbin/relayd/relayd.conf.5
> +++ usr.sbin/relayd/relayd.conf.5
> @@ -849,7 +849,8 @@ Valid options are:
>  .Bl -tag -width Ds
>  .It Ic backlog Ar number
>  Set the maximum length the queue of pending connections may grow to.
> -The backlog option is 10 by default and is limited by the
> +The backlog option is 10 by default, can be set to a maximum of 512
> +and is limited by the
>  .Ic kern.somaxconn
>  .Xr sysctl 8
>  variable.
> 
> with something like that ok benno@ 

I can add this to the diff.

> 
> >                             yyerror("invalid backlog: %d", $2);
> >                             YYERROR;
> >                     }
> > Index: relay.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/relayd/relay.c,v
> > retrieving revision 1.237
> > diff -u -p -r1.237 relay.c
> > --- relay.c 27 Dec 2017 15:53:30 -0000      1.237
> > +++ relay.c 15 Apr 2018 11:29:18 -0000
> > @@ -1077,8 +1077,7 @@ relay_accept(int fd, short event, void *
> >             }
> >             return;
> >     }
> > -   if (relay_sessions >= RELAY_MAX_SESSIONS ||
> > -       rlay->rl_conf.flags & F_DISABLE)
> > +   if (rlay->rl_conf.flags & F_DISABLE)
> >             goto err;
> >  
> >     if ((con = calloc(1, sizeof(*con))) == NULL)
> > Index: relay_udp.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/relayd/relay_udp.c,v
> > retrieving revision 1.47
> > diff -u -p -r1.47 relay_udp.c
> > --- relay_udp.c     4 Jul 2017 19:59:51 -0000       1.47
> > +++ relay_udp.c     15 Apr 2018 11:29:19 -0000
> > @@ -191,8 +191,7 @@ relay_udp_response(int fd, short sig, vo
> >             return;
> >     }
> >  
> > -   if (relay_sessions >= RELAY_MAX_SESSIONS ||
> > -       rlay->rl_conf.flags & F_DISABLE)
> > +   if (rlay->rl_conf.flags & F_DISABLE)
> >             return;
> >  
> >     slen = sizeof(ss);
> > @@ -226,8 +225,7 @@ relay_udp_server(int fd, short sig, void
> >  
> >     event_add(&rlay->rl_ev, NULL);
> >  
> > -   if (relay_sessions >= RELAY_MAX_SESSIONS ||
> > -       rlay->rl_conf.flags & F_DISABLE)
> > +   if (rlay->rl_conf.flags & F_DISABLE)
> >             return;
> >  
> >     slen = sizeof(ss);
> > Index: relayd.h
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/relayd/relayd.h,v
> > retrieving revision 1.248
> > diff -u -p -r1.248 relayd.h
> > --- relayd.h        28 Nov 2017 18:25:53 -0000      1.248
> > +++ relayd.h        15 Apr 2018 11:29:19 -0000
> > @@ -68,7 +68,6 @@
> >  
> >  #define FD_RESERVE         5
> >  
> > -#define RELAY_MAX_SESSIONS 1024
> >  #define RELAY_TIMEOUT              600
> >  #define RELAY_CACHESIZE            -1      /* use default size */
> >  #define RELAY_NUMPROC              3
> > 
> 

-- 
:wq Claudio

Reply via email to