[Ur] TechEmpower Benchmarks

Adam Chlipala adamc at csail.mit.edu
Wed Dec 11 11:16:29 EST 2013


On 12/11/2013 10:47 AM, escalier at riseup.net wrote:
> The final preview results have been posted:
>
> http://www.techempower.com/benchmarks/previews/round8/
>
> These is pretty much the official result set except that some anomalous
> results will be filtered out before the official posting.
>    

Thanks again for your help producing the benchmark code!  I'm glad to 
see no errors for _most_ of the benchmarks.  Two benchmarks (which both 
use SQL) have some errors, and I'm not sure if they'd all be fixed by 
the Postgres configuration change that you requested for the next round 
(which I was sad to see not included yet for this round).

I'm very curious about which niggling details are responsible for the 
performance gap with most of the serious frameworks.

> Obvious improvements that occur to me for next round:
>    - Create a quiet or verbose flag so that the all the stdout logging is
> avoidable (e.g. "Handling connection with thread #1. Serving URI
> /json....") The test runners require stdout to be piped to a file so it
> can't just be `/dev/null`ed.
>    

I've added a '-q' command-line argument for "quiet," to turn off routine 
logging.  Do you think this will actually help significantly?  I see 
less than a 1% difference in throughput comparing no logging, logging to 
/dev/null, and logging to a disk file.

>    - Create an alternate configuration that places Ur/Web behind a frontend
> like Nginx
>    

I'm now thinking this isn't necessary and probably would reduce 
performance, but I'd still be interested to see the results of an 
experiment.

I believe I've pinpointed the reason for Ur/Web's poor showing on the 
no-database benchmarks: we build a single executable, which includes 
page handlers that do and do not touch the database.  However, the 
runtime system is creating a new database transaction for every request, 
even those that don't need the database!  Running a simple application 
by itself brings Ur/Web eerily close to the performance showing up in 
the benchmark results (within 1,000 requests per second!), which makes 
me optimistic that this is actually the "theoretical maximum" given the 
hardware, OS, etc.

I'm going to work on not creating transactions for requests that don't 
need them.



More information about the Ur mailing list