[
https://issues.apache.org/jira/browse/PROTON-2229?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17218386#comment-17218386
]
Ketrab CM commented on PROTON-2229:
-----------------------------------
I met the same issue. I send messages with quite large binary content (10mb).
Function *pni_data_intern* adds extra *"\0"* into the buf and because capacity
is equal to payload, proton resises buf and starts costly performance functions
*pn_buffer_derag* / *pn_buffer_rotate*.
I changed *pni_data_intern_node* to initialize buf with +1 extra byte (needed
later for "\0")
{code:java}
data->buf = pn_buffer(bytes->size + 1) {code}
and looks like it helps a lot.
> pn_data_t initialization lead to low performance
> ------------------------------------------------
>
> Key: PROTON-2229
> URL: https://issues.apache.org/jira/browse/PROTON-2229
> Project: Qpid Proton
> Issue Type: Bug
> Components: proton-c
> Affects Versions: proton-c-0.30.0
> Environment: x86_64 GNU/Linux
> Reporter: wanfa deng
> Assignee: Andrew Stitcher
> Priority: Major
> Labels: initialization, perf
> Original Estimate: 5h
> Remaining Estimate: 5h
>
> Recently I update qpid-proton from 0.28.0 to 0.30.0 version, and find massive
> produce performance fallen by 80%。
> Finally,I find this is caused by pn_data_t initialization。 In 0.28.0 version,
> it's like
> data->buf = pn_buffer(64);
> and in In 0.30.0 version, it's like
> data->buf = NULL;
>
> And when data->buf is initialized by NULL, in the following call flow,
> pn_data_put_binary->pni_data_intern_node->pn_buffer_memory->pn_buffer_defrag->pn_buffer_rotate,
>
> buf->start is more likely not equal to 0, this is leading to buffer rotate,
> and make the performance lower.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]