[GHC] #8732: Global big object heap allocator lock causes contention
GHC
ghc-devs at haskell.org
Tue Feb 4 05:42:36 UTC 2014
#8732: Global big object heap allocator lock causes contention
-------------------------------------+------------------------------------
Reporter: tibbe | Owner: simonmar
Type: bug | Status: new
Priority: normal | Milestone:
Component: Runtime System | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Description changed by tibbe:
Old description:
> The lock allocate() takes when allocating big objects hurts scalability
> of I/O bound application. Network.Socket.ByteString.recv is typically
> called with a buffer size of 4096, which causes a ByteString of that size
> to be allocate. The size of this ByteString causes it to be allocated
> from the big object space, which causes contention of the global lock
> that guards that space.
>
> See http://www.yesodweb.com/blog/2014/02/new-warp for a real world
> example.
New description:
The lock `allocate` takes when allocating big objects hurts scalability of
I/O bound application. `Network.Socket.ByteString.recv` is typically
called with a buffer size of 4096, which causes a `ByteString` of that
size to be allocated. The size of this `ByteString` causes it to be
allocated from the big object space, which causes contention of the global
lock that guards that space.
See http://www.yesodweb.com/blog/2014/02/new-warp for a real world
example.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8732#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list