Ok, thanks. I think I have an idea of what's happening:
- on short request bodies, window updates get omitted and gives a shrinking 
connection window
- the window size of the connection itself should be at max Value right from 
the start

I won't be able to do anything about it until later this week, though. 

//stefan

Am 28.11.2015 um 22:29 schrieb Bert Huijben <b...@qqmail.nl>:

>> -----Original Message-----
>> From: Bert Huijben [mailto:b...@qqmail.nl]
>> Sent: zaterdag 28 november 2015 14:32
>> To: stefan.eiss...@greenbytes.de; dev@httpd.apache.org
>> Subject: RE: No H2 Window updates!
> 
> 
>> In case of Subversion's real usage, I want to commit potentially hundreds
> of
>> MByte, so a connection level window of more than a few bytes would be
>> very
>> welcome.... With HTTP/1 we send out the data as fast as we can and the TCP
>> windowing handles this from the httpd side... Now the http/2 level
>> windowing
>> should handle this.
>> 
>> 
>> Mod_dav and mod_dav_svn are usually fast readers; just limited by trivial
>> disk io or xml processing in the common operations, so I don't expect real
>> problems there.
> 
> For my commits against the svn-master.apache.org repository my latency/ping
> time is +- 142 ms.
> 
> With the current simple algorithm and a maximum window of 64
> Kbyte/connection, I can send a theoretical maximum of 64 Kbyte/142 ms per
> connection to that server... which would be about 450 Kbyte/s.
> (=1/0.142*65536/1024)
> 
> That is < 1/30th of the bandwidth I have at my disposal (+- 150 Mbit).
> 
> But currently I don't even get anywhere near that as my window continues to
> shrink because some data is missed in accounting even after my simple patch.
> 
> 
> 
> For httpd we have to think carefully which algorithm we want to implement
> here. Preferably the algorithm should be better than TCP could, as we know
> the specifics of the http algorithm better than plain TCP could for
> HTTP/1,1. TCP does send a lot of window updates though... Almost every
> packet does.
> 
> 
> Solving the really hard problems, like this one, is the reason I didn't
> think the nghttp2 library would really be the solution for serf. 
> It is nice for such a library to provide a head start on the protocol level,
> but there is no way a standard library can really solve this scheduling
> problem in a generic way. (If it could do it, we had used that solution for
> TCP... and never had to resort to designing a HTTP/2 in the first place).
> 
> See https://en.wikipedia.org/wiki/TCP_window_scale_option for some
> introduction on how TCP was extended to work above the limit that currently
> applies to H2.
> 
> 
> Dynamic window sizing/scaling will have to be implemented at some point, at
> both the stream and the connection level... This will involve timing,
> measuring, etc. etc. Things nghttp2 can't do for us right now.
> And if I'm right this might take continuous optimizing for years to come.
> 
> 
> 
> When I connect to sites like google I immediately receive a large connection
> level window, to allow me to post huge blobs without a delay. (Haven't
> tested their stream level windows behavior yet)
> In serf I do something similar... and then apply a bit of throttling at the
> stream level.
> 
> 
> I would guess some clients have already implemented some of this, so we
> might be able to learn from their implementations... Clients will see much
> more incoming data than servers of course :).
> 
> 
>    Bert 
> 
> 

Reply via email to