From c28e2610cfc70e89a0ffabe18356d148afe98bfc Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 31 Jan 2011 15:51:30 -0800 Subject: enable TCP_NOPUSH/TCP_CORK by default It's actually harmless since Unicorn only supports "fast" applications that do not trickle, and we don't do keepalive so we'll always flush-on-close. This should reduce wakeups on the nginx proxy server if nginx is over TCP. Mongrel 1.x had TCP_CORK enabled by default, too. --- lib/unicorn/configurator.rb | 12 ++++++------ lib/unicorn/socket_helper.rb | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/unicorn/configurator.rb b/lib/unicorn/configurator.rb index 1aea3cd..9aa84f1 100644 --- a/lib/unicorn/configurator.rb +++ b/lib/unicorn/configurator.rb @@ -247,13 +247,13 @@ class Unicorn::Configurator # # Default: operating system defaults (usually Nagle's algorithm enabled) # - # +:tcp_nopush+: enables TCP_CORK in Linux or TCP_NOPUSH in FreeBSD + # +:tcp_nopush+: enables/disables TCP_CORK in Linux or TCP_NOPUSH in FreeBSD # - # This will prevent partial TCP frames from being sent out. - # Enabling +tcp_nopush+ is generally not needed or recommended as - # controlling +tcp_nodelay+ already provides sufficient latency - # reduction whereas Unicorn does not know when the best times are - # for flushing corked sockets. + # This is enabled by default as of Unicorn 3.4. This prevents partial + # TCP frames from being sent out and reduces wakeups in nginx if it is + # on a different machine. Since Unicorn is only designed for applications + # that send the response body quickly without keepalive, sockets will + # always be flushed on close to prevent delays. # # This has no effect on UNIX sockets. # diff --git a/lib/unicorn/socket_helper.rb b/lib/unicorn/socket_helper.rb index d07684a..9600b34 100644 --- a/lib/unicorn/socket_helper.rb +++ b/lib/unicorn/socket_helper.rb @@ -23,6 +23,10 @@ module Unicorn # same default value as Mongrel :backlog => 1024, + + # since we don't do keepalive, we'll always flush-on-close and + # this saves packets for everyone. + :tcp_nopush => true, } #:startdoc: -- cgit v1.2.3-24-ge0c7