[Haskell-cafe] code review? store server, 220loc.

Duncan Coutts duncan.coutts at worc.ox.ac.uk
Sun Aug 3 07:43:07 EDT 2008

On Sat, 2008-08-02 at 19:13 -1000, Tim Newsham wrote:

> My measurements show that a simple dummy server (accept, forkio,
> recv byte) handles roughly 7500 requests/connects per second,
> the server/client that do real messages do about 4500 req and
> connections per second.  If all requests are on the same connection
> one after another it does about 13500 requests/second.  For
> comparisons, a C ping-pong server does about 3600/second if
> it has to fork for each new connection/request, and about 35000/sec
> if its all on the same connection.  So it seems at least competitive
> with a forking C server.  I havent tested threaded C servers.

What kind of performance do you actually need? Can your network
connection actually sustain the bandwidth of your synthetic benchmarks?

For reference, I've got a demo HAppS-based server which handles
reasonably high load pretty well I think:

(tested using apache-bench, loopback interface, amd64 @ 2.2GHz)

With cached content 450k:

with 1 concurrent client:
        760 requests per second
        ~1ms latency
with 100 concurrent clients:
        1040 requests per second 
        ~90ms latency
on a non-cached generated-on-demand 3k page:

with 1 concurrent client:
        280 requests per second
        ~4ms latency
        900Kb/s bandwidth
with 100 concurrent clients:
        240 requests per second 
        ~400ms latency
        750Kb/s bandwidth
Using http keep-alive boots requests per sec by ~20%

Obviously this is testing with a loopback network. My point is, it's
serving at a rather higher rate than most real network connections I
could buy (except local ethernet networks).


More information about the Haskell-Cafe mailing list