Re: Pipeline hinting revisited

Darin Fisher <darin@chromium.org> Fri, 12 August 2011 06:21 UTC

Return-Path: <ietf-http-wg-request@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F231021F8785 for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 11 Aug 2011 23:21:14 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.976
X-Spam-Level:
X-Spam-Status: No, score=-9.976 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-8]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pqltaOt1F9jh for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Thu, 11 Aug 2011 23:21:13 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) by ietfa.amsl.com (Postfix) with ESMTP id 7C77D21F8509 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Thu, 11 Aug 2011 23:21:13 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.69) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1Qrl6c-0005GR-D9 for ietf-http-wg-dist@listhub.w3.org; Fri, 12 Aug 2011 06:20:30 +0000
Received: from aji.keio.w3.org ([133.27.228.206]) by frink.w3.org with esmtp (Exim 4.69) (envelope-from <darin@google.com>) id 1Qrl6G-0005FQ-0y for ietf-http-wg@listhub.w3.org; Fri, 12 Aug 2011 06:20:08 +0000
Received: from smtp-out.google.com ([74.125.121.67]) by aji.keio.w3.org with esmtp (Exim 4.72) (envelope-from <darin@google.com>) id 1Qrl69-0003Pn-Ta for ietf-http-wg@w3.org; Fri, 12 Aug 2011 06:20:07 +0000
Received: from hpaq13.eem.corp.google.com (hpaq13.eem.corp.google.com [172.25.149.13]) by smtp-out.google.com with ESMTP id p7C6JWXd011754 for <ietf-http-wg@w3.org>; Thu, 11 Aug 2011 23:19:32 -0700
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=google.com; s=beta; t=1313129974; bh=tU0BUc1f6pXRbUK4XopRs+uF3PM=; h=MIME-Version:Sender:In-Reply-To:References:Date:Message-ID: Subject:From:To:Cc:Content-Type; b=DDxB4DHc5m3wnZQb3Riio/bSeSfZa8yVPQlHZxS/RHBin/KB3limQf/qlcv5P8/zT 4FyKPfivyJvvbt1fGTOCw==
DomainKey-Signature: a=rsa-sha1; s=beta; d=google.com; c=nofws; q=dns; h=dkim-signature:mime-version:sender:in-reply-to:references:date: x-google-sender-auth:message-id:subject:from:to:cc:content-type:x-system-of-record; b=NT6xpfryHQZcN56M0sa2hLZssTCDIGgzfKK0TldeXk5IJf8iP/qOA9CtryJ/Cwz0z COW23b7qqHdZPPnpbDTiQ==
Received: from iyf40 (iyf40.prod.google.com [10.241.50.104]) by hpaq13.eem.corp.google.com with ESMTP id p7C6JTNB004715 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <ietf-http-wg@w3.org>; Thu, 11 Aug 2011 23:19:30 -0700
Received: by iyf40 with SMTP id 40so1008466iyf.5 for <ietf-http-wg@w3.org>; Thu, 11 Aug 2011 23:19:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=beta; h=mime-version:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=lBevuR7Of+ogDxagwrppnnT+Ynmz/XOUBWTvqvsqVaI=; b=j20rbXm80KcyQWodmGkzKzTCHJyrYs3GSVjW1MUkob2uJO931jX+CAnUElbar7Y3DF Mf9dr+m3JvnZybmJnJYQ==
Received: by 10.231.55.226 with SMTP id v34mr1127762ibg.89.1313129969657; Thu, 11 Aug 2011 23:19:29 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.231.55.226 with SMTP id v34mr1127743ibg.89.1313129969255; Thu, 11 Aug 2011 23:19:29 -0700 (PDT)
Received: by 10.231.11.195 with HTTP; Thu, 11 Aug 2011 23:19:29 -0700 (PDT)
In-Reply-To: <20110812055327.GE9902@1wt.eu>
References: <CAAbTgTu2px+o=mFyEOuSW8KzHR-o5GeN9b6X-Q+VuRtQP=A0Qw@mail.gmail.com> <20110812053137.GC9902@1wt.eu> <CAP0-QpukAzexjJaMOHoTaAGRPYV_7-91Fr9P_ukkqNQ1gsDC_A@mail.gmail.com> <20110812055327.GE9902@1wt.eu>
Date: Thu, 11 Aug 2011 23:19:29 -0700
X-Google-Sender-Auth: 7t17ENgOfkSZsf41TXKFHI49Lrs
Message-ID: <CAP0-Qpt1X8ashm0hS9mH8yfhT_CSvs6SerjyW_t52cJXw81tgw@mail.gmail.com>
From: Darin Fisher <darin@chromium.org>
To: Willy Tarreau <w@1wt.eu>
Cc: Brian Pane <brianp@brianp.net>, ietf-http-wg@w3.org
Content-Type: multipart/alternative; boundary="000e0cd2541c5c841604aa48e5a4"
X-System-Of-Record: true
Received-SPF: pass client-ip=74.125.121.67; envelope-from=darin@google.com; helo=smtp-out.google.com
X-W3C-Hub-Spam-Status: No, score=-5.0
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, RP_MATCHES_RCVD=-0.811, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001
X-W3C-Scan-Sig: aji.keio.w3.org 1Qrl69-0003Pn-Ta 2c3a783c618a4bd777c403fca2743a55
X-Original-To: ietf-http-wg@w3.org
Subject: Re: Pipeline hinting revisited
Archived-At: <http://www.w3.org/mid/CAP0-Qpt1X8ashm0hS9mH8yfhT_CSvs6SerjyW_t52cJXw81tgw@mail.gmail.com>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/11191
X-Loop: ietf-http-wg@w3.org
Sender: ietf-http-wg-request@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>
Resent-Message-Id: <E1Qrl6c-0005GR-D9@frink.w3.org>
Resent-Date: Fri, 12 Aug 2011 06:20:30 +0000

On Thu, Aug 11, 2011 at 10:53 PM, Willy Tarreau <w@1wt.eu> wrote:

> On Thu, Aug 11, 2011 at 10:43:36PM -0700, Darin Fisher wrote:
> > On Thu, Aug 11, 2011 at 10:31 PM, Willy Tarreau <w@1wt.eu> wrote:
> >
> > > Hi Brian,
> > >
> > > On Thu, Aug 11, 2011 at 03:12:31PM -0700, Brian Pane wrote:
> > > > I've been thinking some more about request pipelining recently,
> > > > triggered by several observations:
> > > >
> > > > - A significant number of real-world websites could be made faster
> via
> > > > widespread adoption of request pipelining (based on my study of
> > > > ~15,000 sites in the httparchive.org corpus).
> > > > - A nontrivial fraction of mobile browsers are using pipelining
> > > > already, albeit not as aggressively as they could (based on Blaze's
> > > > study: http://www.blaze.io/mobile/http-pipelining-big-in-mobile/ )
> > > > - Client implementations that currently pipeline their requests are
> > > > using heuristics of varying complexity to try to decide when
> > > > pipelining is safe.  The list of conditions documented here is at the
> > > > complex end of the spectrum, and it's perhaps still incomplete:
> > > > https://bugzilla.mozilla.org/show_bug.cgi?id=599164
> > > >
> > > > The key question, I think, is whether heuristics implemented on the
> > > > client side will end up being sufficient to detect safe opportunities
> > > > for pipelining.  If not, a server-driven hinting mechanism of the
> sort
> > > > proposed in Mark's "making pipelining usable" draft (
> > > > http://tools.ietf.org/html/draft-nottingham-http-pipeline-01 ) seems
> > > > necessary.
> > > >
> > > > Anybody have additional experimental data on pipelining (including
> the
> > > > effectiveness of heuristics for turning pipelining on or off) that
> > > > they can share?
> > >
> > > We've been conducting some tests for a customer working with mobile
> > > terminals. I was very frustrated to see that pipelining did not bring
> > > any gain there due to the first non-pipelined request to each host.
> > > What happens is that there are many objects on a page, spread over
> > > many hosts. The terminal opens many parallel connections to these
> > > hosts, and as a result, there are 4-5 objects max to fetch over each
> > > connection. All connection have a first object fetched alone, and only
> > > once a response is received, a batch of 4 requests is sent. It is this
> > > pause between the first and the next request over a connection which
> > > voids the gain. It was always faster to open more parallel connection,
> > > despite the extra bandwidth, than to use pipeline, precisely due to
> > > this point.
> > >
> > > This is why I think we need to find a solution so that pipelining could
> > > be more aggressive on riskless requests, and possibly use the server
> > > side's hinting to safely fall back to non-pipelining ASAP if needed.
> > > I'm well aware that the biggest issue seems to be with broken servers
> > > getting stuck between requests. I don't know if there are many of those
> > > or not, but maybe at one point it will become those site's problem and
> > > not the browsers'.
> > >
> >
> > Often it is a bad intermediary (transparent proxy).  The origin server
> may
> > be just as helpless as the client :-(
>
> I agree, and my point is that it's the first intermediary between the
> client and the origin server that counts for the client, and most often
> this intermediary will support pipelining and it's too bad not to use
> it with the whole world. Anyway in both cases (good or bad intermediary),
> both the server and the client will have little clue and be of little
> help. Ideally we should have request numbers for the connection, but as
> Mark pointed it out a few months ago, those might be cached and make the
> issue worse. That said, are we sure they might be cached even if advertised
> in the Connection header ? I don't really think so. If we had
> intermediaries
> or server respond with "Connection: pipeline; req=#num", or even
> "Connection: req=#num", it should make it clear where it's explicitly
> supported, without waiting for the whole world to adopt it on every
> server. The advantage with Connection is that intermediaries will get
> rid of it.
>
>
I'm sure it is very true for a lot of mobile clients that the local
intermediary would do
the right thing.

Hmm, I'd still be worried about dumb, "transparent" intermediaries that do
not consider
themselves as a hop though.  Edge servers / virtual hosts are sometimes to
blame.

We have to consider what constraints are put on intermediaries today that
require
them to behave a certain way.  If they are not required to treat the
Connection header
as hop-by-hop, then they won't.  In some sense, it doesn't matter what the
spec says.
They will do whatever doesn't punish them.

Apologies, I'm a pipelining pessimist :-/  I think perhaps it can be viable
in a mobile
(small screen) world where users already have fairly low expectations of
their browsers.
And, if we get enough mobile clients using it, then perhaps that'll be
enough to get
servers and intermediaries to play nicely.

<aside>

I'll admit that my data is dated, but when I tried to enable pipelining in
Mozilla (around 2003), I ran into such an incredibly bazaar range of
failures.  Sure, old versions of popular servers were busted.  Apache 1.3's
CGI module did not support pipelining.  Similarly, old versions of IIS were
busted.

Apache 2.0 and the latest IIS seemed to work great, except sometimes.
 Sometimes there was a mysterious failure when communicating with one of the
"good" servers.  It seemed that some intermediary must be to blame.  The
failure modes were fascinating too.  Sometimes the response would be
nothing, sometimes it would be garbage bytes, and other times the server
would simply never reply (timeout).

Around 2005, I remember people complaining that Google maps was broken in
Firefox.  Turns out these users had enabled pipelining.  Map tiles were just
mysteriously failing to load.  Apparently, it is really easy to code a
server that doesn't handle pipelining properly, which kinda makes sense.
 Google fixed it pretty quickly, but I think that is the exception.

I guess my point is that this seems like a really tough uphill battle.  It
is a chicken-n-egg problem :-/

</aside>

-Darin