Bug 1039581 - [amqp1.0] performance on creating the endpoints
Summary: [amqp1.0] performance on creating the endpoints
Keywords:
Status: NEW
Alias: None
Product: Red Hat Enterprise MRG
Classification: Red Hat
Component: qpid-cpp
Version: Development
Hardware: Unspecified
OS: Unspecified
medium
medium
Target Milestone: 3.3
: ---
Assignee: Gordon Sim
QA Contact: Messaging QE
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2013-12-09 14:05 UTC by Petr Matousek
Modified: 2020-11-04 22:29 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed:
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Bugzilla 1129997 0 high CLOSED qpid c++ client AMQP 1.0 throughput performance regression 2021-02-22 00:41:40 UTC

Internal Links: 1129997

Description Petr Matousek 2013-12-09 14:05:09 UTC
Description of problem:

The amqp1.0 protocol seems to have better performance when sending/receiving messages if the endpoints are already established. Which is most probably the most of the use cases. That is good.

On the other hand establishing the 1.0 endpoints (connection/session/sender/receiver) takes significantly more time than when using amqp0-10 (ie. 10 times more, see below). 

Also the 0-10 clients shows consistent execution time while the execution time of 1.0 clients significantly differs (when re-executing the client several times).

Since there is a Vienna requirement - AMQP-1500: No Performance Degradation, I'm raising this issue to highlight the current behavior. I'm not necessarily requesting a fix for this issue, but I want to let the developers think about/make aware of that fact.

Please see additional info for more details.

Version-Release number of selected component (if applicable):
qpid-cpp-*-0.22-29

How reproducible:
100%

Steps to Reproduce:
1. see additional info

Additional info:

___The amqp1.0 protocol seems to have better performance when sending/receving messages if the endpoints are already established___:

# content=$(openssl rand -hex 2047)
# time /var/dtests/node_data/clients/qc2_spout --connection-options "{protocol: 'amqp0-10'}" -c 10000000 --content ${content} amq.direct >/dev/null; 


real	 23m32.117s
user	 8m54.179s
sys	 7m37.434s

# time /var/dtests/node_data/clients/qc2_spout --connection-options "{protocol: 'amqp1.0'}" -c 10000000 --content ${content} amq.direct >/dev/null;

real	 17m56.056s
user	 6m18.512s
sys	 4m0.415s

___On the other hand establishing the endpoints (Connection/session/sender/receiver) takes significantly more time than when using amqp0-10___:


# time for i in $(seq 1 20); do /var/dtests/node_data/clients/qc2_spout --connection-options "{protocol: 'amqp0-10'}" -c 1 --content ${content} amq.direct >/dev/null; done

real	0m0.546s
user	0m0.379s
sys	0m0.140s
[root /var/dtests/node_data/clients]# time for i in $(seq 1 20); do /var/dtests/node_data/clients/qc2_spout --connection-options "{protocol: 'amqp1.0'}" -c 1 --content ${content} amq.direct >/dev/null; done

real 	0m1.384s
user 	0m0.431s
sys	0m0.142s

The following command creates 500 connections to the broker:
# time ./qc2_connector -c 500 --connection-options "{protocol: 'amqp0-10'}" --obj-ctrl "C"
500 0 500

real 	0m0.843s
user	0m0.170s
sys	0m0.407s

# time ./qc2_connector -c 500 --connection-options "{protocol: 'amqp1.0'}" --obj-ctrl "C"
500 0 500

real	0m8.587s
user	0m0.241s
sys	0m0.414s

The following command list various objects using qmf:
# time for i in $(seq 1 20); do /var/dtests/node_data/clients/qmf2_list_objects 1>/dev/null; done

real	0m0.651s
user	0m0.375s
sys	0m0.159s
# time for i in $(seq 1 20); do /var/dtests/node_data/clients/qmf2_list_objects  --connection-options "{protocol: 'amqp1.0'}" 1>/dev/null; done

real	0m6.290s
user	0m0.557s
sys	0m0.237s

__the execution time when using amqp1.0 reports unstable results __:

(the command creates 1000 Senders and 1000 Receivers on 1000 sEssions on 1000 Connections)
# time ./qc2_connector -c 1000 --connection-options "{protocol: 'amqp1.0'}" --obj-ctrl "CESR"
1000 0 1000

real 	0m2.738s
user	0m0.438s
sys	0m0.590s
# time ./qc2_connector -c 1000 --connection-options "{protocol: 'amqp1.0'}" --obj-ctrl "CESR"
1000 0 1000

real	0m21.769s
user	0m0.433s
sys	0m0.609s


Note You need to log in before you can comment on or make changes to this bug.