[GHC] #8400: Migrate the RTS to use libuv (or libev, or libevent)

GHC ghc-devs at haskell.org
Wed Aug 9 01:20:06 UTC 2017


#8400: Migrate the RTS to use libuv (or libev, or libevent)
-------------------------------------+-------------------------------------
        Reporter:  schyler           |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Runtime System    |              Version:
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  635, 7353         |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by winter):

 I have attached the heap profile, the previous `+RTS -s` seems to be a
 mistake(I don't have a clue why it report such a big different), mio do
 allocate more memory, but that much.

 The benchmark parameters are:

 {{{wrk -c1000 -d10s http://127.0.0.1:8888}}}

 The request rate are

 {{{
 libuv: Requests/sec: 264542.07
 mio: Requests/sec: 236880.75
 }}}

 > If we could make the libuv backend optional and keep the existing
 codepath then maybe I can see us merge this, but otherwise it seems like
 we should simply try to optimize what we have rather than throw the whole
 thing away.

 I personally feel no rush to change current base's I/O manager: it works
 well, and needed by GHCi. But since this ticket's purpose is to discuss
 the possibilities of integrate libuv, i would like to hear more.

 > native dependencies are bound to either increase the complexity of the
 build system (if we statically link) or dramatically complicate
 distribution (if we dynamically link).

 I'm interested in distribute my library with a statically linked libuv, is
 it possible with cabal? libuv is quite easy to build on unix, but i don't
 know the situation on windows, it seems require visual studio.

 >  Further, it looks like libuv doesn't even support all of the platforms
 which GHC supports (OpenBSD, for instance).

 This is definitely not true, Node.js officially support OpenBSD so i don't
 see a reason why libuv not. I guess OpenBSD is just not on their CI.

 > I strongly suspect there is some very low-hanging fruit in mio.

 Can't say for libuv branch, but I think i got some other low-hanging
 fruit, e.g. i'm preparing the patch for `primitive` since you asked. It
 will include the `PrimArray a` and `class Arr (marr :: * -> * -> *) (arr
 :: * -> * ) a | arr -> marr, marr -> arr`.

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8400#comment:19>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list