From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00, RP_MATCHES_RCVD shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id BC03D2095D for ; Sat, 18 Mar 2017 00:54:24 +0000 (UTC) From: Eric Wong To: yahns-public@yhbt.net Subject: [PATCH] doc: design_notes: we do not use EPOLLEXCLUSIVE Date: Sat, 18 Mar 2017 00:54:24 +0000 Message-Id: <20170318005424.11276-1-yahns-public@yhbt.net> List-Id: And clarify that we only have one thread by default. Since EPOLLEXCLUSIVE seems to have gotten some more press, I guess we should emphasize our design does not rely on it. --- Documentation/design_notes.txt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Documentation/design_notes.txt b/Documentation/design_notes.txt index 308faa6..68d31bc 100644 --- a/Documentation/design_notes.txt +++ b/Documentation/design_notes.txt @@ -17,9 +17,12 @@ socket we have inside the kernel. Each listen queue has a dedicated thread pool running _blocking_ accept(2) (or accept4(2)) syscall in a loop. We use dedicated threads and blocking accept to benefit from "wake-one" behavior in the Linux -kernel. By default, this thread pool only has thread per-process, doing +kernel. By default, this thread pool only has one thread per-process, doing nothing but accepting sockets and injecting into to the event queue -(used by epoll or kqueue). +(used by epoll or kqueue) so a worker thread pool can pick them up. + +This design makes EPOLLEXCLUSIVE in Linux 4.5+ unnecessary to us, +our listen sockets are never registered with epoll or kqueue. worker thread pool ------------------ @@ -38,7 +41,7 @@ allows us to guarantee exclusive access to a client socket without additional locks managed in userspace. Idle threads will sit performing epoll_wait(2) (or kevent(2)) -indefinitely until a socket is reported as "ready" by the kernel. +indefinitely until a client socket is reported as "ready" by the kernel. queue flow ---------- -- EW