Mercurial > hg > nginx
annotate auto/cc/sunc @ 6412:4ba91a4c66a3
HTTP/2: implemented per request timeouts (closes #626).
Previously, there were only three timeouts used globally for the whole HTTP/2
connection:
1. Idle timeout for inactivity when there are no streams in processing
(the "http2_idle_timeout" directive);
2. Receive timeout for incomplete frames when there are no streams in
processing (the "http2_recv_timeout" directive);
3. Send timeout when there are frames waiting in the output queue
(the "send_timeout" directive on a server level).
Reaching one of these timeouts leads to HTTP/2 connection close.
This left a number of scenarios when a connection can get stuck without any
processing and timeouts:
1. A client has sent the headers block partially so nginx starts processing
a new stream but cannot continue without the rest of HEADERS and/or
CONTINUATION frames;
2. When nginx waits for the request body;
3. All streams are stuck on exhausted connection or stream windows.
The first idea that was rejected was to detect when the whole connection
gets stuck because of these situations and set the global receive timeout.
The disadvantage of such approach would be inconsistent behaviour in some
typical use cases. For example, if a user never replies to the browser's
question about where to save the downloaded file, the stream will be
eventually closed by a timeout. On the other hand, this will not happen
if there's some activity in other concurrent streams.
Now almost all the request timeouts work like in HTTP/1.x connections, so
the "client_header_timeout", "client_body_timeout", and "send_timeout" are
respected. These timeouts close the request.
The global timeouts work as before.
Previously, the c->write->delayed flag was abused to avoid setting timeouts on
stream events. Now, the "active" and "ready" flags are manipulated instead to
control the processing of individual streams.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Wed, 24 Feb 2016 15:58:07 +0300 |
parents | 85dea406e18f |
children | 9eefb38f0005 |
rev | line source |
---|---|
561 | 1 |
2 # Copyright (C) Igor Sysoev | |
4412 | 3 # Copyright (C) Nginx, Inc. |
561 | 4 |
5 | |
1309 | 6 # Sun C 5.7 Patch 117837-04 2005/05/11 Sun Studio 10 |
7 # Sun C 5.8 2005/10/13 Sun Studio 11 | |
8 # Sun C 5.9 SunOS_i386 2007/05/03 Sun Studio 12 | |
9 # Sun C 5.9 SunOS_sparc 2007/05/03 | |
4004
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
10 # Sun C 5.10 SunOS_i386 2009/06/03 Sun Studio 12.1 |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
11 # Sun C 5.11 SunOS_i386 2010/08/13 Sun Studio 12.2 |
561 | 12 |
13 NGX_SUNC_VER=`$CC -V 2>&1 | grep 'Sun C' 2>&1 \ | |
702
67deba330372
auto/configure [ PAUSE ] hwcap bug
Igor Sysoev <igor@sysoev.ru>
parents:
697
diff
changeset
|
14 | sed -e 's/^.* Sun C \(.*\)/\1/'` |
561 | 15 |
16 echo " + Sun C version: $NGX_SUNC_VER" | |
17 | |
18 have=NGX_COMPILER value="\"Sun C $NGX_SUNC_VER\"" . auto/define | |
19 | |
20 | |
1309 | 21 cat << END > $NGX_AUTOTEST.c |
22 | |
23 int main() { printf("%d", __SUNPRO_C); } | |
24 | |
25 END | |
26 | |
27 eval "$CC -o $NGX_AUTOTEST $NGX_AUTOTEST.c >> $NGX_ERR 2>&1" | |
28 | |
29 if [ -x $NGX_AUTOTEST ]; then | |
30 ngx_sunc_ver=`$NGX_AUTOTEST` | |
31 fi | |
32 | |
5309
434548349838
Configure: fixed autotest cleanup commands.
Sergey Kandaurov <pluknet@nginx.com>
parents:
4412
diff
changeset
|
33 rm -rf $NGX_AUTOTEST* |
1309 | 34 |
35 # 1424 == 0x590, Sun Studio 12 | |
36 | |
37 if [ "$ngx_sunc_ver" -ge 1424 ]; then | |
38 ngx_sparc32="-m32" | |
39 ngx_sparc64="-m64" | |
40 ngx_amd64="-m64" | |
41 | |
42 else | |
43 ngx_sparc32="-xarch=v8plus" | |
44 ngx_sparc64="-xarch=v9" | |
1343
d77866cf2cc4
fix building on amd64 by Sun Studio 11 and more early versions
Igor Sysoev <igor@sysoev.ru>
parents:
1324
diff
changeset
|
45 ngx_amd64="-xarch=amd64" |
1309 | 46 fi |
47 | |
744 | 48 case "$NGX_MACHINE" in |
561 | 49 |
744 | 50 i86pc) |
561 | 51 NGX_AUX=" src/os/unix/ngx_sunpro_x86.il" |
52 ;; | |
53 | |
744 | 54 sun4u | sun4v) |
561 | 55 NGX_AUX=" src/os/unix/ngx_sunpro_sparc64.il" |
56 ;; | |
57 | |
58 esac | |
59 | |
6383 | 60 MAIN_LINK= |
61 MODULE_LINK="-G" | |
62 | |
561 | 63 |
64 # optimizations | |
65 | |
4004
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
66 # 20736 == 0x5100, Sun Studio 12.1 |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
67 |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
68 if [ "$ngx_sunc_ver" -ge 20736 ]; then |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
69 ngx_fast="-fast" |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
70 |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
71 else |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
72 # older versions had problems with bit-fields |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
73 ngx_fast="-fast -xalias_level=any" |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
74 fi |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
75 |
1309 | 76 IPO=-xipo |
4004
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
77 CFLAGS="$CFLAGS $ngx_fast $IPO" |
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
78 CORE_LINK="$CORE_LINK $ngx_fast $IPO" |
561 | 79 |
80 | |
81 case $CPU in | |
82 pentium) | |
83 # optimize for Pentium and Athlon | |
84 CPU_OPT="-xchip=pentium" | |
85 ;; | |
86 | |
87 pentiumpro) | |
88 # optimize for Pentium Pro, Pentium II | |
89 CPU_OPT="-xchip=pentium_pro" | |
90 ;; | |
91 | |
92 pentium3) | |
93 # optimize for Pentium III | |
94 CPU_OPT="-xchip=pentium3" | |
95 #CPU_OPT="$CPU_OPT -xarch=sse" | |
96 CPU_OPT="$CPU_OPT -xcache=16/32/4:256/32/4" | |
97 ;; | |
98 | |
99 pentium4) | |
100 # optimize for Pentium 4 | |
101 CPU_OPT="-xchip=pentium4" | |
102 #CPU_OPT="$CPU_OPT -xarch=sse2" | |
103 CPU_OPT="$CPU_OPT -xcache=8/64/4:256/128/8" | |
104 ;; | |
105 | |
106 opteron) | |
107 # optimize for Opteron | |
108 CPU_OPT="-xchip=opteron" | |
109 #CPU_OPT="$CPU_OPT -xarch=sse2" | |
110 CPU_OPT="$CPU_OPT -xcache=64/64/2:1024/64/16" | |
111 ;; | |
112 | |
1308
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
113 sparc32) |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
114 # build 32-bit UltraSparc binary |
1309 | 115 CPU_OPT="$ngx_sparc32" |
116 CORE_LINK="$CORE_LINK $ngx_sparc32" | |
117 CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_sparc32" | |
1308
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
118 NGX_CPU_CACHE_LINE=64 |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
119 ;; |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
120 |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
121 sparc64) |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
122 # build 64-bit UltraSparc binary |
1309 | 123 CPU_OPT="$ngx_sparc64" |
124 CORE_LINK="$CORE_LINK $ngx_sparc64" | |
125 CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_sparc64" | |
1308
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
126 NGX_CPU_CACHE_LINE=64 |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
127 ;; |
63fa39cf8bd0
--with-cpu-opt=sparc32 and --with-cpu-opt=sparc64
Igor Sysoev <igor@sysoev.ru>
parents:
1307
diff
changeset
|
128 |
561 | 129 amd64) |
130 # build 64-bit amd64 binary | |
1309 | 131 CPU_OPT="$ngx_amd64" |
132 CORE_LINK="$CORE_LINK $ngx_amd64" | |
1324
d01f9856e3a0
fix building on amd64 and add -xipo to the link stage
Igor Sysoev <igor@sysoev.ru>
parents:
1309
diff
changeset
|
133 CC_AUX_FLAGS="$CC_AUX_FLAGS $ngx_amd64" |
561 | 134 NGX_AUX=" src/os/unix/ngx_sunpro_amd64.il" |
1309 | 135 NGX_CPU_CACHE_LINE=64 |
561 | 136 ;; |
137 | |
138 esac | |
139 | |
140 | |
141 CFLAGS="$CFLAGS $CPU_OPT" | |
142 | |
143 | |
144 if [ ".$PCRE_OPT" = "." ]; then | |
4004
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
145 PCRE_OPT="$ngx_fast $IPO $CPU_OPT" |
561 | 146 fi |
147 | |
148 if [ ".$MD5_OPT" = "." ]; then | |
4004
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
149 MD5_OPT="$ngx_fast $IPO $CPU_OPT" |
561 | 150 fi |
151 | |
152 if [ ".$ZLIB_OPT" = "." ]; then | |
4004
84bd993b8cd3
Lower optimization level for Sun Studio before 12.1.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2818
diff
changeset
|
153 ZLIB_OPT="$ngx_fast $IPO $CPU_OPT" |
561 | 154 fi |
155 | |
156 | |
157 # stop on warning | |
158 CFLAGS="$CFLAGS -errwarn=%all" | |
1375
8d7120543619
add debug info for Sun Studio
Igor Sysoev <igor@sysoev.ru>
parents:
1343
diff
changeset
|
159 |
8d7120543619
add debug info for Sun Studio
Igor Sysoev <igor@sysoev.ru>
parents:
1343
diff
changeset
|
160 # debug |
8d7120543619
add debug info for Sun Studio
Igor Sysoev <igor@sysoev.ru>
parents:
1343
diff
changeset
|
161 CFLAGS="$CFLAGS -g" |