Welcome! Log In Create A New Profile

Advanced

Re: [nginx] SSL: ssl_buffer_size directive.

Maxim Dounin
December 22, 2013 05:28PM
Hello!

On Fri, Dec 20, 2013 at 10:58:43AM -0800, Ilya Grigorik wrote:

> Awesome, really glad to see this! A couple of followup questions...
>
> (a) Is there any way to force a packet flush on record end? At the moment
> nginx will fragment multiple records across packet boundaries, which is
> suboptimal as it means that I need a minimum of two packets to decode any
> record - e.g. if I set my record size to 1370 bytes, the first packet will
> contain the first full record plus another 20-50 bytes of next record.

There is OpenSSL socket layer on the way down. It may be possible
to achieve something with SSL_[CTX_]set_max_send_fragment() in
OpenSSL 1.0.0+, but I haven't looked into details. (As I already
said, I don't think that using packet-sized records is a good
idea, it looks like an overkill and waste of resources, both
network and CPU.)

> (b) Current NGX_SSL_BUFSIZE is set to 16KB which is effectively guaranteed
> to overflow the CWND of a new connection and introduce another RTT for
> interactive traffic - e.g. HTTP pages. I would love to see a lower starting
> record size to mitigate this problem -- defaults matter!

We are considering using 4k or 8k as the default in the
future. For now, the directive is mostly to simplify
experimenting with various buffer sizes.

> On the subject of optimizing record size, the GFE team at Google recently
> landed ~following logic:
>
> - new connections default to small record size
> -- each record fits into a TCP packet
> -- packets are flushed at record boundaries
> - server tracks number of bytes written since reset and timestamp of last
> write
> -- if bytes written > {configurable byte threshold) then boost record size
> to 16KB
> -- if last write timestamp > now - {configurable time threshold} then reset
> sent byte count
>
> In other words, start with small record size to optimize for delivery of
> small/interactive objects (bulk of HTTP traffic). Then, if large file is
> being transferred bump record size to 16KB and continue using that until
> the connection goes idle.. when communication resumes, start with small
> record size and repeat. Overall, this is aimed to optimize delivery of
> small files where incremental delivery is a priority, and also for large
> downloads where overall throughput is a priority.
>
> Both byte and time thresholds are exposed as configurable flags, and
> current defaults in GFE are 1MB and 1s.
>
> This would require a bit more work than the current patch, but I'd love to
> see a similar strategy in nginx. Hardcoding a fixed record size will
> inevitably lead to suboptimal delivery of either interactive or bulk
> traffic. Thoughts?

While some logic like this is certainly needed to use packet-sized
records, it looks overcomplicated and probably not at all needed
with 4k/8k buffers.

--
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

[nginx] SSL: ssl_buffer_size directive.

Maxim Dounin 2153 December 20, 2013 07:20AM

Re: [nginx] SSL: ssl_buffer_size directive.

Ilya Grigorik 943 December 20, 2013 02:00PM

Re: [nginx] SSL: ssl_buffer_size directive.

Alex 472 December 20, 2013 06:07PM

Re: [nginx] SSL: ssl_buffer_size directive.

Maxim Dounin 597 December 22, 2013 05:28PM

Re: [nginx] SSL: ssl_buffer_size directive.

Ilya Grigorik 932 January 07, 2014 06:44PM



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

Online Users

Guests: 104
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