Timothy Bish created PROTON-508:
Summary: Use of Sasl auth results in a large performance hit.
Project: Qpid Proton
Issue Type: Bug
Affects Versions: 0.6
Reporter: Timothy Bish
Fix For: 0.7
Using proton engine in ActiveMQ to implement AMQP 1.0 support we noticed that a
send from broker to the QPid JMS client is terribly slow for large messages.
After some debugging it appears that the SaslImpl class imposes a pretty big
penalty due to the way it wraps the input and output processors of the
When sasl() method of TransportImpl is called to get hold of the Sasl impl for
authentication the transport init method is called and buffers are allocated.
In the SaslImpl class the result is that the output buffer is allocated with
the default value of the remote max frame size since there hasn't been any
negotiation yet. After the SASL handshake completes and the TransportImpl has
updated itself to reflect the QPid client's preferred 64k max frame size, the
SaslImpl instance still continues on with it's internal output buffer of 512
The end result of this is that as we attempt to send out a larger message we
end up in a situation where we are draining the underlying transport output
buffer 512 bytes at a time.
I attached a patch that takes a stab at making the SaslImpl become a passive
entity after it completes the handshake. In testing on ActiveMQ we go from
sending out a 10mb message in 35+ seconds to around 300ms. Unfortunately some
of the tests in the proton tests suite are now failing with this so it's not
This message was sent by Atlassian JIRA