Testing IE8’s Connection Parallelism

March 16, 2008 on 7:51 pm | In ajax |

A few weeks ago, I discussed IE8’s improved connection parallelism, specifically the increase from 2 concurrent connections per host to 6. One open question was the total number of connections allowed — my speculation was that the IE team would stick with a max of 6 rather than triple that value as well.

I was wrong. The new max is an astonishing 18 (!) concurrent connections:

That is some serious parallelism, and it has significant implications for application performance.

In December of 2006, I discussed the CNAME trick for circumventing browser connection limits, using 3 hostnames to serve images to trick the browser into using all available connections. At the time, that was 6 for IE. The above capture from IBM Page Detailer confirms 18 concurrent connections in IE8.

As expected, IE8’s handling of the unoptimized version, where only one hostname is used, is comparable to the performance of the optimized page in previous IE versions:

As an aside, the out of the box optimization provided by IE8 is actually slightly faster than the CNAME trick applied to previous IE versions as it does not incur any hostname resolution cost when establishing the first connections. Both examples would use 6 total concurrent connections, and IE8 should be equal to or faster than optimized connection management in previous versions.

But what about IE8 against a page optimized for connection parallelism? If 6 concurrent connections is good, 18 should be terrific, right? Not so fast. While the Page Detailer captures above show some improvement in the 18 connection version, point in time metrics can only tell us so much. What we need is a tool that can collect a statistically significant sample of performance data using both 6 and 18 connections to see if any trends shake out.

For this analysis, I used a hosted performance testing solution from Gomez, my employer. This is the same tool used in my original connection parallelism article. I ran my tests in IE8 compatibility mode, mirroring the new connection levels. As before, one test is against the default (1 host) page, and one test uses the CNAME trick (3 hosts) for greater connection parallelism. The results surprised me:

This aggregate data is made up of hundreds of tests taken from 7 locations in the US over the last 14 hours. The same locations were used for both tests. The “IE8 Parallelized” test, which uses 18 connections, has a much higher standard deviation and a higher average test time than the 6 connection “IE8 Default” test. What gives?

The answer appears to be sporadic connection hangs. The median response time for the parallelized page is lower than the default page, but a higher incidence of outliers skews the median and leads to the increased variability. Looking at the outliers, I typically see a section of the page load that looks like this:

Here we see 2 object downloads taking more than 8 seconds to complete. The average response time for an entire page is around half of a second, so this is a huge outlier. I see these outliers on between 5 and 10% of the test runs for the 18 connection page, but I never seen any comparably high outliers for the 6 connection version.

Below is a revised version of the test averages taken by removing outliers:

Note that the parallelized version is now consistently faster than the default. As expected, the outliers are responsible for the counterintuitive poor performance of the parallelized page.

I suspect that my hosting provider (Dreamhost) simply can’t keep up with the dramatic increase in connection parallelism. 18 connections is simply too much of a good thing, and it will present a scaling problem for those who are on small to medium hosts. 10 users hitting at the same time will yield 180 concurrent connections, a pretty significant number for smaller providers.

[Note: This objection was anticipated and handled by the IE team. See below.] Dial-up and cellular network users are also likely to be negatively impacted by this change. In the high broadband world where latency is the dominant factor, greater connection parallelism is a boon. But in bandwidth constrained networks, it just leads to thrash where progress is slowed by all the connections trying to share a small pipe.

I’m curious what sort of testing Microsoft has conducted to determine the impact of this change. The connection parallelism approach is used widely (including by the Virtual Earth team), and some servers may not be ready for the increase. My tests were conducted against only one host, but if similar results are experienced elsewhere, this may fall under the rubric of “don’t break the web.”

My advice to anyone who is using the connection parallelism trick is to perform a similar analysis of your application before IE8 is released. The new connection levels will create greater strain on your servers, and that may lead to occasional performance hiccups for your users. There are a few different approaches you can take to dealing with this change, but the most important first step is to understand the extent to which your application is impacted.

Update: Kris Zyp and Steve Souders have pointed out that IE8 will use 2 connections per host for dial-up users. This nicely addresses that concern, but the concern about 18 connections for pages using the CNAME approach still stands.

6 Comments »

RSS feed for comments on this post.

  1. Lovely article. I keep following your connection stuff and cannot believe it is 18 now..I use Gomez a lot and those numbers definitely make sense..BTW do you have any official confirmation of this from the IE team?

    Comment by Pelican — March 16, 2008 #

  2. I use Opera browser. I can set up up to 128 (!) connection per server, and up to 128 connections total.

    Just choose Tools-Preferences-Advanced-Network.

    The defaults are 8 and 20 respectivly, and I don’t know why.

    Comment by andrew — March 17, 2008 #

  3. I’m surprised the browser can’t learn what the optimum number of parallel connections is, and adjust over time. That seems like an obvious next step. I wonder if other browsers will learn from this performance analysis and do IE one better.

    Comment by Steve Laniel — March 17, 2008 #

  4. I used IE8 getting the same page at http://demo.ajaxperformance.com and saw a quite different graph in Page Detailer. The number of parallel connections started from 3 in the first round, 5 the second, 9 the third, and another 9 the fourth, for the total of 26 images.

    While running in IE7 Emulate mode, a different graph with 6, 6, 4, 4, 6 parallel connections in 5 rounds.

    I think there might be some other factors affecting the result such as file size, internet connection bandwidth, local cache…etc.

    I was considering to use “web accelerator” appliance that do the same job by layer 7 protocol. It seems that this “multi-connect” acceleration will be replaced by next version of browsers. Any similar case to share?

    Comment by Biondi Tang — May 21, 2008 #

  5. What makes you think WinINET has any limit to concurrent connections at all?

    your test pages are broken, btw.

    Comment by Mark — June 9, 2008 #

  6. Mark,

    Being wrong made me think there was a limit to concurrent connections. It’s a longstanding misconception I had, but it has since been corrected. The only limit is per host.

    I don’t see any issues with my test pages. I have intermittent problems with dreamhost, but everything appears to be functional now.

    Comment by Ryan Breen — June 9, 2008 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^