I'm working on a multiprocess branch that passes a lot of data back and forth between server and client.
When looking at a flamegraph, it's clear that >50% of my client's cpu time is spent on logging (encoding) sends. Likewise for the server with responses.
The culprit is toString() from the params/results/request/response, which ends up in kj::_::encodeCEscapeImpl(), which is horribly slow.
Current master:

Fixed:

As you can see, before removing the logging, 52% of my thread's runtime is spent in serverInvoke (which calls foo.toString(), which calls structString(), which calls kj::_::encodeCEscapeImpl(). With the debug lines removed, serverInvoke is no longer visible in the flamegraph at all.
I would imagine the sv2 implementation suffers from this as well, though I'm not sure how chatty it is, so I can't speak to the potential impact.
I'll open a RFC PR which fixes the issue rather naively. A more robust solution would introduce logging categories similar to Bitcoin Core's.
Edit: See #216.
Also, toned down the original title :)
I'm working on a multiprocess branch that passes a lot of data back and forth between server and client.
When looking at a flamegraph, it's clear that >50% of my client's cpu time is spent on logging (encoding) sends. Likewise for the server with responses.
The culprit is
toString()from theparams/results/request/response, which ends up inkj::_::encodeCEscapeImpl(), which is horribly slow.Current master:


Fixed:
As you can see, before removing the logging, 52% of my thread's runtime is spent in
serverInvoke(which callsfoo.toString(), which callsstructString(), which callskj::_::encodeCEscapeImpl(). With the debug lines removed,serverInvokeis no longer visible in the flamegraph at all.I would imagine the sv2 implementation suffers from this as well, though I'm not sure how chatty it is, so I can't speak to the potential impact.
I'll open a RFC PR which fixes the issue rather naively. A more robust solution would introduce logging categories similar to Bitcoin Core's.Edit: See #216.
Also, toned down the original title :)