Quantcast

sysctl kern.ipc.somaxconn limit 65535 why?

classic Classic list List threaded Threaded
19 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man


sunsaturn:~# sysctl -w kern.ipc.somaxconn=200000
kern.ipc.somaxconn: 4096
sysctl: kern.ipc.somaxconn: Invalid argument
sunsaturn:~# sysctl -w kern.ipc.somaxconn=65536
kern.ipc.somaxconn: 4096
sysctl: kern.ipc.somaxconn: Invalid argument
sunsaturn:~# sysctl -w kern.ipc.somaxconn=65535
kern.ipc.somaxconn: 4096 -> 65535
sunsaturn:~#

Trying to stress test a framework here that tosses 100k of connections
into a listen queue before doing anything, I realize I'll have to use
multiple local IPs get get around port limitations, but why is this
backlog using a limit?


Dan.


--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]
_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
On Jan 4, 2012, at 12:22 PM, Dan The Man wrote:
> Trying to stress test a framework here that tosses 100k of connections into a listen queue before doing anything, I realize I'll have to use multiple local IPs get get around port limitations, but why is this backlog using a limit?

Even a backlog of a 1000 is large compared to the default listen queue size of around 50 or 128.  And if you can drain 1000 connections per second, a 65K backlog is big enough that plenty of clients (I'm thinking web-browsers here in particular) will have given up and maybe retried rather than waiting for 60+ seconds just to exchange data.

Regards,
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man

On Wed, 4 Jan 2012, Chuck Swiger wrote:

> On Jan 4, 2012, at 12:22 PM, Dan The Man wrote:
>> Trying to stress test a framework here that tosses 100k of connections into a listen queue before doing anything, I realize I'll have to use multiple local IPs get get around port limitations, but why is this backlog using a limit?
>
> Even a backlog of a 1000 is large compared to the default listen queue size of around 50 or 128.  And if you can drain 1000 connections per second, a 65K backlog is big enough that plenty of clients (I'm thinking web-browsers here in particular) will have given up and maybe retried rather than waiting for 60+ seconds just to exchange data.
>

For web browsers makes sense, but if your coding your own server
application its only a matter of increasing the read and write timeouts
to fill queue that high and still process them. Of course wouldn't need
anything that high, but for benchmarking how much can toss in that listen
queue then write something to socket on each one after connection
established to see how fast application can finish them all, I think its
relevant.

This linux box I have no issues:
cappy:~# /sbin/sysctl -w net.core.somaxconn=200000
net.core.somaxconn = 200000
cappy:~# sysctl -w net.ipv4.tcp_max_syn_backlog=20000
net.ipv4.tcp_max_syn_backlog = 200000
cappy:~#



Dan.

--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
On Jan 4, 2012, at 12:44 PM, Dan The Man wrote:
>> Even a backlog of a 1000 is large compared to the default listen queue size of around 50 or 128.  And if you can drain 1000 connections per second, a 65K backlog is big enough that plenty of clients (I'm thinking web-browsers here in particular) will have given up and maybe retried rather than waiting for 60+ seconds just to exchange data.
>
> For web browsers makes sense, but if your coding your own server application its only a matter of increasing the read and write timeouts
> to fill queue that high and still process them.

Sure, agreed.

> Of course wouldn't need anything that high, but for benchmarking how much can toss in that listen queue then write something to socket on each one after connection established to see how fast application can finish them all, I think its relevant.
>
> This linux box I have no issues:
> cappy:~# /sbin/sysctl -w net.core.somaxconn=200000
> net.core.somaxconn = 200000
> cappy:~# sysctl -w net.ipv4.tcp_max_syn_backlog=20000
> net.ipv4.tcp_max_syn_backlog = 200000
> cappy:~#

However, I'm not convinced that it is useful to do this.  At some point, you are better off timing out and retrying via exponential backoff than you are queuing hundreds of thousands of connections in the hopes that they will eventually be serviced by something sometime considerably later.

Regards,
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man

On Wed, 4 Jan 2012, Chuck Swiger wrote:

> On Jan 4, 2012, at 12:44 PM, Dan The Man wrote:
>>> Even a backlog of a 1000 is large compared to the default listen queue size of around 50 or 128.  And if you can drain 1000 connections per second, a 65K backlog is big enough that plenty of clients (I'm thinking web-browsers here in particular) will have given up and maybe retried rather than waiting for 60+ seconds just to exchange data.
>>
>> For web browsers makes sense, but if your coding your own server application its only a matter of increasing the read and write timeouts
>> to fill queue that high and still process them.
>
> Sure, agreed.
>
>> Of course wouldn't need anything that high, but for benchmarking how much can toss in that listen queue then write something to socket on each one after connection established to see how fast application can finish them all, I think its relevant.
>>
>> This linux box I have no issues:
>> cappy:~# /sbin/sysctl -w net.core.somaxconn=200000
>> net.core.somaxconn = 200000
>> cappy:~# sysctl -w net.ipv4.tcp_max_syn_backlog=20000
>> net.ipv4.tcp_max_syn_backlog = 200000
>> cappy:~#
>
> However, I'm not convinced that it is useful to do this.  At some point, you are better off timing out and retrying via exponential backoff than you are queuing hundreds of thousands of connections in the hopes that they will eventually be serviced by something sometime considerably later.
>

I agree completely, in practical application this makes sense, but why
should the OS dictate not being able to temporarily set that setting higher in
order to fully benchmark the application at 100k+ in the listen queue if
the developer so chooses? I think that alone should be a good reason, to
make freebsd developer friendly.



Dan.


--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man

On Wed, 4 Jan 2012, Dan The Man wrote:

>
> On Wed, 4 Jan 2012, Chuck Swiger wrote:
>
>> On Jan 4, 2012, at 12:44 PM, Dan The Man wrote:
>>>> Even a backlog of a 1000 is large compared to the default listen queue
>>>> size of around 50 or 128.  And if you can drain 1000 connections per
>>>> second, a 65K backlog is big enough that plenty of clients (I'm thinking
>>>> web-browsers here in particular) will have given up and maybe retried
>>>> rather than waiting for 60+ seconds just to exchange data.
>>>
>>> For web browsers makes sense, but if your coding your own server
>>> application its only a matter of increasing the read and write timeouts
>>> to fill queue that high and still process them.
>>
>> Sure, agreed.
>>
>>> Of course wouldn't need anything that high, but for benchmarking how much
>>> can toss in that listen queue then write something to socket on each one
>>> after connection established to see how fast application can finish them
>>> all, I think its relevant.
>>>
>>> This linux box I have no issues:
>>> cappy:~# /sbin/sysctl -w net.core.somaxconn=200000
>>> net.core.somaxconn = 200000
>>> cappy:~# sysctl -w net.ipv4.tcp_max_syn_backlog=20000
>>> net.ipv4.tcp_max_syn_backlog = 200000
>>> cappy:~#
>>
>> However, I'm not convinced that it is useful to do this.  At some point,
>> you are better off timing out and retrying via exponential backoff than you
>> are queuing hundreds of thousands of connections in the hopes that they
>> will eventually be serviced by something sometime considerably later.
>>
>
> I agree completely, in practical application this makes sense, but why should
> the OS dictate not being able to temporarily set that setting higher in order
> to fully benchmark the application at 100k+ in the listen queue if the
> developer so chooses? I think that alone should be a good reason, to make
> freebsd developer friendly.


Anyways its not a big deal I can live with a 60k or so benchmark, I just
really wanted to see how freebsd's kqueue would perform processing that
many connections right out of the listen queue.



Dan.

--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
In reply to this post by Dan The Man
On Jan 4, 2012, at 1:03 PM, Dan The Man wrote:
>> However, I'm not convinced that it is useful to do this.  At some point, you are better off timing out and retrying via exponential backoff than you are queuing hundreds of thousands of connections in the hopes that they will eventually be serviced by something sometime considerably later.
>
> I agree completely, in practical application this makes sense, but why should the OS dictate not being able to temporarily set that setting higher in order to fully benchmark the application at 100k+ in the listen queue if the developer so chooses? I think that alone should be a good reason, to make freebsd developer friendly.

The job of the OS is to manage resources on behalf of the users and processes using the system.

Some developers feel that VM means that the system should always claim have more memory available, but always saying "yes" isn't "managing resources".  I'd rather have the OS return a null pointer and set ENOMEM when someone tries to malloc() more memory than the system (including swap, VM overcommit, etc) has, and I expect developers to code well enough to handle malloc() failures.

Setting the listen queue to an arbitrarily high value isn't useful, and developers would be better advised to pay attention to best practices in the face of a massive connection backlog.

Regards,
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Arnaud Lacombe-6
Hi,

On Wed, Jan 4, 2012 at 4:42 PM, Chuck Swiger <[hidden email]> wrote:
> On Jan 4, 2012, at 1:03 PM, Dan The Man wrote:
>>> However, I'm not convinced that it is useful to do this.  At some point, you are better off timing out and retrying via exponential backoff than you are queuing hundreds of thousands of connections in the hopes that they will eventually be serviced by something sometime considerably later.
>>
>> I agree completely, in practical application this makes sense, but why should the OS dictate not being able to temporarily set that setting higher in order to fully benchmark the application at 100k+ in the listen queue if the developer so chooses? I think that alone should be a good reason, to make freebsd developer friendly.
>
> The job of the OS is to manage resources on behalf of the users and processes using the system.
>
No. The job of the OS is to service the user with the resource
available, not constrict the user within some arbitrary predefined
wall when there is still plenty of room available. If resource become
scarce, then take action.

> Some developers feel that VM means that the system should always claim have more memory available, but always saying "yes" isn't "managing resources".  I'd rather have the OS return a null pointer and set ENOMEM when someone tries to malloc() more memory than the system (including swap, VM overcommit, etc) has, and I expect developers to code well enough to handle malloc() failures.
>
this is merely a policy issue, not yours to impose.

> Setting the listen queue to an arbitrarily high value isn't useful, and developers would be better advised to pay attention to best practices in the face of a massive connection backlog.
>
Stress-testing isn't about "best practice". It is about shaking enough
the system to highlight weak point.

 - Arnaud

> Regards,
> --
> -Chuck
>
> _______________________________________________
> [hidden email] mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "[hidden email]"
_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
On Jan 4, 2012, at 1:49 PM, Arnaud Lacombe wrote:

> Hi,
>
> On Wed, Jan 4, 2012 at 4:42 PM, Chuck Swiger <[hidden email]> wrote:
>> On Jan 4, 2012, at 1:03 PM, Dan The Man wrote:
>>>> However, I'm not convinced that it is useful to do this.  At some point, you are better off timing out and retrying via exponential backoff than you are queuing hundreds of thousands of connections in the hopes that they will eventually be serviced by something sometime considerably later.
>>>
>>> I agree completely, in practical application this makes sense, but why should the OS dictate not being able to temporarily set that setting higher in order to fully benchmark the application at 100k+ in the listen queue if the developer so chooses? I think that alone should be a good reason, to make freebsd developer friendly.
>>
>> The job of the OS is to manage resources on behalf of the users and processes using the system.
>
> No. The job of the OS is to service the user with the resource
> available, not constrict the user within some arbitrary predefined
> wall when there is still plenty of room available. If resource become
> scarce, then take action.

It is not arbitrary.  Systems ought to provide sensible limits, which can be adjusted if needed and appropriate.  The fact that a system might have 50,000 file descriptors globally available does not mean that it would be OK for any random process to consume half of them, even if there is still adequate room left for other tasks.  It's common for "ulimit -n" to be set to 256 or 1024.

>> Some developers feel that VM means that the system should always claim have more memory available, but always saying "yes" isn't "managing resources".  I'd rather have the OS return a null pointer and set ENOMEM when someone tries to malloc() more memory than the system (including swap, VM overcommit, etc) has, and I expect developers to code well enough to handle malloc() failures.
>
> this is merely a policy issue, not yours to impose.

If we're speaking of machines which I administer, it is a policy issue that would be mine to impose.
If we're speaking of someone else's machines, then they can set their own policies as they please.

>> Setting the listen queue to an arbitrarily high value isn't useful, and developers would be better advised to pay attention to best practices in the face of a massive connection backlog.
>
> Stress-testing isn't about "best practice". It is about shaking enough
> the system to highlight weak point.

Yes.  If the system doesn't handle connectivity problems via something like exponential backoff, then the weak point is poor software design and not FreeBSD being unwilling to set the socket listen queue to a value in the hundreds of thousands.

Regards,
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man

On Wed, 4 Jan 2012, Chuck Swiger wrote:

> On Jan 4, 2012, at 1:49 PM, Arnaud Lacombe wrote:
>> Hi,
>>
>> On Wed, Jan 4, 2012 at 4:42 PM, Chuck Swiger <[hidden email]> wrote:
>>> On Jan 4, 2012, at 1:03 PM, Dan The Man wrote:
>>>>> However, I'm not convinced that it is useful to do this.  At some point, you are better off timing out and retrying via exponential backoff than you are queuing hundreds of thousands of connections in the hopes that they will eventually be serviced by something sometime considerably later.
>>>>
>>>> I agree completely, in practical application this makes sense, but why should the OS dictate not being able to temporarily set that setting higher in order to fully benchmark the application at 100k+ in the listen queue if the developer so chooses? I think that alone should be a good reason, to make freebsd developer friendly.
>>>
>>> The job of the OS is to manage resources on behalf of the users and processes using the system.
>>
>> No. The job of the OS is to service the user with the resource
>> available, not constrict the user within some arbitrary predefined
>> wall when there is still plenty of room available. If resource become
>> scarce, then take action.
>
> It is not arbitrary.  Systems ought to provide sensible limits, which can be adjusted if needed and appropriate.  The fact that a system might have 50,000 file descriptors globally available does not mean that it would be OK for any random process to consume half of them, even if there is still adequate room left for other tasks.  It's common for "ulimit -n" to be set to 256 or 1024.

Sensibly limits means a sensible stock default, not imposing an OS limit
on what admin/developer can set on his own hardware.

With the new IBM developments underway of 16 core atom
processors and hundreds of gigabytes of memory, surely a backlog of 100k
is manageable. Or what about the future of 500 core systems with a
terrabyte of memory, 100k listen queue could be processed instantly.

>
>>> Some developers feel that VM means that the system should always claim have more memory available, but always saying "yes" isn't "managing resources".  I'd rather have the OS return a null pointer and set ENOMEM when someone tries to malloc() more memory than the system (including swap, VM overcommit, etc) has, and I expect developers to code well enough to handle malloc() failures.
>>
>> this is merely a policy issue, not yours to impose.
>
> If we're speaking of machines which I administer, it is a policy issue that would be mine to impose.
> If we're speaking of someone else's machines, then they can set their own policies as they please.
>
>>> Setting the listen queue to an arbitrarily high value isn't useful, and developers would be better advised to pay attention to best practices in the face of a massive connection backlog.
>>
>> Stress-testing isn't about "best practice". It is about shaking enough
>> the system to highlight weak point.
>
> Yes.  If the system doesn't handle connectivity problems via something like exponential backoff, then the weak point is poor software design and not FreeBSD being unwilling to set the socket listen queue to a value in the hundreds of thousands.
>

I think what me and Arnaud are trying to say here, is let freebsd use a
sensible default value, but let the admin dictate the actual policy if he
so chooses to change it for stress testing, future proofing or anything
else.

Dan.


--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]
_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Arnaud Lacombe-6
In reply to this post by Dan The Man
Hi,

On Wed, Jan 4, 2012 at 3:22 PM, Dan The Man <[hidden email]> wrote:

>
>
> sunsaturn:~# sysctl -w kern.ipc.somaxconn=200000
> kern.ipc.somaxconn: 4096
> sysctl: kern.ipc.somaxconn: Invalid argument
> sunsaturn:~# sysctl -w kern.ipc.somaxconn=65536
> kern.ipc.somaxconn: 4096
> sysctl: kern.ipc.somaxconn: Invalid argument
> sunsaturn:~# sysctl -w kern.ipc.somaxconn=65535
> kern.ipc.somaxconn: 4096 -> 65535
> sunsaturn:~#
>
> Trying to stress test a framework here that tosses 100k of connections into
> a listen queue before doing anything, I realize I'll have to use multiple
> local IPs get get around port limitations, but why is this backlog using a
> limit?
>
This is an arbitrary implementation limitation. A bit of code
archaeology reveals that the explicit limitation was introduced in
1,226 of kern/uipc_socket.c[0]. Quoting the commit log:

glebus@
<<
- Convert so_qlen, so_incqlen, so_qlimit fields of struct socket from
  short to unsigned short.
- Add SYSCTL_PROC() around somaxconn, not accepting values < 1 or > U_SHRTMAX.

Before this change setting somaxconn to smth above 32767 and calling
listen(fd, -1) lead to a socket, which doesn't accept connections at all.

Reviewed by: rwatson
Reported by: Igor Sysoev
>>

so the limited width of some `struct socket' fields enforces this
limitation. Now, the reason for `so_qlen', `so_incqlen', `so_qlimit'
to be so limited might be lost in the arcane of time. After all "640K
ought to be enough for anyone", doesn't it ?

 - Arnaud

[0]: http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/uipc_socket.c#rev1.226



>
> Dan.
>
>
> --
> Dan The Man
> CTO/ Senior System Administrator
> Websites, Domains and Everything else
> http://www.SunSaturn.com
> Email: [hidden email]
> _______________________________________________
> [hidden email] mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "[hidden email]"
_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man
In reply to this post by Dan The Man


On Wed, 4 Jan 2012, Dan The Man wrote:

>
> On Wed, 4 Jan 2012, Chuck Swiger wrote:
>
>> On Jan 4, 2012, at 1:49 PM, Arnaud Lacombe wrote:
>>> Hi,
>>>
>>> On Wed, Jan 4, 2012 at 4:42 PM, Chuck Swiger <[hidden email]> wrote:
>>>> On Jan 4, 2012, at 1:03 PM, Dan The Man wrote:
>>>>>> However, I'm not convinced that it is useful to do this.  At some
>>>>>> point, you are better off timing out and retrying via exponential
>>>>>> backoff than you are queuing hundreds of thousands of connections in
>>>>>> the hopes that they will eventually be serviced by something sometime
>>>>>> considerably later.
>>>>>
>>>>> I agree completely, in practical application this makes sense, but why
>>>>> should the OS dictate not being able to temporarily set that setting
>>>>> higher in order to fully benchmark the application at 100k+ in the
>>>>> listen queue if the developer so chooses? I think that alone should be a
>>>>> good reason, to make freebsd developer friendly.
>>>>
>>>> The job of the OS is to manage resources on behalf of the users and
>>>> processes using the system.
>>>
>>> No. The job of the OS is to service the user with the resource
>>> available, not constrict the user within some arbitrary predefined
>>> wall when there is still plenty of room available. If resource become
>>> scarce, then take action.
>>
>> It is not arbitrary.  Systems ought to provide sensible limits, which can
>> be adjusted if needed and appropriate.  The fact that a system might have
>> 50,000 file descriptors globally available does not mean that it would be
>> OK for any random process to consume half of them, even if there is still
>> adequate room left for other tasks.  It's common for "ulimit -n" to be set
>> to 256 or 1024.
>
> Sensibly limits means a sensible stock default, not imposing an OS limit on
> what admin/developer can set on his own hardware.
>
> With the new IBM developments underway of 16 core atom processors and
> hundreds of gigabytes of memory, surely a backlog of 100k is manageable. Or
> what about the future of 500 core systems with a terrabyte of memory, 100k
> listen queue could be processed instantly.
>
>>
>>>> Some developers feel that VM means that the system should always claim
>>>> have more memory available, but always saying "yes" isn't "managing
>>>> resources".  I'd rather have the OS return a null pointer and set ENOMEM
>>>> when someone tries to malloc() more memory than the system (including
>>>> swap, VM overcommit, etc) has, and I expect developers to code well
>>>> enough to handle malloc() failures.
>>>
>>> this is merely a policy issue, not yours to impose.
>>
>> If we're speaking of machines which I administer, it is a policy issue that
>> would be mine to impose.
>> If we're speaking of someone else's machines, then they can set their own
>> policies as they please.
>>
>>>> Setting the listen queue to an arbitrarily high value isn't useful, and
>>>> developers would be better advised to pay attention to best practices in
>>>> the face of a massive connection backlog.
>>>
>>> Stress-testing isn't about "best practice". It is about shaking enough
>>> the system to highlight weak point.
>>
>> Yes.  If the system doesn't handle connectivity problems via something like
>> exponential backoff, then the weak point is poor software design and not
>> FreeBSD being unwilling to set the socket listen queue to a value in the
>> hundreds of thousands.
>>
>
> I think what me and Arnaud are trying to say here, is let freebsd use a
> sensible default value, but let the admin dictate the actual policy if he so
> chooses to change it for stress testing, future proofing or anything else.
>

How about a sensible solution? I think everyone has been making valid
points here, about sensible limits for all programs on system and per
application limit changes.

How about changing the hard limit high, and an application can make the
soft limit higher as it sees fit, its a win win, like ulimit does with
openfiles and such.



Dan.

--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Xin LI-5
Hi,

On Wed, Jan 4, 2012 at 2:50 PM, Dan The Man <[hidden email]> wrote:
[...]
> How about a sensible solution? I think everyone has been making valid points
> here, about sensible limits for all programs on system and per application
> limit changes.
>
> How about changing the hard limit high, and an application can make the soft
> limit higher as it sees fit, its a win win, like ulimit does with openfiles
> and such.

Looking at the code, it seems that there is no reason we can't make
this u_short be u_int and just change the limit to U_INTMAX.  The
biggest problem that one would hit here is that changes the binary
interface of both struct xsocket and struct socket consumers.

Cheers,
--
Xin LI <[hidden email]> https://www.delphij.net/
FreeBSD - The Power to Serve! Live free or die
_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
In reply to this post by Dan The Man
Hi--

On Jan 4, 2012, at 2:23 PM, Dan The Man wrote:
>> It is not arbitrary.  Systems ought to provide sensible limits, which can be adjusted if needed and appropriate.  The fact that a system might have 50,000 file descriptors globally available does not mean that it would be OK for any random process to consume half of them, even if there is still adequate room left for other tasks.  It's common for "ulimit -n" to be set to 256 or 1024.
>
> Sensibly limits means a sensible stock default, not imposing an OS limit on what admin/developer can set on his own hardware.

In point of fact, protocols like TCP/IP impose limits on what is possible.  It is in fact the job of the OS to say "no" when a developer asks for a TTL of a million via setsockopt(), because RFC-791 limits the maximum value of the "time to live" field to 255.

> With the new IBM developments underway of 16 core atom processors and hundreds of gigabytes of memory, surely a backlog of 100k is manageable. Or what about the future of 500 core systems with a terrabyte of memory, 100k listen queue could be processed instantly.

Um.  I gather you don't have much background in operating system design or massively parallelized systems?

Due to locking constraints imposed by whatever synchronization mechanism and communications topology is employed between cores, you simply cannot just add more processors to a system and expect it to go faster in a linear fashion.  Having 500 cores contending over a single queue is almost certain to result in horrible performance.  Even though the problem of a bunch of independent requests is "embarrassingly parallelizeable", you do that by partitioning the queue into multiple pieces that are fed to different groups or pools of processors to minimize contention over a single data structure.

>> Yes.  If the system doesn't handle connectivity problems via something like exponential backoff, then the weak point is poor software design and not FreeBSD being unwilling to set the socket listen queue to a value in the hundreds of thousands.
>
> I think what me and Arnaud are trying to say here, is let freebsd use a sensible default value, but let the admin dictate the actual policy if he so chooses to change it for stress testing, future proofing or anything else.

FreeBSD does provide a sensible default value for the listen queue size.  It's tunable to a factor of about 1000 times larger, and is a value which is sufficiently large to hold a backlog of several minutes worth of connections, assuming you can process the requests at a very high rate to keep draining the queue.

There probably isn't a reasonable use-case for queuing unprocessed requests for longer than MAXTTL, which is about 4 minutes.  So, it's conceivable in theory for a high-volume server to want to set the listen queue to, say 1000 req/s * 255 (ie, MAXTTL), but I manage high volume servers for a living, and practical experience including measurements of latency and service performance suggests that tuning the listen queue up to on the order of a thousand or so is the inflection point after which it is better/necessary for the software to recognize and start doing overload mitigation then it is for the OS to blindly queue more requests.

Put more simply, there comes a point where saying "no", ie, dropping the connection with a reset, works better.

Regards,
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Dan The Man

On Wed, 4 Jan 2012, Chuck Swiger wrote:

> Hi--
>
> On Jan 4, 2012, at 2:23 PM, Dan The Man wrote:
>>> It is not arbitrary.  Systems ought to provide sensible limits, which can be adjusted if needed and appropriate.  The fact that a system might have 50,000 file descriptors globally available does not mean that it would be OK for any random process to consume half of them, even if there is still adequate room left for other tasks.  It's common for "ulimit -n" to be set to 256 or 1024.
>>
>> Sensibly limits means a sensible stock default, not imposing an OS limit on what admin/developer can set on his own hardware.
>
> In point of fact, protocols like TCP/IP impose limits on what is possible.  It is in fact the job of the OS to say "no" when a developer asks for a TTL of a million via setsockopt(), because RFC-791 limits the maximum value of the "time to live" field to 255.
>
>> With the new IBM developments underway of 16 core atom processors and hundreds of gigabytes of memory, surely a backlog of 100k is manageable. Or what about the future of 500 core systems with a terrabyte of memory, 100k listen queue could be processed instantly.
>
> Um.  I gather you don't have much background in operating system design or massively parallelized systems?
>
> Due to locking constraints imposed by whatever synchronization mechanism and communications topology is employed between cores, you simply cannot just add more processors to a system and expect it to go faster in a linear fashion.  Having 500 cores contending over a single queue is almost certain to result in horrible performance.  Even though the problem of a bunch of independent requests is "embarrassingly parallelizeable", you do that by partitioning the queue into multiple pieces that are fed to different groups or pools of processors to minimize contention over a single data structure.
>

I guess your calling me out to talk about what I'm doing based on that
statement:

First framework I was working on a few weeks back just had a parent
bind socket, then spawn a certain amount of children to do the accept on
the socket, so parent could just focus on dealing with SIGCHLD and what
not. I had issues with this design for some reason, all the sockets were
set to non-blocking etc, and using kqueue to monitor the socket, but
randomly I would have a 1-2 second delay at times from a child doing an accept, I was horrified
and changed design quickly.

New design, parent does all the accepts and passes blocking work to
children via socketpairs it created when forking. Now you talk about
scaling on multiple cores, well each child could have its own core to do
its blocking I/O on and each have its own processor time, which isn't
parallism , but I never said it was doing that.

The better part of this design is you have 1 process
utilizing a processor efficiently instead of paging the system with
useless processes. Also could could have other machines connect in to
parent and it could do same thing it does with children via a socket, so
in my opinion its more scalable and can centralize everything in one spot.
Obviously some cons to this design, you are passing data via socket pairs
instead of child writing directly to client.

To stress test this new design I simply wrote an asycronouse client
counterpart to create 100k of connections to parents listen queue, then it
would go off writing to each socket, of course soon as I reached 60k or so
client would get numerous failures due to OS limits. So my intention was
to see how long it would take children to process request and send
response back to client, starting from listen queue with 100k of fd's
ready to go I thought would have been really nice test not only for
testing applications speed but also testing cpu usage, I/O usage etc with
parent processing a client trying to talk to it 100k times at once to
really see how kqueue does.

Without being able to increase simple limits like these how ever going to
find where we can burn down the system and make it outperform epoll() one
day.

What it so bad to see how many fd's I could toss at kqueue before it
croaked? @60k was still handling like a champ with about 50 children
getting handed work in my tests.


>>> Yes.  If the system doesn't handle connectivity problems via something like exponential backoff, then the weak point is poor software design and not FreeBSD being unwilling to set the socket listen queue to a value in the hundreds of thousands.
>>
>> I think what me and Arnaud are trying to say here, is let freebsd use a sensible default value, but let the admin dictate the actual policy if he so chooses to change it for stress testing, future proofing or anything else.
>
> FreeBSD does provide a sensible default value for the listen queue size.  It's tunable to a factor of about 1000 times larger, and is a value which is sufficiently large to hold a backlog of several minutes worth of connections, assuming you can process the requests at a very high rate to keep draining the queue.
>
> There probably isn't a reasonable use-case for queuing unprocessed requests for longer than MAXTTL, which is about 4 minutes.  So, it's conceivable in theory for a high-volume server to want to set the listen queue to, say 1000 req/s * 255 (ie, MAXTTL), but I manage high volume servers for a living, and practical experience including measurements of latency and service performance suggests that tuning the listen queue up to on the order of a thousand or so is the inflection point after which it is better/necessary for the software to recognize and start doing overload mitigation then it is for the OS to blindly queue more requests.
>
> Put more simply, there comes a point where saying "no", ie, dropping the connection with a reset, works better.

I agree, listen queue of course will go to something reasonable when i was
done with testing.



Dan.

--
Dan The Man
CTO/ Senior System Administrator
Websites, Domains and Everything else
http://www.SunSaturn.com
Email: [hidden email]

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
On Jan 4, 2012, at 4:09 PM, Dan The Man wrote:
>>> With the new IBM developments underway of 16 core atom processors and hundreds of gigabytes of memory, surely a backlog of 100k is manageable. Or what about the future of 500 core systems with a terrabyte of memory, 100k listen queue could be processed instantly.
>>
>> Um.  I gather you don't have much background in operating system design or massively parallelized systems?
>>
>> Due to locking constraints imposed by whatever synchronization mechanism and communications topology is employed between cores, you simply cannot just add more processors to a system and expect it to go faster in a linear fashion.  Having 500 cores contending over a single queue is almost certain to result in horrible performance.  Even though the problem of a bunch of independent requests is "embarrassingly parallelizeable", you do that by partitioning the queue into multiple pieces that are fed to different groups or pools of processors to minimize contention over a single data structure.
>>
>
> I guess your calling me out to talk about what I'm doing based on that statement:

"calling you out" is the wrong notion-- I don't see much purpose in arguing about opinions.

On the other hand, I do criticize the notion that simply adding more cores will mean something goes faster.  If you're going to design or work on parallel systems, you've got to understand at least a little about synchronization overhead and communication latency, and the fact that there will come a point where adding more processors just results in more overhead rather than in more work being completed.

> First framework I was working on a few weeks back just had a parent bind socket, then spawn a certain amount of children to do the accept on the socket, so parent could just focus on dealing with SIGCHLD and what not. I had issues with this design for some reason, all the sockets were set to non-blocking etc, and using kqueue to monitor the socket, but randomly I would have a 1-2 second delay at times from a child doing an accept, I was horrified and changed design quickly.

Non-blocking?  You aren't/weren't sitting and spinning in the children, are you?

> New design, parent does all the accepts and passes blocking work to children via socketpairs it created when forking. Now you talk about scaling on multiple cores, well each child could have its own core to do its blocking I/O on and each have its own processor time, which isn't parallism , but I never said it was doing that.

Um.  You're the one who brought up the notion of "500 core systems".

The preforking worker pool model is a classic example from parallel computing.

> The better part of this design is you have 1 process utilizing a processor efficiently instead of paging the system with useless processes. Also could could have other machines connect in to parent and it could do same thing it does with children via a socket, so in my opinion its more scalable and can centralize everything in one spot.  Obviously some cons to this design, you are passing data via socket pairs instead of child writing directly to client.

Typical worker pools (ie, Apache httpd's) tend to block on resources like disk I/O for static resources, or talking to a database or some other service over the network for dynamic responses (mod_perl, mod_php, etc).  It's very common to run hundreds of httpd children on a machine that might not have even two cores.

If you have worker processes that tend to be CPU-bound, limiting the size of your worker pool to one process per available CPU might be reasonable.

> To stress test this new design I simply wrote an asycronouse client counterpart to create 100k of connections to parents listen queue, then it would go off writing to each socket, of course soon as I reached 60k or so client would get numerous failures due to OS limits. So my intention was to see how long it would take children to process request and send response back to client, starting from listen queue with 100k of fd's ready to go I thought would have been really nice test not only for testing applications speed but also testing cpu usage, I/O usage etc with parent processing a client trying to talk to it 100k times at once to really see how kqueue does.
>
> Without being able to increase simple limits like these how ever going to find where we can burn down the system and make it outperform epoll() one day.

I'm having difficulty parsing some of that.

If you want to understand the performance of the system, benchmarking it under normal conditions and any expected abnormal conditions makes sense.  But you were attempting to test with a massive backlog load scenario which isn't even possible with FreeBSD at the present time, as you discovered.  A useful benchmark would look at maximum throughput under load, and service time, and such, and you could readily compare the performance you see on FreeBSD versus whatever your epoll() implementation runs on.

> What it so bad to see how many fd's I could toss at kqueue before it croaked? @60k was still handling like a champ with about 50 children getting handed work in my tests.


Figure out the request capacity for your system.  Take a look at the service SLA.  Multiply them.
The result is the largest listen queue value that makes sense to use.

If you have a system which can do 100 requests per second, and it needs to return an answer to a given request in ten seconds, then setting the listen queue size to anything over 1000 is not just pointless, but counterproductive, because the answers will come too late to meet the SLA.  If the system faces a backlog that will take longer than 10 seconds to answer, then it needs to start dropping requests rather than continue to queue up more requests than it can handle in a sufficiently timely fashion.  *And* the side making requests really ought to recognize the overload condition, and mitigate against it.  See RFC 2914.

Regards,
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Xin LI-2
In reply to this post by Dan The Man
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 01/04/12 16:09, Dan The Man wrote:

>
> On Wed, 4 Jan 2012, Chuck Swiger wrote:
>
>> Hi--
>>
>> On Jan 4, 2012, at 2:23 PM, Dan The Man wrote:
>>>> It is not arbitrary.  Systems ought to provide sensible
>>>> limits, which can be adjusted if needed and appropriate.  The
>>>> fact that a system might have 50,000 file descriptors
>>>> globally available does not mean that it would be OK for any
>>>> random process to consume half of them, even if there is
>>>> still adequate room left for other tasks. It's common for
>>>> "ulimit -n" to be set to 256 or 1024.
>>>
>>> Sensibly limits means a sensible stock default, not imposing an
>>> OS limit on what admin/developer can set on his own hardware.
>>
>> In point of fact, protocols like TCP/IP impose limits on what is
>> possible.  It is in fact the job of the OS to say "no" when a
>> developer asks for a TTL of a million via setsockopt(), because
>> RFC-791 limits the maximum value of the "time to live" field to
>> 255.
>>
>>> With the new IBM developments underway of 16 core atom
>>> processors and hundreds of gigabytes of memory, surely a
>>> backlog of 100k is manageable. Or what about the future of 500
>>> core systems with a terrabyte of memory, 100k listen queue
>>> could be processed instantly.
>>
>> Um.  I gather you don't have much background in operating system
>> design or massively parallelized systems?
>>
>> Due to locking constraints imposed by whatever synchronization
>> mechanism and communications topology is employed between cores,
>> you simply cannot just add more processors to a system and expect
>> it to go faster in a linear fashion.  Having 500 cores contending
>> over a single queue is almost certain to result in horrible
>> performance.  Even though the problem of a bunch of independent
>> requests is "embarrassingly parallelizeable", you do that by
>> partitioning the queue into multiple pieces that are fed to
>> different groups or pools of processors to minimize contention
>> over a single data structure.
>>
>
> I guess your calling me out to talk about what I'm doing based on
> that statement:
>
> First framework I was working on a few weeks back just had a parent
> bind socket, then spawn a certain amount of children to do the
> accept on the socket, so parent could just focus on dealing with
> SIGCHLD and what not. I had issues with this design for some
> reason, all the sockets were set to non-blocking etc, and using
> kqueue to monitor the socket, but randomly I would have a 1-2
> second delay at times from a child doing an accept, I was horrified
> and changed design quickly.
>
> New design, parent does all the accepts and passes blocking work
> to children via socketpairs it created when forking. Now you talk
> about scaling on multiple cores, well each child could have its own
> core to do its blocking I/O on and each have its own processor
> time, which isn't parallism , but I never said it was doing that.
>
> The better part of this design is you have 1 process utilizing a
> processor efficiently instead of paging the system with useless
> processes. Also could could have other machines connect in to
> parent and it could do same thing it does with children via a
> socket, so in my opinion its more scalable and can centralize
> everything in one spot. Obviously some cons to this design, you are
> passing data via socket pairs instead of child writing directly to
> client.
>
> To stress test this new design I simply wrote an asycronouse
> client counterpart to create 100k of connections to parents listen
> queue, then it would go off writing to each socket, of course soon
> as I reached 60k or so client would get numerous failures due to OS
> limits. So my intention was to see how long it would take children
> to process request and send response back to client, starting from
> listen queue with 100k of fd's ready to go I thought would have
> been really nice test not only for testing applications speed but
> also testing cpu usage, I/O usage etc with parent processing a
> client trying to talk to it 100k times at once to really see how
> kqueue does.
>
> Without being able to increase simple limits like these how ever
> going to find where we can burn down the system and make it
> outperform epoll() one day.
>
> What it so bad to see how many fd's I could toss at kqueue before
> it croaked? @60k was still handling like a champ with about 50
> children getting handed work in my tests.
>
>
>>>> Yes.  If the system doesn't handle connectivity problems via
>>>> something like exponential backoff, then the weak point is
>>>> poor software design and not FreeBSD being unwilling to set
>>>> the socket listen queue to a value in the hundreds of
>>>> thousands.
>>>
>>> I think what me and Arnaud are trying to say here, is let
>>> freebsd use a sensible default value, but let the admin dictate
>>> the actual policy if he so chooses to change it for stress
>>> testing, future proofing or anything else.
>>
>> FreeBSD does provide a sensible default value for the listen
>> queue size.  It's tunable to a factor of about 1000 times larger,
>> and is a value which is sufficiently large to hold a backlog of
>> several minutes worth of connections, assuming you can process
>> the requests at a very high rate to keep draining the queue.
>>
>> There probably isn't a reasonable use-case for queuing
>> unprocessed requests for longer than MAXTTL, which is about 4
>> minutes.  So, it's conceivable in theory for a high-volume server
>> to want to set the listen queue to, say 1000 req/s * 255 (ie,
>> MAXTTL), but I manage high volume servers for a living, and
>> practical experience including measurements of latency and
>> service performance suggests that tuning the listen queue up to
>> on the order of a thousand or so is the inflection point after
>> which it is better/necessary for the software to recognize and
>> start doing overload mitigation then it is for the OS to blindly
>> queue more requests.
>>
>> Put more simply, there comes a point where saying "no", ie,
>> dropping the connection with a reset, works better.
>
> I agree, listen queue of course will go to something reasonable
> when i was done with testing.
Here is a patch which I have not tested, just compiled to validate,
which changes the u_short's to u_int's.

I am personally quite convinced that FreeBSD should make such change
though -- having more than 64K of outstanding and unhandled
connections does not sound a great idea (i.e. it's not a connection
limit after all, but the pending handle connection.  If my math were
right, 64K connections would require about 1Gbps bandwidth in and out
if they happen in the same second.)  But I agree this would be a good
stress test, which might expose some bugs we don't know today.

Cheers,
- --
Xin LI <[hidden email]> https://www.delphij.net/
FreeBSD - The Power to Serve! Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk8E/b4ACgkQOfuToMruuMBgEQCdF3qVnKsvTXexQmJXEn4wenZA
ujQAnjRpBEMW1AR0hIXaae2P8jJ/5PvE
=nGgG
-----END PGP SIGNATURE-----

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"

sockq.diff (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Chuck Swiger-2
Hi, Xin--

On Jan 4, 2012, at 5:32 PM, Xin Li wrote:
> I am personally quite convinced that FreeBSD should make such change
> though -- having more than 64K of outstanding and unhandled
> connections does not sound a great idea (i.e. it's not a connection
> limit after all, but the pending handle connection.  If my math were
> right, 64K connections would require about 1Gbps bandwidth in and out
> if they happen in the same second.)  But I agree this would be a good
> stress test, which might expose some bugs we don't know today.

I think I agree with the change from a correctness standpoint-- listen(2) accepts an int backlog argument.

I'm not convinced that there are many scenarios where needing to exceed a listen queue backlog of 64K would be beneficial to a real-world system, and I am sure there are many scenarios where it would be counterproductive, but folks can adjust kern.ipc.somaxconn as they see fit and perhaps Dan or others would gain some value from it.

Regards
--
-Chuck

_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: sysctl kern.ipc.somaxconn limit 65535 why?

Xin LI-2
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 01/04/12 17:49, Chuck Swiger wrote:

> Hi, Xin--
>
> On Jan 4, 2012, at 5:32 PM, Xin Li wrote:
>> I am personally quite convinced that FreeBSD should make such
>> change though -- having more than 64K of outstanding and
>> unhandled connections does not sound a great idea (i.e. it's not
>> a connection limit after all, but the pending handle connection.
>> If my math were right, 64K connections would require about 1Gbps
>> bandwidth in and out if they happen in the same second.)  But I
>> agree this would be a good stress test, which might expose some
>> bugs we don't know today.
>
> I think I agree with the change from a correctness standpoint--
> listen(2) accepts an int backlog argument.
>
> I'm not convinced that there are many scenarios where needing to
> exceed a listen queue backlog of 64K would be beneficial to a
> real-world system, and I am sure there are many scenarios where it
> would be counterproductive, but folks can adjust kern.ipc.somaxconn
> as they see fit and perhaps Dan or others would gain some value
> from it.

Ah sorry that should read something like "I'm not quite convinced" and
as you see I were explaining why in detail but apparently I missed to
check the spellings...

Cheers,
- --
Xin LI <[hidden email]> https://www.delphij.net/
FreeBSD - The Power to Serve! Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.18 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk8FBZkACgkQOfuToMruuMDQqQCfWPenaWKpC41i8CXJeuFPlAzg
y/cAnR2zTBCa1qG3/0G/nP/vDbQ5Z3vp
=lGcl
-----END PGP SIGNATURE-----
_______________________________________________
[hidden email] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[hidden email]"
Loading...