пт, 28 авг. 2020 г. в 11:16, Alex Plehanov <plehanov.a...@gmail.com>:

> Guys,
>
> We have benchmarked 2.9 without IGNITE-13060 and IGNITE-12568 (reverted it
> locally) and got the same performance as on 2.8.1
>
> IGNITE-13060 (Tracing) - some code was added to hot paths, to trace these
> hot paths, it's clear why we have performance drop here.
>
> IGNITE-12568 (MessageFactory refactoring) - switch/case block was
> refactored to an array of message suppliers. The message factory is on the
> hot path, which explains why this commit has an impact on total
> performance.
> I've checked JIT assembly output, done some JMH microbenchmarks, and found
> that old implementation of MessageFactory.create() about 30-35% faster than
> the new one. The reason - approach with switch/case can effectively inline
> message creation code, but with an array of suppliers relatively heavy
> "invokeinterface" cannot be skipped. I've tried to rewrite the code using
> an abstract class for suppliers instead of an interface (to
> replace "invokeinterface" with the "invokevirtual"), but it gives back only
> 10% of method performance and in this case, code looks ugly (lambdas can't
> be used). Currently, I can't find any more ways to optimize the current
> approach (except return to the switch/case block). Andrey Gura, as the
> author of IGNITE-12568, maybe you have some ideas about optimization?
>
> Perhaps we should revert IGNITE-12568, but there are some metrics already
> created, which can't be rewritten using old message factory implementation
> (IGNITE-12756). Guys, WDYT?
>

Alexey,

I see that IGNITE-12756 (metrics improvements) is already released in
Ignite 2.8.1 while IGNITE-12568 (message factory) is only present in Ignite
2.9. Let's revert both IGNITE-12568 and whichever new metrics created for
2.9 that depend on the new message factory to unblock the release and deal
with the optimizations in 2.10?

Reply via email to