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

Tim Newsham newsham at lava.net
Tue Aug 5 17:55:19 EDT 2008


> On Sat, Aug 2, 2008 at 10:13 PM, Tim Newsham <newsham at lava.net> wrote:
>>   http://www.thenewsh.com/%7Enewsham/store/Server5.hs
>
> You should try profiling this. I can see a few possible problems (such
> as reading String from a socket, instead of a ByteString), but it's
> difficult to predict what might be causing your code to be so slow.
> Haskell code ought to be much more competitive with C for an
> application like this.

Profiling didn't turn up anything obvious:
   http://www.thenewsh.com/~newsham/store/Server9.prof

one thing I dont quite understand is that it seems to be crediting
more time to "put8" and "get8" than is warranted, perhaps all of
the "get" and "put" functions...

One suprising result from testing:
   http://www.thenewsh.com/~newsham/store/TestBin.hs

shows that the Data.Binary marshalling is actually very fast, but
when I want to add a length field at the start of the buffer it
has a huge impact on performance.  I've tried several variations without
much luck...  (also the third test case is very odd in that skipping
a conversion to strict bytestring actually makes it slower(!)).

soo... I think thats probably one of the things limiting my performance.
Another one is probably my need to do two reads (one for length one
for the data) for each received record... I think with some trickiness
I could get around that (since recv will return only as many bytes as
are immediately available) but I don't know that its worth the effort
right now....

Anyway, any thoughts, especially on how to make the bytestring operations
faster, would be appreciated.

Tim Newsham


More information about the Haskell-Cafe mailing list