Marc Weber wrote:
urweb (http):

   benchmark PHP (run by apache) (5.3):
     ab -n 100 -c1 http://l/pg_speed.php  0.01s user 0.03s system 3% cpu 1.242 
total

   benchmark ur (http):
     ab -n 100 -c1 http://l:8090/St/list  0.01s user 0.02s system 1% cpu 2.147 
total

   benchmark ur (fastcgi):
     ab -n 100 -c1 http://l/fcgid/pg_fcgi.fcgi/St/list  0.01s user 0.02s system 
1% cpu 2.522 total

   -c1 means no threading.
   data: 1000 rows

Once I explain what was happening here, you will probably agree that these numbers reflect very favorably on Ur/Web. A certain key optimization was being omitted, yet Ur/Web still came within about a factor of 2 of PHP. ;-D

The comparison was kind of unfair to begin with, as you used a function [page] in Ur/Web to implement a standard page template, while you inlined all HTML in the PHP version. If you had done that inlining manually in Ur/Web, too, you would have seen very different results.

The compiler is designed to figure out where such inlining is profitable and do it automatically. This is based on a threshold on the size of the function to inline. I had the threshold set too conservatively, so [page] calls weren't being inlined. I've now pushed a tiny compiler change which increases the threshold modestly, which is enough to get this example to compile properly.

Your benchmarks seem to be single-threaded. In that setting, I observe about a factor of 7 throughput improvement after the compiler change.

It would also be interesting to see some concurrent benchmarks. You would want to start the Ur/Web server binary with the command-line argument '-t N', where 'N' is twice your number of cores. You'd also obviously need to tweak the 'ab' command line. With 4 threads on my old-ish 2-core machine, I observe about a factor of 10 throughput improvement after the compiler change.

It's also worth pointing out that you can often speed up the Ur/Web server processes significantly by piping their stdouts to /dev/null.

_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to