Set block buffering for UDSServer
authorKlaus Aehlig <aehlig@google.com>
Thu, 21 Jan 2016 14:45:23 +0000 (15:45 +0100)
committerKlaus Aehlig <aehlig@google.com>
Fri, 22 Jan 2016 11:26:35 +0000 (12:26 +0100)
commitdd6f11c733f90b362d1c397f8e6c55ee92fa5972
tree806849a46e271f007a6217eec3737700f169bdae
parentfcac56737a7f08668e4f01b6a68acec4cb814df7
Set block buffering for UDSServer

Commit b0a7e3771bfd changed sending of JSON-encoded answers
to standard String sending. This was necessary as converting
Strings to ByteStrings, even to lazy ones, fully enforced the
String before the first Char got out of scope and could be
garbage collected.  The down-side of this approach is, that
we now end up with one system call per character to be send.
The good news, however, is that the library's buffering uses
memory only a little more than a byte for a byte, so we can
afford buffering in that layer. Do so to reduce the number of
system calls.

On a, not quite realistic, test cluster, this resulted in the
time for a config-read going down by 1.5 orders of magnitude
with only small increase in residual memory.

Signed-off-by: Klaus Aehlig <aehlig@google.com>
Reviewed-by: Hrvoje Ribicic <riba@google.com>
src/Ganeti/UDSServer.hs