
Is the IO manager the right layer to be approaching this from? Not all
#8733: I/O manager causes unnecessary syscalls in send/recv loops --------------------------------------------+------------------------------ Reporter: tibbe | Owner: simonmar Type: bug | Status: new Priority: normal | Milestone: 7.10.1 Component: Runtime System | Version: 7.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: Runtime performance bug | Unknown/Multiple Test Case: | Difficulty: Unknown Blocking: | Blocked By: | Related Tickets: --------------------------------------------+------------------------------ Comment (by tibbe): Replying to [comment:5 etrepum]: protocols are going to be strictly request/response with no pipelining or multiplexing like vanilla HTTP is.
Why not implement this at a higher level in a library that encapsulates
these best practices for various sorts of protocols? Good question. I considered this before filing the bug. One argument for why this should work without user interaction, in addition to the standard "it's nice if it just works" argument, is that if we didn't use the I/O manager but instead normal blocking syscalls, we'd end up with better behavior in this case.
A good start may be to add this to the Performance Resource: http://www.haskell.org/haskellwiki/Performance (which looks old but that's what came up when I searched). Erlang publishes an Efficiency Guide that is nice (but doesn't cover any networking topics) http://erlang.org/doc/efficiency_guide/users_guide.html
I'm planning to add a note to the network package's docs when I find the time. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/8733#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler