[
https://issues.apache.org/jira/browse/PROTON-144?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16382486#comment-16382486
]
Andrew Stitcher commented on PROTON-144:
----------------------------------------
With the previous 2 commits and PROTON-1754 an empty message is now only 8
bytes in 0.22 down from 43 bytes in 0.21. In theory it could be 0 bytes because
as Ted says above there is no need to encode the HEADER and PROPERTIES sections
at all, but at least they are now encoded in 4 bytes each.
Running the simple_send.cpp example sending 100 messages to a broker (message
payload approx 20 bytes) reduces the total bytes sent/received from approx
12100 to approx 9000 bytes giving a rough saving of 31 bytes a message. Note
that this case isn't as good as the possible maximum (35 bytes) because there
are some non default values in the message payload - however the transfer frame
itself has also got shorter due to eliminating some nulls. Also some other
frames have also got a little shorter too (especially flow and disposition
frames).
For the example of a 2 byte message as in the original issue report I'd expect
the message payload now to be 15 bytes - the minimum would seem to be 7 bytes.
> Reduce byte overhead for small payloads
> ---------------------------------------
>
> Key: PROTON-144
> URL: https://issues.apache.org/jira/browse/PROTON-144
> Project: Qpid Proton
> Issue Type: Bug
> Components: proton-c
> Affects Versions: 0.2, 0.3
> Reporter: Affan Dar
> Assignee: Andrew Stitcher
> Priority: Major
> Labels: codec, perf
>
> In constrained bandwidth scenarios (e.g. on a cellular data network) any byte
> overhead is very costly.
> From the traces for a simple app, we are seeing a large overhead (>100 bytes)
> in the message payload for sending a two byte message. It seems like there
> are some default properties like the to and reply-to addresses that the
> proton client stamps onto a message and also there is padding on the actual
> two byte payload itself.
> To be able to successfully embed the proton lib in such resource constrained
> devices the byte overhead needs to be trimmed down as much as the protocol
> allows.
> ---------------------------
> Details of test app
> ---------------------------
> The testing environment is OpenSUSE 11.4 64bit, the AMQP library is from SVN
> updated usually once a day although commits have slowed since the push for
> 0.2 and libopenssl version 1.0.0e-34.17.1.
> The debugging output is all from proton, to get the debugging output set the
> Env variable "PN_TRACE_FRM=1"
> The test is done connecting to localhost and sending a message across as
> simply as possible:
> client:
> pn_messenger_t *messenger = pn_messenger("b");
> pn_messenger_start(messenger);
> pn_message_t *message = pn_message();
> pn_message_set_address(message, "amqps://0.0.0.0/a");
> char data[2] = {(unsigned char)0xff, (unsigned char)0xff};
> pn_message_load_data(message, data, 2);
> pn_messenger_put(messenger, message);
> pn_messenger_send(messenger);
>
> server code:
> pn_messenger_t *messenger = pn_messenger("a");
> pn_messenger_start(messenger);
> pn_messenger_subscribe(messenger, "amqps://~0.0.0.0");
> pn_message_t *message = pn_message();
> pn_messenger_recv(messenger, 1);
> pn_messenger_get(messenger, message);
> size_t size = 2;
> char data[2];
> pn_message_save_data(message, data, &size);
>
> server output:
> Accepted from localhost.localdomain:36331
> -> SASL
> [0x622180:0] -> SASL-MECHANISMS @64 [@PN_SYMBOL[:ANONYMOUS]]
> [0x622180:0] -> SASL-OUTCOME @68 [0]
> -> AMQP
> [0x61c7c0:0] -> OPEN @16 ["a", null, null, null, null, null, null, null, null]
> <- SASL
> [0x622180:0] <- SASL-INIT @65 [:ANONYMOUS, b""]
> <- AMQP
> [0x61c7c0:0] <- OPEN @16 ["b", "0.0.0.0", null, null, null, null, null, null,
> null]
> [0x61c7c0:1] <- BEGIN @17 [null, 0, 1024, 1024]
> [0x61c7c0:1] <- ATTACH @18 ["sender-xxx", 1, false, null, null, @40 ["a", 0,
> null, 0, false, null, null, null, null, null, null], @41 ["a", 0, null, 0,
> false, null, null], null, null, 0]
> [0x61c7c0:1] -> BEGIN @17 [1, 0, 1024, 1024]
> [0x61c7c0:1] -> ATTACH @18 ["sender-xxx", 1, true, null, null, @40 ["a", 0,
> null, 0, false, null, null, null, null, null, null], @41 ["a", 0, null, 0,
> false, null, null], null, null, 0]
> [0x61c7c0:1] -> FLOW @19 [0, 1024, 0, 1024, 1, 0, 1, null, false]
> [0x61c7c0:1] <- TRANSFER @20 [1, 0, b"\x00\x00\x00\x00\x00\x00\x00\x00", 0,
> true, false] (133)
> "\x00\x80\x00\x00\x00\x00\x00\x00\x00p\xd0\x00\x00\x00\x10\x00\x00\x00\x05V\x00P\x04@V\x00p\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00s\xd0\x00\x00\x00F\x00\x00\x00\x0d@@\xb1\x00\x00\x00\x11amqps://0.0.0.0/a@\xb1\x00\x00\x00\x08amqp://b@@@\x83\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@p\x00\x00\x00\x00@\x00\x80\x00\x00\x00\x00\x00\x00\x00w\xb0\x00\x00\x00\x02\xff\xff"
>
> client output:
> Connected to 0.0.0.0:5671
> -> SASL
> [0x620020:0] -> SASL-INIT @65 [:ANONYMOUS, b""]
> <- SASL
> [0x620020:0] <- SASL-MECHANISMS @64 [@PN_SYMBOL[:ANONYMOUS]]
> [0x620020:0] <- SASL-OUTCOME @68 [0]
> <- AMQP
> [0x61a840:0] <- OPEN @16 ["a", null, null, null, null, null, null, null, null]
> -> AMQP
> [0x61a840:0] -> OPEN @16 ["b", "0.0.0.0", null, null, null, null, null, null,
> null]
> [0x61a840:1] -> BEGIN @17 [null, 0, 1024, 1024]
> [0x61a840:1] -> ATTACH @18 ["sender-xxx", 1, false, null, null, @40 ["a", 0,
> null, 0, false, null, null, null, null, null, null], @41 ["a", 0, null, 0,
> false, null, null], null, null, 0]
> [0x61a840:1] <- BEGIN @17 [1, 0, 1024, 1024]
> [0x61a840:1] <- ATTACH @18 ["sender-xxx", 1, true, null, null, @40 ["a", 0,
> null, 0, false, null, null, null, null, null, null], @41 ["a", 0, null, 0,
> false, null, null], null, null, 0]
> [0x61a840:1] <- FLOW @19 [0, 1024, 0, 1024, 1, 0, 1, null, false]
> [0x61a840:1] -> TRANSFER @20 [1, 0, b"\x00\x00\x00\x00\x00\x00\x00\x00", 0,
> true, false] (133)
> "\x00\x80\x00\x00\x00\x00\x00\x00\x00p\xd0\x00\x00\x00\x10\x00\x00\x00\x05V\x00P\x04@V\x00p\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00s\xd0\x00\x00\x00F\x00\x00\x00\x0d@@\xb1\x00\x00\x00\x11amqps://0.0.0.0/a@\xb1\x00\x00\x00\x08amqp://b@@@\x83\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00@p\x00\x00\x00\x00@\x00\x80\x00\x00\x00\x00\x00\x00\x00w\xb0\x00\x00\x00\x02\xff\xff
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]