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

ASF subversion and git services commented on ARTEMIS-3522:
----------------------------------------------------------

Commit a51916447efc05c7e7ade68f035261b864d27503 in activemq-artemis's branch 
refs/heads/main from franz1981
[ https://gitbox.apache.org/repos/asf?p=activemq-artemis.git;h=a519164 ]

ARTEMIS-3522 Improve next fire time computation using double period


> Implement performance tools to evaluate throughput and Response Under Load 
> performance of Artemis
> -------------------------------------------------------------------------------------------------
>
>                 Key: ARTEMIS-3522
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-3522
>             Project: ActiveMQ Artemis
>          Issue Type: New Feature
>          Components: Broker, JMS
>            Reporter: Francesco Nigro
>            Assignee: Francesco Nigro
>            Priority: Major
>          Time Spent: 2h 50m
>  Remaining Estimate: 0h
>
> There are many performance benchmarks around eg [SoftwareMill 
> MqPerf|https://softwaremill.com/mqperf/] that could be used to test 
> performance of Artemis in specific scenario, but none is both simple and easy 
> to be composed with ad-hoc env setup scripts to perform a wide range of 
> different performance tests against the broker.
> This JIRA aim to provide CLI commands that could be used as building blocks 
> to perform:
> * all-out throughput tests
> * responsiveness under load tests (with no [coordinated 
> omission|http://highscalability.com/blog/2015/10/5/your-load-generator-is-probably-lying-to-you-take-the-red-pi.html])
>  ie fixed throughput (per producer) load
> * scalability tests
> The effort of this JIRA should produce CLI commands similar to [Apache Pulsar 
> Perf|https://pulsar.apache.org/docs/en/performance-pulsar-perf/] that could 
> be composed to create complete performance benchmark pipelines (eg using 
> [qDup|https://github.com/Hyperfoil/qDup] and 
> [Horreum|https://github.com/Hyperfoil/Horreum] on a CI/CD) or used as-it-is 
> by users to quickly check performance of the broker.
> Requirements:
> * support AMQP and Core protocol
> * cross JVMs with microseconds time measurement granularity
> *  support parsable output format 
> * suitable to perform scale tests
> The last requirement can be achieved both by using MessageListeners and async 
> producers available on [JMS 
> 2|https://javaee.github.io/jms-spec/pages/JMS20FinalRelease] although both 
> [qpid JMS|https://github.com/apache/qpid-jms] and Artemis Core protocols 
> blocks the producer caller thread ie the former on 
> [jmsConnection::send|https://github.com/apache/qpid-jms/blob/1622de679c3c6763db54e9ac506ef2412fbc4481/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java#L773],
>  awaiting Netty threads to unblock it on 
> [AmqpFixedProducer::doSend|https://github.com/apache/qpid-jms/blob/1622de679c3c6763db54e9ac506ef2412fbc4481/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpFixedProducer.java#L169],
>  while the latter on 
> [ClientProducerImpl::sendRegularMessage|https://github.com/apache/activemq-artemis/blob/e364961c8f035613f3ce4e3bdb3430a17efb0ffd/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientProducerImpl.java#L284-L294].
> This seems odd because [JMS 2's 
> CompletionListener|https://docs.oracle.com/javaee/7/api/javax/jms/CompletionListener.html]
>  should save any previous send operation to ever block and the user should 
> take care (despite being tedious and error-prone) to track the amount of 
> in-flight messages and limit it accordly (ie [Reactive Messaging's 
> Emitter|https://smallrye.io/smallrye-reactive-messaging/smallrye-reactive-messaging/2/emitter/emitter.html#emitter-overflow]
>  abstract it with its overflow policies to save blocking the caller thread). 
> If JMS 2 both impl cannot be turned into non-blocking then there're just 2 
> options:
> # using the blocking variant: it means that scalability tests requires using 
> machines with high core numbers 
> #  using [Reactive 
> Messaging|https://github.com/eclipse/microprofile-reactive-messaging], but 
> losing the ability to use local transactions (and maybe other JMS features)
> With the first option the number of producers threads can easily be much more 
> then the available cores, causing the load generator to benchmark OS (or the 
> runtime) ability to context switch threads instead of the broker. That's why 
> a non-blocking approach should be preferred.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to