Welcome! Log In Create A New Profile

Advanced

Re: [PATCH 11 of 14] Proxy: split configured header names and values

Maxim Dounin
July 03, 2017 10:20AM
Hello!

On Thu, Jun 22, 2017 at 01:33:15PM -0700, Piotr Sikora via nginx-devel wrote:

> # HG changeset patch
> # User Piotr Sikora <piotrsikora@google.com>
> # Date 1489618535 25200
> # Wed Mar 15 15:55:35 2017 -0700
> # Node ID 0637acdb51e29e1f68f5f3e762115c702cab4e72
> # Parent 068381014f256ad6e2dc490bacc2529cebbb0462
> Proxy: split configured header names and values.
>
> Previously, each configured header was represented in one of two ways,
> depending on whether or not its value included any variables.
>
> If the value didn't include any variables, then it would be represented
> as as a single script that contained complete header line with HTTP/1.1
> delimiters, i.e.:
>
> "Header: value\r\n"
>
> But if the value included any variables, then it would be represented
> as a series of three scripts: first contained header name and the ": "
> delimiter, second evaluated to header value, and third contained only
> "\r\n", i.e.:
>
> "Header: "
> "$value"
> "\r\n"
>
> This commit changes that, so that each configured header is represented
> as a series of two scripts: first contains only header name, and second
> contains (or evaluates to) only header value, i.e.:
>
> "Header"
> "$value"
>
> or
>
> "Header"
> "value"
>
> This not only makes things more consistent, but also allows header name
> and value to be accessed separately.
>
> Signed-off-by: Piotr Sikora <piotrsikora@google.com>

As suggested during previous review iteration, it would be
interesting to see some benchmarks. Here they are.

With 1000 static headers "proxy_set_header X-Foo foo;" the new
variant is slightly slower (numbers are in requests per second,
higher is better):

$ ministat t.current.n t.patched.n
x t.current.n
+ t.patched.n
+------------------------------------------------------------------------------+
|+ + + + ++ + + x x x x xx x|
| |___________A_____M_____| |_______A__M____| |
+------------------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 7 793.883 820.497 811.498 807.94229 10.111563
+ 8 725.285 770.099 759.39 752.68988 15.026166
Difference at 95.0% confidence
-55.2524 +/- 14.5227
-6.83866% +/- 1.7975%
(Student's t, pooled s = 12.991)

It is considerably faster when using variables though, again with
1000 headers "proxy_set_header X-Foo $request_uri;":

$ ministat t.current.vars.n t.patched.vars.n
x t.current.vars.n
+ t.patched.vars.n
+------------------------------------------------------------------------------+
| x ++ + |
|x xxx x + + ++ + |
| |___A__| |______A_M___||
+------------------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 8 365.499 415.19 385.856 386.026 14.078621
+ 8 605.499 690.492 681.396 671.80087 27.852872
Difference at 95.0% confidence
285.775 +/- 23.6679
74.03% +/- 6.13117%
(Student's t, pooled s = 22.068)

Given that using variables is much more common, overral the patch
looks clearly beneficial.

> diff -r 068381014f25 -r 0637acdb51e2 src/http/modules/ngx_http_proxy_module.c
> --- a/src/http/modules/ngx_http_proxy_module.c
> +++ b/src/http/modules/ngx_http_proxy_module.c
> @@ -1151,6 +1151,7 @@ static ngx_int_t
> ngx_http_proxy_create_request(ngx_http_request_t *r)
> {
> size_t len, uri_len, loc_len, body_len;
> + size_t key_len, val_len;

Style, should be only one type instead:

- size_t len, uri_len, loc_len, body_len;
- size_t key_len, val_len;
+ size_t len, uri_len, loc_len, body_len,
+ key_len, val_len;

[...]

Committed with the above change, thanks.

--
Maxim Dounin
http://nginx.org/
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[PATCH 01 of 14] Output chain: propagate last_buf flag to c->send_chain()

Piotr Sikora via nginx-devel 908 June 22, 2017 04:36PM

[PATCH 02 of 14] Upstream keepalive: preserve c->data

Piotr Sikora via nginx-devel 329 June 22, 2017 04:36PM

[PATCH 03 of 14] HTTP/2: add debug logging of control frames

Piotr Sikora via nginx-devel 401 June 22, 2017 04:36PM

Re: [PATCH 03 of 14] HTTP/2: add debug logging of control frames

Valentin V. Bartenev 445 July 03, 2017 10:00AM

Re: [PATCH 03 of 14] HTTP/2: add debug logging of control frames

Piotr Sikora via nginx-devel 412 July 05, 2017 06:04AM

Re: [PATCH 03 of 14] HTTP/2: add debug logging of control frames

Valentin V. Bartenev 522 July 10, 2017 11:28AM

[PATCH 04 of 14] HTTP/2: s/client/peer/

Piotr Sikora via nginx-devel 455 June 22, 2017 04:36PM

[PATCH 05 of 14] HTTP/2: introduce h2c->conf_ctx

Piotr Sikora via nginx-devel 410 June 22, 2017 04:36PM

[PATCH 06 of 14] HTTP/2: introduce stream->fake_connection

Piotr Sikora via nginx-devel 472 June 22, 2017 04:36PM

[PATCH 07 of 14] HTTP/2: introduce ngx_http_v2_handle_event()

Piotr Sikora via nginx-devel 417 June 22, 2017 04:36PM

[PATCH 08 of 14] HTTP/2: add HTTP/2 to upstreams

Piotr Sikora via nginx-devel 674 June 22, 2017 04:36PM

[PATCH 09 of 14] Proxy: add "proxy_ssl_alpn" directive

Piotr Sikora via nginx-devel 609 June 22, 2017 04:36PM

Re: [PATCH 09 of 14] Proxy: add "proxy_ssl_alpn" directive

Maxim Dounin 375 July 13, 2017 12:30PM

[PATCH 10 of 14] Proxy: always emit "Host" header first

Piotr Sikora via nginx-devel 339 June 22, 2017 04:36PM

Re: [PATCH 10 of 14] Proxy: always emit "Host" header first

Maxim Dounin 437 July 04, 2017 12:50PM

Re: [PATCH 10 of 14] Proxy: always emit "Host" header first

Piotr Sikora via nginx-devel 326 July 05, 2017 06:30AM

[PATCH 11 of 14] Proxy: split configured header names and values

Piotr Sikora via nginx-devel 415 June 22, 2017 04:36PM

Re: [PATCH 11 of 14] Proxy: split configured header names and values

Maxim Dounin 414 July 03, 2017 10:20AM

[PATCH 13 of 14] Proxy: add "proxy_pass_trailers" directive

Piotr Sikora via nginx-devel 483 June 22, 2017 04:36PM

[PATCH 12 of 14] Proxy: add HTTP/2 support

Piotr Sikora via nginx-devel 1298 June 22, 2017 04:36PM

Re: [PATCH 12 of 14] Proxy: add HTTP/2 support

Maxim Dounin 495 July 19, 2017 10:36AM

Re: [PATCH 12 of 14] Proxy: add HTTP/2 support

Piotr Sikora via nginx-devel 475 July 25, 2017 09:30PM

Re: [PATCH 12 of 14] Proxy: add HTTP/2 support

Piotr Sikora via nginx-devel 508 July 31, 2017 06:06PM

Re: [PATCH 12 of 14] Proxy: add HTTP/2 support

Maxim Dounin 585 August 08, 2017 02:06PM

[PATCH 14 of 14] Cache: add HTTP/2 support

Piotr Sikora via nginx-devel 474 June 22, 2017 04:36PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 175
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready