--
You received this message because you are subscribed to the Google Groups "net-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to net-dev+unsubscribe@chromium.org.
To post to this group, send email to net...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/net-dev/aed17146-ff59-42f6-90fd-51c3a69be40e%40chromium.org.
Origin
header.--
You received this message because you are subscribed to the Google Groups "net-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to net-dev+unsubscribe@chromium.org.
To post to this group, send email to net...@chromium.org.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/net-dev/43b00f5b-6567-47dd-9c51-258f38f1fb35%40chromium.org.
To unsubscribe from this group and stop receiving emails from it, send an email to net-dev+u...@chromium.org.
To post to this group, send email to net...@chromium.org.
This is related to https://crbug.com/621597. In short, Chromium opens
up a number of TLS connections at the same time, and only finds out
that HTTP/2 is negotiated after a few roundtrips.
On Tue, Oct 11, 2016 at 9:34 PM, Johnson Li <johnso...@gmail.com> wrote:
>
> When visiting https://dropbox.com via HTTP/2, I noticed that there are two
> connection-id for the domain cfl.dropboxstatic.com. But It should be
> sufficient to keep only one connection for each domain when using HTTP/2.
>
> So I am wondering when and why chrom decides to create a new HTTP/2
> connection even if there has already been an old one.
>
> Thanks.
>
> --
> --
> Chromium Developers mailing list: chromi...@chromium.org
> View archives, change email options, or unsubscribe:
> http://groups.google.com/a/chromium.org/group/chromium-dev
I imagine that you are trying to use multiple HTTP/2 connections in parallel, with each requests assigned to one of the multiple connections at random, or to the one with the lowers number of active connections, or something like that. Like when six HTTP/1.1 connections are used parallel. Is that right? Unfortunately this is currently not supported by Chromium.
--
--
Chromium Developers mailing list: chromi...@chromium.org
View archives, change email options, or unsubscribe:
http://groups.google.com/a/chromium.org/group/chromium-dev
---
You received this message because you are subscribed to the Google Groups "Chromium-dev" group.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/chromium-dev/d83a8fad-6882-4217-85c6-dd156baf2295%40chromium.org.
Forwarding some discussion (with Jawad's permission) in case other developers also find it of interest.
Forwarded conversation
Subject: Private message regarding: [chromium-dev] Question about http/2 connection creation bahavior in chrome
------------------------
From: Jawad Manzoor <jawadmanzoor@gmail.com>
Date: Tue, Jun 6, 2017 at 7:25 PM
To: Bence Béky <b...@chromium.org>
I imagine that you are trying to use multiple HTTP/2 connections in parallel, with each requests assigned to one of the multiple connections at random, or to the one with the lowers number of active connections, or something like that. Like when six HTTP/1.1 connections are used parallel. Is that right? Unfortunately this is currently not supported by Chromium.Yes thats correct. I am trying to use multiple HTTP/2 connections in the same way as they are used in HTTP/1, just for some experiments.I understand that its currently not supported in Chromium. I want to implement it myself and build it from source to test a few things related to my research. I discussed this with Mike Belshe a few months ago and he agreed that the single connection limit is too conservative and leads to poor performance in a number of different network conditions. That's why I want to test different number of connections.Specifically, I want some pointers in the source code where the limit of a single HTTP/2 connection is implemented, so that I can change that limit to 2 or 4 connections. Could you point me to the relevant classes/functions in the source code?Regards,-Jawad
----------
From: Bence Béky <b...@chromium.org>
Date: Tue, Jun 6, 2017 at 8:11 PM
To: Jawad Manzoor <jawadm...@gmail.com>Hi Jawad,Oh, sorry I didn't understand your request the first time. I thought you were looking for a const int kMaxNumberOfConnections = 1; or similar statement.An HTTP/2 connection is represented by a SpdySession object. SpdySessionPool owns SpdySession objects, keyed by SpdySessionKey, at most one for each. There's also some complicated alias mechanism for IP-based pooling. HttpStreamFactoryImpl::Job tries to find an existing SpdySession to pool to, using SpdySessionPool::FindAvailableSession(). If not found, it requests a socket from the socket pool, which either creates a new socket or hands out an idle socket. A socket is an open TLS connection with no HTTP/2 connection initialized on it, that is, no preface and initial SETTINGS sent (but HTTP/2 is already negotiated in the TLS handshake using ALPN). Then HttpStreamFactoryImpl::Job hands this socket (held by the |connection_| member) to SpdySessionPool::CreateAvailableSessionFromSocket() which creates a new SpdySession on it, and makes SpdySessionPool own that SpdySession.You will need to make sure that SpdySessionPool can handle multiple SpdySessions for each SpdySessionKey, make FindAvailableSession() pick one out of the multiple active ones for each request, and find a place to initiate creating new ones. Sounds like a lot of work to me, let me know if you get stuck, I'll try to help.BTW I do not know exactly why https://crbug.com/621597 is restricted, but it does not seem to have information relevant to your goal.Also, if you are okay with it, I would like to move this discussion to the net...@chromium.org mailing list, so that other developers can also benefit from this discussion.Cheers,Bence
----------
From: Jawad Manzoor <jawadmanzoor@gmail.com>
Date: Tue, Jun 6, 2017 at 10:16 PM
To: Bence Béky <b...@chromium.org>
Thanks a lot for the explanation Bence. I will let you know how it goes.And yes you may take this discussion to the mailing list. It would be good to discuss it with other developers.Regards,
Hi Bence,I have made the changes as you suggested. AvailableSessionMap now stores std::set<base::WeakPtr<SpdySession>> for each SpdySessionKey. In FindAvailableSession() i get the set and check its size, if the size is less than 2 then i don't return the existing SpdySession, otherwise one of the sessions is randomly selected and returned.I have also made changes to several other methods that extracted SpdySession from map. Now the set is first retrieved against SpdySessionKey and from this set a SpdySession is extracted.You also mentioned that I need to find a place to initiate new SpdySessions. I haven't done this yet as I assume new SpdySession will automatically be created when i don't return an existing session to FindAvailableSession(), and instead return base::WeakPtr<SpdySession>(). Is this correct?I built the ran the browser and now I am able to see multiple connections to the server. However, there are 2 problems.1) I have restricted the number of sessions in the set to 2 but there are more than 2 connections to server. I have noticed up to 4 connections.2) The browser is unstable and crashes after 10 to 15 seconds.Did i do something wrong? Or do i have to make changes to some other classes also that use AvailableSessionMap, which i might have missed?Regards,On 8 June 2017 at 01:10, Bence Béky <b...@chromium.org> wrote:That is correct, you do not need to worry about it for the time being.BOn Wed, Jun 7, 2017 at 6:54 PM, Jawad Manzoor <jawadm...@gmail.com> wrote:Hi Bence,This bug has not been fixed yet in the latest source code right? So I don't have to worry about it at the moment.Regards,
From: Jawad Manzoor <jawadm...@gmail.com>
Date: Tue, Jun 6, 2017 at 7:25 PM
To: Bence Béky <b...@chromium.org>
I imagine that you are trying to use multiple HTTP/2 connections in parallel, with each requests assigned to one of the multiple connections at random, or to the one with the lowers number of active connections, or something like that. Like when six HTTP/1.1 connections are used parallel. Is that right? Unfortunately this is currently not supported by Chromium.Yes thats correct. I am trying to use multiple HTTP/2 connections in the same way as they are used in HTTP/1, just for some experiments.I understand that its currently not supported in Chromium. I want to implement it myself and build it from source to test a few things related to my research. I discussed this with Mike Belshe a few months ago and he agreed that the single connection limit is too conservative and leads to poor performance in a number of different network conditions. That's why I want to test different number of connections.Specifically, I want some pointers in the source code where the limit of a single HTTP/2 connection is implemented, so that I can change that limit to 2 or 4 connections. Could you point me to the relevant classes/functions in the source code?Regards,-Jawad
----------
From: Bence Béky <b...@chromium.org>
Date: Tue, Jun 6, 2017 at 8:11 PM
To: Jawad Manzoor <jawadm...@gmail.com>Hi Jawad,Oh, sorry I didn't understand your request the first time. I thought you were looking for a const int kMaxNumberOfConnections = 1; or similar statement.An HTTP/2 connection is represented by a SpdySession object. SpdySessionPool owns SpdySession objects, keyed by SpdySessionKey, at most one for each. There's also some complicated alias mechanism for IP-based pooling. HttpStreamFactoryImpl::Job tries to find an existing SpdySession to pool to, using SpdySessionPool::FindAvailableSession(). If not found, it requests a socket from the socket pool, which either creates a new socket or hands out an idle socket. A socket is an open TLS connection with no HTTP/2 connection initialized on it, that is, no preface and initial SETTINGS sent (but HTTP/2 is already negotiated in the TLS handshake using ALPN). Then HttpStreamFactoryImpl::Job hands this socket (held by the |connection_| member) to SpdySessionPool::CreateAvailableSessionFromSocket() which creates a new SpdySession on it, and makes SpdySessionPool own that SpdySession.You will need to make sure that SpdySessionPool can handle multiple SpdySessions for each SpdySessionKey, make FindAvailableSession() pick one out of the multiple active ones for each request, and find a place to initiate creating new ones. Sounds like a lot of work to me, let me know if you get stuck, I'll try to help.BTW I do not know exactly why https://crbug.com/621597 is restricted, but it does not seem to have information relevant to your goal.Also, if you are okay with it, I would like to move this discussion to the net...@chromium.org mailing list, so that other developers can also benefit from this discussion.Cheers,Bence
----------
From: Jawad Manzoor <jawadm...@gmail.com>
Date: Tue, Jun 6, 2017 at 10:16 PM
To: Bence Béky <b...@chromium.org>
Thanks a lot for the explanation Bence. I will let you know how it goes.And yes you may take this discussion to the mailing list. It would be good to discuss it with other developers.Regards,
On Tue, Jun 6, 2017 at 6:47 PM, Jawad Manzoor <jawadm...@gmail.com> wrote:Hey.--I am doing research on HTTP/2 performance and I also noticed this behavior of parallel HTTP/2 connections. I quantified how often this happens using passive measurements and results are presented in this paper: http://ieeexplore.ieee.org/abstract/document/7818414/Now I want to do some experiments by setting different number of parallel connections in HTTP/2 ( e.g, 2, 4 or 6). I was able to do it in Firefox and now I am trying with Chromium.However, I am unable to locate the exact place in Chromium source code where the limit on HTTP/2 connections is implemented and further connections are prevented. I was hoping to get information from https://crbug.com/621597 but I do not have access to view it. I would appreciate any help on this.--
On Monday, October 24, 2016 at 9:00:37 PM UTC+2, Bence Béky wrote:This is related to https://crbug.com/621597. In short, Chromium opens
up a number of TLS connections at the same time, and only finds out
that HTTP/2 is negotiated after a few roundtrips.
--
Chromium Developers mailing list: chromi...@chromium.org
View archives, change email options, or unsubscribe:
http://groups.google.com/a/chromium.org/group/chromium-dev
---
You received this message because you are subscribed to the Google Groups "Chromium-dev" group.
To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/chromium-dev/d83a8fad-6882-4217-85c6-dd156baf2295%40chromium.org.
----JawadJawad