[Ur] TechEmpower Benchmarks

Adam Chlipala adamc at csail.mit.edu
Wed Dec 11 15:12:22 EST 2013


I've pushed a changeset to avoid all database operations for page 
handlers that don't need the database.  It does seem to have the 
performance effect I expected running the benchmark program.

However, now I see I was looking at the wrong part of the results table 
before, when I said I was seeing peak Ur/Web HTTP performance eerily 
close to the best reported for TechEmpower.  I was looking at the 
results for JSON serialization, when I meant to be looking at the 
results for "hello world," which are substantially zippier. ;)  So, now 
I don't want to guess that there aren't further opportunities for 
constant-factor improvement, though they probably wouldn't account for 
much more than a factor of 5X at this point, if my tests on my 
workstation are triggering sufficiently similar performance to the 
official benchmark runs.  This is good progress from a 100X performance 
gap. :)

Does anyone know how to replicate the official benchmark execution 
sufficiently well to do fine performance measurement?  This sounds 
easier for the EC2 runs than for the "hardware we have in our offices" runs.

I'm curious how involving Nginx could improve performance, talking to 
Ur/Web programs speaking either HTTP or FastCGI.  It would also be nice 
to see what is the optimal number of OS threads in the Ur/Web process in 
the real environment.  I wonder if the lame lock-based queue data 
structure in the Ur/Web HTTP code might even be a bottleneck, such that 
corresponding code in Nginx could do a much better job.

On 12/11/2013 11:16 AM, Adam Chlipala wrote:
> 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/
>
>>    - 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