about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-01-05 16:19:17 -0800
committerEric Wong <normalperson@yhbt.net>2011-01-05 16:22:30 -0800
commit4060b7742d047c0000fd1bf4ac2c3b9cae95585a (patch)
treea08bcf85730b69abdaf91c3e1fb7edc28fa264ef
parent9b6679ec50ecd184fccd195bd14bda3c6ea2070f (diff)
downloadrainbows-4060b7742d047c0000fd1bf4ac2c3b9cae95585a.tar.gz
Nagle's algorithm is harmful with the write-write-read sequence
during keepalive, so we disable it performance for users using
keepalive.  We always write headers with a separate write
because Rack response bodies may not always be ready for writing
when headers are.

This requires Unicorn 3.3.0
-rw-r--r--lib/rainbows.rb11
-rwxr-xr-xt/t0040-keepalive_requests-setting.sh5
2 files changed, 9 insertions, 7 deletions
diff --git a/lib/rainbows.rb b/lib/rainbows.rb
index 3f9058e..a8bfa78 100644
--- a/lib/rainbows.rb
+++ b/lib/rainbows.rb
@@ -1,8 +1,15 @@
 # -*- encoding: binary -*-
 require 'kgio'
 require 'unicorn'
-# the value passed to TCP_DEFER_ACCEPT actually matters in Linux 2.6.32+
-Unicorn::SocketHelper::DEFAULTS[:tcp_defer_accept] = 60
+Unicorn::SocketHelper::DEFAULTS.merge!({
+  # the value passed to TCP_DEFER_ACCEPT actually matters in Linux 2.6.32+
+  :tcp_defer_accept => 60,
+
+  # keep-alive performance sucks without this due to
+  # write(headers)-write(body)-read
+  # because we always write headers and bodies with two calls
+  :tcp_nodelay => true,
+})
 
 module Rainbows
 
diff --git a/t/t0040-keepalive_requests-setting.sh b/t/t0040-keepalive_requests-setting.sh
index aee6cd3..81194f1 100755
--- a/t/t0040-keepalive_requests-setting.sh
+++ b/t/t0040-keepalive_requests-setting.sh
@@ -6,11 +6,6 @@ t_begin "setup and start" && {
         rainbows_setup $model 50 666
         rtmpfiles curl_out curl_err
         grep 'keepalive_timeout 666' $unicorn_config
-        ed -s $unicorn_config <<EOF
-,s/listen.*/&, :tcp_nodelay => true/
-w
-EOF
-        grep nodelay $unicorn_config
         rainbows -E none -D env.ru -c $unicorn_config
         rainbows_wait_start
 }