On Thu, Aug 28, 2014 at 12:23 AM, Lu, Yingqi <yingqi...@intel.com> wrote:
> Hi Sephe,
>
> Thanks for your email.
>
> The main difference between your patch and this prototype is that we create 
> certain number of duplicated listen sockets in the master process instead of 
> child processes. All the child processes have access to the same set of the 
> duplicated listen sockets. In this case, all the child processes are the 
> same, there is no special child needed. I think this addresses the Nginx 
> folks concern.
>


As I have said, the special last listen socket is for inheriting other
listen sockets '3-way hand shaken but not accepted' sockets.
It is used to support non-disruptive binary upgrading.  Kernel side
also has work to do, that's why I asked about how linux handles
non-disruptive binary upgrading in kernel.  e.g. in DragonFly:
S1: s1 s2 s3
S2: s4 s5 s6
If S2 is closed, then
S1: s1 s2 s3 s4 s5 s6

S1 and S2 are SO_REUSEPORT listen sockets, s1~s6 are '3-way hand
shaken but not accepted' sockets.

Maybe you should check Linux's SO_REUSEPORT implementation first.


> Also, the number of the duplicated listen sockets is calculated as 1/8 of the 
> number of active CPU threads (when the system has only 8 or less active 
> threads, there is no duplication). It has nothing to do with the number of 
> the child process. We use this way to extend the system CPU scalability (when 
> needed) as well as make sure there will not be a lot of listen sockets open 
> in the kernel.
>


It's OS specific, in DragonFly, we get best performance if worker
process uses its own listen socket due to the nature of its network
stack design.


> Our prototype also testes the availability of the SO_REUSEPORT feature. When 
> the feature is not available, it will fall back to the default behavior. I 
> test this on Linux Kernel 3.8.8 where the feature is not available.


As I said, SO_REUSEPORT is defined even in BSD 4.4.  And
setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on));
will return 0 on all BSDs.  But FreeBSD and other BSDs SO_REUSEPORT
obviously do _not_ work in the way like Linux and DragonFly.

Best Regards,
sephe

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel

Reply via email to