[ 
https://issues.apache.org/jira/browse/IGNITE-22977?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexey Scherbakov updated IGNITE-22977:
---------------------------------------
    Description: 
Tx mapping phase has some deficiencies, discovered during tracing, which need 
to be addressed.
 * HybridClockImpl uses currentTimeMillis on each update. This call is heavy, 
better use FastTimestamps with 1 millisecond resolution.
 * CompletableFuture has unexpected latency issues:
 ** onTimeout add 4-5 us of latency
 ** chaining adds 0.5-1 us of latency. instead of using
CompletableFuture.completedFuture(val).handle(closure) better to use if 
(fut.isDone()) closure();
 * Metadata validation {{{}validateTableExistence{}}}, 
{{{}validateSchemaMatch{}}}, {{{}waitForSchemasBeforeReading{}}}should wait 
only once.
 * Number of shared memory access (like updating some counter) should be 
reduced. For example index rebuilding uses counters per each txn and operation.
 * BinaryRow generation is 2x slower than BinaryObject in AI2: 5us vs 10us
 * Thread switching brings a lot of latency. Using green threads may give a 
benefit.
 * RAFT command is completed always in partitions thread pool
 * Number of {{clockService.now()}} calls could be reduced.
 * Each tx lock cost 2us. Might be improved to 1us.
 * Lease checking adds waiter even if not necessary.
 * Row id generation uses randomUUID which is heavy.

  was:
Tx mapping phase has some deficiencies, discovered during tracing, which need 
to be addressed.
 * HybridClockImpl uses currentTimeMillis on each update. This call is heavy, 
better use FastTimestamps with 1 millisecond resolution.
 * CompletableFuture has unexpected latency issues:
 ** onTimeout add 4-5 us of latency
 ** chaining adds 0.5-1 us of latency. instead of using
CompletableFuture.completedFuture(val).handle(closure) better to use if 
(fut.isDone()) closure();
 * Metadata validation {{{}validateTableExistence{}}}, 
{{{}validateSchemaMatch{}}}, {{{}waitForSchemasBeforeReading{}}}should wait 
only once.
 * Number of shared memory access (like updating some counter) should be 
reduced. For example index rebuilding uses counters per each txn and operation.
 * BinaryRow generation is 2x slower than BinaryObject in AI2: 5us vs 10us
 * Thread switching brings a lot of latency.
 * RAFT command is completed always in partitions thread pool
 * Number of {{clockService.now()}} calls could be reduced.
 * Each tx lock cost 2us. Might be improved to 1us.
 * Lease checking adds waiter even if not necessary.
 * Row id generation uses randomUUID which is heavy.


> Reduce latency for txn preparing phase
> --------------------------------------
>
>                 Key: IGNITE-22977
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22977
>             Project: Ignite
>          Issue Type: Improvement
>    Affects Versions: 3.0
>            Reporter: Alexey Scherbakov
>            Assignee: Alexey Scherbakov
>            Priority: Major
>              Labels: ignite-3
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Tx mapping phase has some deficiencies, discovered during tracing, which need 
> to be addressed.
>  * HybridClockImpl uses currentTimeMillis on each update. This call is heavy, 
> better use FastTimestamps with 1 millisecond resolution.
>  * CompletableFuture has unexpected latency issues:
>  ** onTimeout add 4-5 us of latency
>  ** chaining adds 0.5-1 us of latency. instead of using
> CompletableFuture.completedFuture(val).handle(closure) better to use if 
> (fut.isDone()) closure();
>  * Metadata validation {{{}validateTableExistence{}}}, 
> {{{}validateSchemaMatch{}}}, {{{}waitForSchemasBeforeReading{}}}should wait 
> only once.
>  * Number of shared memory access (like updating some counter) should be 
> reduced. For example index rebuilding uses counters per each txn and 
> operation.
>  * BinaryRow generation is 2x slower than BinaryObject in AI2: 5us vs 10us
>  * Thread switching brings a lot of latency. Using green threads may give a 
> benefit.
>  * RAFT command is completed always in partitions thread pool
>  * Number of {{clockService.now()}} calls could be reduced.
>  * Each tx lock cost 2us. Might be improved to 1us.
>  * Lease checking adds waiter even if not necessary.
>  * Row id generation uses randomUUID which is heavy.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to