activemq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (ARTEMIS-1383) Improved Priority queue
Date Sat, 02 Sep 2017 15:39:02 GMT

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

ASF GitHub Bot commented on ARTEMIS-1383:
-----------------------------------------

Github user franz1981 commented on the issue:

    https://github.com/apache/activemq-artemis/pull/1505
  
    @clebertsuconic @tabish121 @gemmellr 
    I've used JMH to perform the burst tests (ie drainInBurst, pollInBurst) and an unbounded
offer/offerFirst (with pure accumulation, to kill any GC, using a huge heap).
    
    ```
    Benchmark                                                              (qType)   Mode
 Cnt         Score           Error   Units
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    Burst Size 1024
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    QueueBenchmark.drainInBurst                                       JcLinkedList  thrpt
   5     56196.133 ±      9862.363   ops/s
    QueueBenchmark.drainInBurst:·gc.count                             JcLinkedList  thrpt
   5         4.000                  counts
    QueueBenchmark.drainInBurst:·gc.time                              JcLinkedList  thrpt
   5        17.000                      ms
    
    QueueBenchmark.drainInBurst                                  ArtemisLinkedList  thrpt
   5     41398.925 ±     23173.625   ops/s
    QueueBenchmark.drainInBurst:·gc.count                        ArtemisLinkedList  thrpt
   5         2.000                  counts
    QueueBenchmark.drainInBurst:·gc.time                         ArtemisLinkedList  thrpt
   5         9.000                      ms
    
    QueueBenchmark.drainInBurst                                       ChunkedQueue  thrpt
   5    105927.112 ±     37350.450   ops/s
    QueueBenchmark.drainInBurst:·gc.count                             ChunkedQueue  thrpt
   5           ≈ 0                  counts
    
    QueueBenchmark.drainInBurst                                         ArrayDeque  thrpt
   5    107934.616 ±     32457.204   ops/s
    QueueBenchmark.drainInBurst:·gc.count                               ArrayDeque  thrpt
   5           ≈ 0                  counts
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    QueueBenchmark.pollInBurst                                        JcLinkedList  thrpt
   5     81885.266 ±     17907.776   ops/s
    QueueBenchmark.pollInBurst:·gc.count                              JcLinkedList  thrpt
   5        13.000                  counts
    QueueBenchmark.pollInBurst:·gc.time                               JcLinkedList  thrpt
   5        10.000                      ms
    
    QueueBenchmark.pollInBurst                                   ArtemisLinkedList  thrpt
   5     63050.521 ±     34661.415   ops/s
    QueueBenchmark.pollInBurst:·gc.count                         ArtemisLinkedList  thrpt
   5        18.000                  counts
    QueueBenchmark.pollInBurst:·gc.time                          ArtemisLinkedList  thrpt
   5        16.000                      ms
    
    QueueBenchmark.pollInBurst                                        ChunkedQueue  thrpt
   5    161280.653 ±     13712.986   ops/s
    QueueBenchmark.pollInBurst:·gc.count                              ChunkedQueue  thrpt
   5           ≈ 0                  counts
    
    QueueBenchmark.pollInBurst                                          ArrayDeque  thrpt
   5    161606.204 ±     16735.474   ops/s
    QueueBenchmark.pollInBurst:·gc.count                                ArrayDeque  thrpt
   5           ≈ 0                  counts
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    QueueBenchmark.offer                                              JcLinkedList  thrpt
   5   6546939.112 ±  27962028.115   ops/s
    
    QueueBenchmark.offer                                         ArtemisLinkedList  thrpt
   5   7366465.904 ±  31622858.611   ops/s
    
    QueueBenchmark.offer                                              ChunkedQueue  thrpt
   5  41271280.062 ± 155829613.478   ops/s
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    QueueBenchmark.offerFirst                                         JcLinkedList  thrpt
   5   5911597.446 ±  24163046.423   ops/s
    
    QueueBenchmark.offerFirst                                    ArtemisLinkedList  thrpt
   5   3783064.578 ±  23493857.464   ops/s
    
    QueueBenchmark.offerFirst                                         ChunkedQueue  thrpt
   5  35790062.086 ± 102802329.954   ops/s
    ```
    As can be seen ChunkedQueue performs for fixed sized bursty scenarios like an ArrayDeque
(ie 1 order of magnitude better than any linked list) and for accumulating burst (with no
consume involved) one order of magnitude better than a linked list (artemis or the Java Collection
one).


> Improved Priority queue
> -----------------------
>
>                 Key: ARTEMIS-1383
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-1383
>             Project: ActiveMQ Artemis
>          Issue Type: Improvement
>          Components: Broker
>            Reporter: Francesco Nigro
>            Assignee: Francesco Nigro
>
> The original PriorityLinkedList implementation is based on a double linked list implementation
that suffer of:
> * fragmentation along the heap
> * pointer chasing due to the presence of nodes
> * allocation heavy (ie each add operation forces allocation of nodes)
> * high hidden (ie the nodes) memory footprint that lead to wrong memory estimations
> It is possible to provide a specialized chunked implementation that can address all these
issues while providing a better performance (throughput, latency and memory footprint wise).



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message