Global big object heap allocator lock causes contention
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.