[ 
https://issues.apache.org/jira/browse/QPID-6255?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14241136#comment-14241136
 ] 

Ken Giusti commented on QPID-6255:
----------------------------------

I think I can account for the performance difference:

I did a callgrind analysis of the two different approaches (polled vs. event) 
and the 'instruction cost' of the event implementation is a little more than an 
order of magnitude higher (0.35% vs 0.02% as a percentage of the total 
instruction count).

Digging a little further it turns out that the event handler is actually 
discarding about 50% of the received events.  About 1/4 of the total events are 
PN_TRANSPORT events, which the driver ignores (pending output is checked later 
in the code).  The really interesting bit is that there is a PN_LINK_FLOW for 
_every_ transmitted frame!   The actual on-the-wire flow frames are much less 
(like 100x less).

The engine emits a PN_LINK_FLOW from two points in the code: when a flow frame 
arrives, and when credit is consumed (a transfer is done).  IMHO, these are two 
semantically different events.  I would argue that they should be treated as 
such.

I've hacked a local copy of proton to stop emitting PN_LINK_FLOW events on 
credit consumption, and PN_TRANSPORT events entirely and the resulting 
performance improvements bring it to parity with the polled approach.

I think if Proton allowed event filtering (so we could avoid the PN_TRANSPORT 
events) and split the flow events into two separate events we could improve 
this patch.    I'll raise this on the mailing list.

> [amqp1.0] Migrate to the new Proton event API
> ---------------------------------------------
>
>                 Key: QPID-6255
>                 URL: https://issues.apache.org/jira/browse/QPID-6255
>             Project: Qpid
>          Issue Type: Improvement
>          Components: C++ Broker
>    Affects Versions: 0.30
>            Reporter: Ken Giusti
>            Assignee: Ken Giusti
>             Fix For: Future
>
>
> Proton version 0.8 introduced an event-based API.  The Qpid broker currently 
> uses the older API which requires a linear search of deliveries, links, and 
> sessions during event processing.  Migrating to the new API _should_ optimize 
> event processing, especially as the number of object instances scale.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to