<div dir="ltr">I understand the desire for this code to work, and if I had more bandwidth, I would definitely fix it sooner. For now, all I can say is, be aware of the potential issues with the code and use at your own risk. Sorry that we don't have more bandwidth now to get this working sooner.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Apr 17, 2014 at 2:07 PM, Dave Taht <span dir="ltr"><<a href="mailto:dave.taht@gmail.com" target="_blank">dave.taht@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">On Thu, Apr 17, 2014 at 12:01 PM, William Chan (陈智昌)<br>
<<a href="mailto:willchan@chromium.org">willchan@chromium.org</a>> wrote:<br>
</div><div class="">> Speaking as the primary Chromium developer in charge of this relevant code,<br>
> I would like to caution putting too much trust in the numbers generated. Any<br>
> statistical claims about the numbers are probably unreasonable to make.<br>
<br>
</div>Sigh. Other benchmarks such as the apache ("ab") benchmark<br>
are primarily designed as stress testers for web servers, not as realistic<br>
traffic. Modern web traffic has such a high level of dynamicism in it,<br>
that static web page loads along any distribution, seem insufficient,<br>
passive analysis of aggregated traffic "feels" incorrect relative to the<br>
sorts of home and small business traffic I've seen, and so on.<br>
<br>
Famous papers, such as this one:<br>
<br>
<a href="http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-leland.pdf" target="_blank">http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-leland.pdf</a><br>
<br>
Seem possibly irrelevant to draw conclusions from given the kind<br>
of data they analysed and proceeding from an incorrect model or<br>
gut feel for how the network behaves today seems to be foolish.<br>
<br>
Even the most basic of tools, such as httping, had three basic bugs<br>
that I found in a few minutes of trying to come up with some basic<br>
behaviors yesterday:<br>
<br>
<a href="https://lists.bufferbloat.net/pipermail/bloat/2014-April/001890.html" target="_blank">https://lists.bufferbloat.net/pipermail/bloat/2014-April/001890.html</a><br>
<br>
Those are going to be a lot easier to fix than diving into the chromium<br>
codebase!<br>
<br>
There are very few tools worth trusting, and I am always dubious<br>
of papers that publish results with unavailable tools and data. The only<br>
tools I have any faith in for network analysis are netperf, netperf-wrapper,<br>
tcpdump and <a href="http://xplot.org" target="_blank">xplot.org</a>, and to a large extent wireshark. Toke and I have<br>
been tearing apart d-itg and I hope to one day be able to add that to<br>
my trustable list... but better tools are needed!<br>
<br>
Tools that I don't have a lot of faith in include that, iperf, anything written<br>
in java or other high level languages, <a href="http://speedtest.net" target="_blank">speedtest.net</a>, and things like<br>
shaperprobe.<br>
<br>
Have very little faith in ns2, slightly more in ns3, and I've been meaning<br>
to look over the mininet and other simulators whenever I got some spare<br>
time; the mininet results stanford gets seem pretty reasonable and I<br>
adore their reproducing results effort. Haven't explored ndt, keep meaning<br>
to...<br>
<div class=""><br>
> Reasons:<br>
> * We don't actively maintain this code. It's behind the command line flags.<br>
> They are broken. The fact that it still results in numbers on the benchmark<br>
> extension is an example of where unmaintained code doesn't have the UI<br>
> disabled, even though the internal workings of the code fail to guarantee<br>
> correct operation. We haven't disabled it because, well, it's unmaintained.<br>
<br>
</div>As I mentioned I was gearing up for a hacking run...<br>
<br>
The vast majority of results I look at are actually obtained via<br>
looking at packet captures. I mostly use benchmarks as abstractions<br>
to see if they make some sense relative to the captures and tend<br>
to compare different benchmarks against each other.<br>
<br>
I realize others don't go into that level of detail, so you have given<br>
fair warning! In our case we used the web page benchmarker as<br>
a means to try and rapidly acquire some typical distributions of<br>
get and tcp stream requests from things like the alexa top 1000,<br>
and as a way to A/B different aqm/packet scheduling setups.<br>
<br>
... but the only easily publishable results were from the benchmark itself,<br>
and we (reluctantly) only published one graph from all the work that<br>
went into it 2+ years back and used it as a test driver for the famous<br>
ietf video, comparing two identical boxes running it at the same time<br>
under different network conditions:<br>
<br>
<a href="https://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos#IETF-demo-side-by-side-of-a-normal-cable-modem-vs-fq_codel" target="_blank">https://www.bufferbloat.net/projects/cerowrt/wiki/Bloat-videos#IETF-demo-side-by-side-of-a-normal-cable-modem-vs-fq_codel</a><br>

<br>
from what I fiddled with today, it is at least still useful for that?<br>
<br>
moving on...<br>
<br>
The web model in the cablelabs work doesn't look much like my captures,<br>
in addition to not modeling dns at all, and using a smaller IW than google<br>
it looks like this:<br>
<br>
>> Model single user web page download as follows:<br>
<br>
>> - Web page modeled as single HTML page + 100 objects spread evenly<br>
>> across 4 servers. Web object sizes are currently fixed at 25 kB each,<br>
>> whereas the initial HTML page is 100 kB. Appendix A provides an<br>
>> alternative page model that may be explored in future work.<br>
<br>
Where what I see is a huge number of stuff that fits into a single<br>
iw10 slow start episode and some level of pipelining on larger stuff, so that a<br>
large number of object sizes of less than 7k with a lightly tailed distribution<br>
outside of that makes more sense.<br>
<br>
(I'm not staring at appendix A right now, I'm under the impression<br>
 it was better)<br>
<br>
I certainly would like more suggestions for models and types<br>
of web traffic, as well as simulation of https + pfs traffic,<br>
spdy, quic, etc....<br>
<br>
>> - Server RTTs set as follows (20 ms, 30 ms, 50 ms, 100 ms).<br>
<br>
Server RTTs from my own web history tend to be lower than 50ms.<br>
<br>
>> - Initial HTTP GET to retrieve a moderately sized object (100 kB HTML<br>
>> page) from server 1.<br>
<br>
An initial GET to google fits into iw10 - it's about 7k.<br>
<br>
>> - Once initial HTTP GET completes, initiate 24 simultaneous HTTP GETs<br>
>> (via separate TCP connections), 6 connections each to 4 different<br>
>> server nodes<br>
<br>
I usually don't see more than 15. and certainly not 25k sized objects.<br>
<br>
 > - Once each individual HTTP GET completes, initiate a subsequent GET<br>
> to the same server, until 25 objects have been retrieved from each<br>
> server.<br>
<div class=""><br>
<br>
> * We don't make sure to flush all the network state in between runs, so if<br>
> you're using that option, don't trust it to work.<br>
<br>
</div>The typical scenario we used was a run against dozens or hundreds of urls,<br>
capturing traffic, while varying network conditions.<br>
<br>
Regarded the first run as the most interesting.<br>
<br>
Can exit the browser and restart after a run like that.<br>
<br>
At moment, merely plan to use the tool primarily to survey various<br>
web sites and load times while doing packet captures. Hope was<br>
to get valid data from the network portion of the load, tho...<br>
<div class=""><br>
> * If you have an advanced Chromium setup, this definitely does not work. I<br>
> advise using the benchmark extension only with a separate Chromium profile<br>
> for testing purposes. Our flushing of sockets, caches, etc does not actually<br>
> work correctly when you use the Chromium multiprofile feature and also fails<br>
> to flush lots of our other network caches.<br>
<br>
</div>noted.<br>
<div class=""><br>
<br>
> * No one on Chromium really believes the time to paint numbers that we<br>
> output :) It's complicated. Our graphics stack is complicated. The time from<br>
<br>
</div>I actually care only about time-to-full layout as that's a core network<br>
effect...<br>
<div class=""><br>
> when Blink thinks it painted to when the GPU actually blits to the screen<br>
> cannot currently be corroborated with any high degree of accuracy from<br>
> within our code.<br>
<br>
> * It has not been maintained since 2010. It is quite likely there are many<br>
> other subtle inaccuracies here.<br>
<br>
</div>Grok.<br>
<div class=""><br>
> In short, while you can expect it to give you a very high level<br>
> understanding of performance issues, I advise against placing non-trivial<br>
> confidence in the accuracy of the numbers generated by the benchmark<br>
> extension. The fact that numbers are produced by the extension should not be<br>
> treated as evidence that the extension actually functions correctly.<br>
<br>
</div>OK, noted. Still delighted to be able to have a simple load generator<br>
that exercises the browsers and generates some results, however<br>
dubious.<br>
<div class="HOEnZb"><div class="h5"><br>
><br>
> Cheers.<br>
><br>
><br>
> On Thu, Apr 17, 2014 at 10:49 AM, Dave Taht <<a href="mailto:dave.taht@gmail.com">dave.taht@gmail.com</a>> wrote:<br>
>><br>
>> Getting a grip on real web page load time behavior in an age of<br>
>> sharded websites,<br>
>> dozens of dns lookups, javascript, and fairly random behavior in ad<br>
>> services<br>
>> and cdns against how a modern browsers behaves is very, very hard.<br>
>><br>
>> it turns out if you run<br>
>><br>
>> google-chrome --enable-benchmarking --enable-net-benchmarking<br>
>><br>
>> (Mac users have to embed these options in their startup script - see<br>
>>  <a href="http://www.chromium.org/developers/how-tos/run-chromium-with-flags" target="_blank">http://www.chromium.org/developers/how-tos/run-chromium-with-flags</a> )<br>
>><br>
>> enable developer options and install and run the chrome web page<br>
>> benchmarker,<br>
>> (<br>
>> <a href="https://chrome.google.com/webstore/detail/page-benchmarker/channimfdomahekjcahlbpccbgaopjll?hl=en" target="_blank">https://chrome.google.com/webstore/detail/page-benchmarker/channimfdomahekjcahlbpccbgaopjll?hl=en</a><br>

>> )<br>
>><br>
>> that it works (at least for me, on a brief test of the latest chrome, on<br>
>> linux.<br>
>> Can someone try windows and mac?)<br>
>><br>
>> You can then feed in a list of urls to test against, and post process<br>
>> the resulting .csv file to your hearts content. We used to use this<br>
>> benchmark a lot while trying to characterise typical web behaviors<br>
>> under aqm and packet scheduling systems under load. Running<br>
>> it simultaneously with a rrul test or one of the simpler tcp upload or<br>
>> download<br>
>> tests in the rrul suite was often quite interesting.<br>
>><br>
>> It turned out the doc has been wrong a while as to the name of the second<br>
>> command lnie option. I was gearing up mentally for having to look at<br>
>> the source....<br>
>><br>
>> <a href="http://code.google.com/p/chromium/issues/detail?id=338705" target="_blank">http://code.google.com/p/chromium/issues/detail?id=338705</a><br>
>><br>
>> /me happy<br>
>><br>
>> --<br>
>> Dave Täht<br>
>><br>
>> Heartbleed POC on wifi campus networks with EAP auth:<br>
>> <a href="http://www.eduroam.edu.au/advisory.html" target="_blank">http://www.eduroam.edu.au/advisory.html</a><br>
>><br>
>> _______________________________________________<br>
>> aqm mailing list<br>
>> <a href="mailto:aqm@ietf.org">aqm@ietf.org</a><br>
>> <a href="https://www.ietf.org/mailman/listinfo/aqm" target="_blank">https://www.ietf.org/mailman/listinfo/aqm</a><br>
><br>
><br>
<br>
<br>
<br>
</div></div><div class="HOEnZb"><div class="h5">--<br>
Dave Täht<br>
<br>
NSFW: <a href="https://w2.eff.org/Censorship/Internet_censorship_bills/russell_0296_indecent.article" target="_blank">https://w2.eff.org/Censorship/Internet_censorship_bills/russell_0296_indecent.article</a><br>
</div></div></blockquote></div><br></div>