ARTEMIS-3163 Support for Netty IO_URING transport #5774
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a continuation of #5296 using a branch from @jbertram that's using Netty 4.2. (Netty support in a separate commit)
Setting this as a separate PR as it'd dependent on having the Netty branch merged first and as far as I can tell there is at least one more issue remaining for Netty 4.2, where some tests under
karaf-client-integration-tests
are currently failing.I think it's because
artemis-features
cannot build properly as at least one dependency requires a lower version of Netty:missing requirement [org.apache.qpid.jms.client/1.13.0] osgi.wiring.package; filter:="(&(osgi.wiring.package=io.netty.bootstrap)(version>=4.1.0)(!(version>=4.2.0)))"
Regardless, use of the Io_Uring transport is showing a lot of promise. Running tests against a broker with default configuration, only setting useEpoll vs useIoUring and using the following perf client commands:
epoll:
bin/artemis perf client --warmup 60 --duration 300 --max-pending 100 --persistent --url "tcp://localhost:61616?confirmationWindowSize=20000" --consumer-url "tcp://localhost:61616" --show-latency --consumers 2 --num-destinations 30 --hdr broker-uring_client-uring_30-destinations.hdr queue://EPOLL.EPOLL
uring:
bin/artemis perf client --warmup 60 --duration 300 --max-pending 100 --persistent --url "tcp://localhost:61616?confirmationWindowSize=20000&useIoUring=true" --consumer-url "tcp://localhost:61616?useIoUring=true" --show-latency --consumers 2 --num-destinations 30 --hdr broker-epoll_client-epoll_30-destinations_faster.hdr queue://URING.URING
I can see that IoUring transfers about 12% more messages in the given time and they have the following latency percentiles:

Epoll:
IoUring:

The tests are run on my work laptop so I'd take those results as a rough indicator and nothing more though.