On Tue, Mar 11, 2025 at 02:58:09PM +0100, Alexander Bluhm wrote:
> On Tue, Mar 11, 2025 at 10:45:14AM +0100, Claudio Jeker wrote:
> > On Tue, Mar 11, 2025 at 12:37:31PM +0300, Vitaliy Makkoveev wrote:
> > > On Mon, Mar 10, 2025 at 03:47:42PM -0600, Maximo Pech wrote:
> > > > Hi,
> > > > 
> > > > I'm running ipfs and for best performance it requires increasing the
> > > > udp receive buffer size as explained below
> > > > 
> > > > https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
> > > > 
> > > > However, I've noticed that setting net.inet.udp.recvspace above
> > > > 2097152 results in socket(2) failing with ENOBUF. It doesn't matter
> > > > what the actual resource usage is, just setting it makes many programs
> > > > that call socket() to fail, for example ifconfig, netstat.
> > > > 
> > > > I believe that probably I'm hitting another system limit, so I would
> > > > need to increase that as well but I don't know what it would be. I've
> > > > tested this on two different systems, with 1G memory and 2G memory and
> > > > the behavior is the same.
> > > > 
> > > > Any advice would be appreciated.
> > > > 
> > > 
> > > Yes, this is the limit for max bytes in socket buffer. The
> > > *.{send,recv}space sysctl values should not exceed this limit. Thanks
> > > for pointing.
> > > 
> > > The UNIX sockets already have the SB_MAX for upper limit.
> > 
> > OK claudio@
> 
> I think it should be sb_max instead of sb_max.  But I doubt these
> patchable kernel variables are use anymore.
> 

You are right, but `sb_max' can't be used to initialize structure.

> anyway OK bluhm@
> 
> > Another option would be to accept larger numbers but clip them to SB_MAX.
> > The sysctl interface does not really offer that in an easy way so I think
> > it is not worth adding a lot of code for that.
> 
> I prefer a clear error instead of some magic that works around
> faulty config.
> 
> > > Index: sys/netinet/ip_divert.c
> > > ===================================================================
> > > RCS file: /cvs/src/sys/netinet/ip_divert.c,v
> > > diff -u -p -r1.100 ip_divert.c
> > > --- sys/netinet/ip_divert.c       2 Mar 2025 21:28:32 -0000       1.100
> > > +++ sys/netinet/ip_divert.c       11 Mar 2025 09:32:17 -0000
> > > @@ -63,8 +63,8 @@ u_int   divert_recvspace = DIVERT_RECVSP
> > >  #endif
> > >  
> > >  const struct sysctl_bounded_args divertctl_vars[] = {
> > > - { DIVERTCTL_RECVSPACE, &divert_recvspace, 0, INT_MAX },
> > > - { DIVERTCTL_SENDSPACE, &divert_sendspace, 0, INT_MAX },
> > > + { DIVERTCTL_RECVSPACE, &divert_recvspace, 0, SB_MAX },
> > > + { DIVERTCTL_SENDSPACE, &divert_sendspace, 0, SB_MAX },
> > >  };
> > >  
> > >  const struct pr_usrreqs divert_usrreqs = {
> > > Index: sys/netinet/udp_usrreq.c
> > > ===================================================================
> > > RCS file: /cvs/src/sys/netinet/udp_usrreq.c,v
> > > diff -u -p -r1.334 udp_usrreq.c
> > > --- sys/netinet/udp_usrreq.c      2 Mar 2025 21:28:32 -0000       1.334
> > > +++ sys/netinet/udp_usrreq.c      11 Mar 2025 09:32:17 -0000
> > > @@ -159,8 +159,8 @@ const struct pr_usrreqs udp6_usrreqs = {
> > >  
> > >  const struct sysctl_bounded_args udpctl_vars[] = {
> > >   { UDPCTL_CHECKSUM, &udpcksum, 0, 1 },
> > > - { UDPCTL_RECVSPACE, &udp_recvspace, 0, INT_MAX },
> > > - { UDPCTL_SENDSPACE, &udp_sendspace, 0, INT_MAX },
> > > + { UDPCTL_RECVSPACE, &udp_recvspace, 0, SB_MAX },
> > > + { UDPCTL_SENDSPACE, &udp_sendspace, 0, SB_MAX },
> > >  };
> > >  
> > >  struct   inpcbtable udbtable;
> > > Index: sys/netinet6/ip6_divert.c
> > > ===================================================================
> > > RCS file: /cvs/src/sys/netinet6/ip6_divert.c,v
> > > diff -u -p -r1.99 ip6_divert.c
> > > --- sys/netinet6/ip6_divert.c     2 Mar 2025 21:28:32 -0000       1.99
> > > +++ sys/netinet6/ip6_divert.c     11 Mar 2025 09:32:17 -0000
> > > @@ -66,8 +66,8 @@ u_int   divert6_recvspace = DIVERT_RECVS
> > >  #endif
> > >  
> > >  const struct sysctl_bounded_args divert6ctl_vars[] = {
> > > - { DIVERT6CTL_RECVSPACE, &divert6_recvspace, 0, INT_MAX },
> > > - { DIVERT6CTL_SENDSPACE, &divert6_sendspace, 0, INT_MAX },
> > > + { DIVERT6CTL_RECVSPACE, &divert6_recvspace, 0, SB_MAX },
> > > + { DIVERT6CTL_SENDSPACE, &divert6_sendspace, 0, SB_MAX },
> > >  };
> > >  
> > >  const struct pr_usrreqs divert6_usrreqs = {
> > 
> > -- 
> > :wq Claudio

Reply via email to