--- man/systemd.socket.xml | 9 +++++++++ src/core/dbus-socket.c | 2 ++ src/core/load-fragment-gperf.gperf.m4 | 1 + src/core/socket.c | 7 ++++++- src/core/socket.h | 1 + 5 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml index 92a9275..327c098 100644 --- a/man/systemd.socket.xml +++ b/man/systemd.socket.xml @@ -528,6 +528,15 @@ </varlistentry> <varlistentry> + <term><varname>LazyDistribute=</varname></term> + <listitem><para>Takes an boolean + value. If true, Distribute=n workers will not be spawned + simultameously, but one at a time while connections come it + until n are running. Because of the nature of SO_REUSEPORT workers are + spawned at an exponentially decreasing rate to the number of incoming connections.</para></listitem> + </varlistentry> + + <varlistentry> <term><varname>SmackLabel=</varname></term> <term><varname>SmackLabelIPIn=</varname></term> <term><varname>SmackLabelIPOut=</varname></term> diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c index 4644007..4e2a31d 100644 --- a/src/core/dbus-socket.c +++ b/src/core/dbus-socket.c @@ -69,6 +69,7 @@ " <property name=\"Result\" type=\"s\" access=\"read\"/>\n" \ " <property name=\"ReusePort\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"Distribute\" type=\"u\" access=\"read\"/>\n" \ + " <property name=\"LazyDistribute\" type=\"b\" access=\"read\"/>\n" \ " <property name=\"SmackLabel\" type=\"s\" access=\"read\"/>\n" \ " <property name=\"SmackLabelIPIn\" type=\"s\" access=\"read\"/>\n" \ " <property name=\"SmackLabelIPOut\" type=\"s\" access=\"read\"/>\n" \ @@ -198,6 +199,7 @@ static const BusProperty bus_socket_properties[] = { { "Result", bus_socket_append_socket_result, "s", offsetof(Socket, result) }, { "ReusePort", bus_property_append_bool, "b", offsetof(Socket, reuseport) }, { "Distribute", bus_property_append_unsigned, "u", offsetof(Socket, distribute) }, + { "LazyDistribute", bus_property_append_bool, "b", offsetof(Socket, lazy_distribute) }, { "SmackLabel", bus_property_append_string, "s", offsetof(Socket, smack), true }, { "SmackLabelIPIn", bus_property_append_string, "s", offsetof(Socket, smack_ip_in), true }, { "SmackLabelIPOut",bus_property_append_string, "s", offsetof(Socket, smack_ip_out), true }, diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4 index 4058a1f..a023b0e 100644 --- a/src/core/load-fragment-gperf.gperf.m4 +++ b/src/core/load-fragment-gperf.gperf.m4 @@ -212,6 +212,7 @@ Socket.PassSecurity, config_parse_bool, 0, Socket.TCPCongestion, config_parse_string, 0, offsetof(Socket, tcp_congestion) Socket.ReusePort, config_parse_bool, 0, offsetof(Socket, reuseport) Socket.Distribute, config_parse_unsigned, 0, offsetof(Socket, distribute) +Socket.LazyDistribute, config_parse_bool, 0, offsetof(Socket, lazy_distribute) Socket.MessageQueueMaxMessages, config_parse_long, 0, offsetof(Socket, mq_maxmsg) Socket.MessageQueueMessageSize, config_parse_long, 0, offsetof(Socket, mq_msgsize) Socket.Service, config_parse_socket_service, 0, 0 diff --git a/src/core/socket.c b/src/core/socket.c index 10a0d95..c968902 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -514,6 +514,11 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { "%sDistribute: %d\n", prefix, s->distribute); + if (s->lazy_distribute) + fprintf(f, + "%sLazyDistribute: %s\n", + prefix, yes_no(s->lazy_distribute)); + if (s->smack) fprintf(f, "%sSmackLabel: %s\n", @@ -1554,7 +1559,7 @@ static void socket_enter_running(Socket *s, int cfd) { socket_enter_listening(s); } - } while(s->distribute > s->n_connections); + } while(s->distribute > s->n_connections && !(s->lazy_distribute)); /* Notify clients about changed counters */ unit_add_to_dbus_queue(UNIT(s)); diff --git a/src/core/socket.h b/src/core/socket.h index 5928356..98fe680 100644 --- a/src/core/socket.h +++ b/src/core/socket.h @@ -149,6 +149,7 @@ struct Socket { bool reuseport; /* implies reuseport */ unsigned distribute; + bool lazy_distribute; long mq_maxmsg; long mq_msgsize; -- 1.8.4.3 _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel