[Ur] More thoughts on the TechEmpower framework benchmarks

Adam Chlipala adamc at csail.mit.edu
Sat Dec 28 08:05:33 EST 2013


I've just pushed an Ur/Web change that I hope will have a large effect 
on the benchmark results.

Previously, when a standalone Ur/Web HTTP server was run in keepalive 
mode, it would assign connections one-to-one to threads, as threads 
become available after finishing with previous connections.  If a client 
sent just one request at a time, threads would waste a lot of time 
blocking, waiting for new input, even when other unassigned connections 
had full HTTP requests available to parse.

Because of text in the benchmark description about "HTTP pipelining," I 
had assumed that clients would be sending nice long streams of many 
requests, without waiting for responses first.  For all I know, the 
benchmarking program really does behave like that, but network latency 
is high enough that requests on a connection appear rather spaced out in 
time.  In any case, it turned out to be useful to make threads switch to 
different connections when their current connections have no pending 
requests.

Testing with localhost connections, throughput improved by 5X.  
Connecting to my local machine over the Internet from a slow VM, 
throughput improved by 3X.  I'm hoping that the VM isn't too slow to 
make the results interesting, so that I can sort of think of the real 
benchmark situation, with gigabit Ethernet connecting machines, as some 
interpolation between these figures. :)

On 12/25/2013 04:04 PM, Adam Chlipala wrote:
> Here are some more thoughts on this benchmark competition:
>     http://www.techempower.com/benchmarks/
> which has been discussed here a bit already.



More information about the Ur mailing list