I just noticed that I/O performane on Windows without -threaded is pretty terrible. The following program:

main = getConetnts >>= putStr

tested with a 1MB file:

$ rm cat.exe; ghc-7.0.1 --make -rtsopts cat.hs
$ ./cat <1M >/dev/null +RTS -s
<snip>
  Total time    0.28s  (  0.49s elapsed)
<snip>

But if we add -threaded:

$ rm cat.exe; ghc-7.0.1 --make -rtsopts cat.hs -threaded
$ ./cat <1M >/dev/null +RTS -s
<snip>
  Total time    0.05s  (  0.07s elapsed)
<snip>

Several times better. I just made a tweak in my working tree to increase the I/O buffer sizes, and this helps quite a lot:

$ rm cat.exe; ../ghc-testing/inplace/bin/ghc-stage2.exe --make -rtsopts cat.hs
$ ./cat <1M >/dev/null +RTS -s
<snip>
  Total time    0.06s  (  0.05s elapsed)
<snip>

$ rm cat.exe; ../ghc-testing/inplace/bin/ghc-stage2.exe --make -rtsopts cat.hs -threaded
$ ./cat <1M >/dev/null +RTS -s
<snip>
  Total time    0.05s  (  0.05s elapsed)
<snip>


Why is this? I'm not entirely sure, but I suspect it is the implementation of asynchronous I/O in the RTS that is only used on Windows without -threaded (rts/win32/AsyncIO.c etc.). Every I/O operation in the non-threaded RTS on Windows involves a couple of OS-thread switches.

I'll get the buffer size fixes into 7.0.2.

Cheers,
        Simon

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to