[Ur] TechEmpower Benchmarks

Adam Chlipala adamc at csail.mit.edu
Wed Nov 27 15:52:39 EST 2013


On 11/27/2013 11:35 AM, escalier at riseup.net wrote:
>> I expect it will immediately reduce dramatically the number of "errors" reported in the benchmark results.
>>
>> I rebuilt the benchmark with the HEAD version of Ur/Web. Unfortunately, it
>> doesn't seem to have done much for the socket errors.
>>      

OK, so I was overly optimistic. :)  The change I made did fix some 
errors that I had reproduced with the Siege benchmarking tool, but wrk 
was doing something different.  After some experimenting with wrk, I 
think I have the problem solved now, in the public Ur/Web repo.

> > ur/web doesn't have keep-alive
>
> Is that right? 

Well, the question may be misleadingly imprecise, but the Ur/Web 'http' 
protocol doesn't have any implementation of keep-alive.  My "fix" is in 
two parts:
1) Add "Connection: close" header to indicate that the connection isn't 
so alive after all.
2) Add "Content-length" header, which seems important for clients that 
may expect the keep-alive style.

I've followed a lazy approach in adding features to the tiny HTTP 
servers that 'urweb' will generate.  They were never intended to be 
serving production web requests directly, but I hope the small changes 
I've made are enough to allow using them with wrk.

> When I set max_pred_locks_per_transaction to 256 in my local
> postgresql.conf (from the default of 64), those errors seem to go away.
> I've opened an issue for that
> (https://github.com/TechEmpower/FrameworkBenchmarks/issues/632).
>    

Thank!  One other change I've just pushed is inspired by the last few 
error messages in the Postgres-related log you showed us.  These look 
suspiciously like optimistic concurrency faults, which should be handled 
by retrying transactions (as the HINTs suggest).  I had already 
implemented checks for a few codes that I know signify such a state, but 
I may be missing one; so I added printing of the error code in the log 
messages.  This means I should be able to use future logs of this kind 
to figure out which cases should be added to the Ur/Web Postgres code.

I'll be curious to hear whether, after the latest changes, everything 
works well locally for you, escalier.  (The most likely failure would be 
the same optimistic-concurrency faults, I think.)

Do we know if there will be any more practice runs of this benchmarks 
round?  Since the Ur/Web code seems basically to have served 0 requests 
in the first run, it would be good to get some confirmation that things 
are hooked up properly!



More information about the Ur mailing list