[
https://issues.apache.org/jira/browse/IGNITE-24038?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17949238#comment-17949238
]
Ivan Bessonov edited comment on IGNITE-24038 at 5/4/25 6:45 AM:
----------------------------------------------------------------
I decided not to implement string introspection optimizations this time, so
that results are cleaner and the code is less controversial. Results are best
visible on shorter strings (less fluctuations) and large number of fields.
Before:
{code:java}
Benchmark
(character) (dataSize) (fieldsCount) (type) Mode Cnt Score
Error Units
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 2 PREDEFINED_STRING avgt 20 0.464 ± 0.033
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 10 PREDEFINED_STRING avgt 20 1.278 ± 0.113
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 100 PREDEFINED_STRING avgt 20 13.292 ± 0.445
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 2 PREDEFINED_STRING avgt 20 14.046 ± 0.758
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 10 PREDEFINED_STRING avgt 20 13.887 ± 0.730
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 100 PREDEFINED_STRING avgt 20 25.318 ± 1.105
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 2 PREDEFINED_STRING avgt 20 14.998 ± 0.657
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 10 PREDEFINED_STRING avgt 20 14.697 ± 0.723
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 100 PREDEFINED_STRING avgt 20 25.915 ± 0.363
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 2 PREDEFINED_STRING avgt 20 0.668 ± 0.047
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 10 PREDEFINED_STRING avgt 20 1.646 ± 0.070
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 100 PREDEFINED_STRING avgt 20 13.829 ± 0.822
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 2 PREDEFINED_STRING avgt 20 49.791 ± 4.246
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 10 PREDEFINED_STRING avgt 20 50.413 ± 2.606
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 100 PREDEFINED_STRING avgt 20 54.271 ± 5.362
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 2 PREDEFINED_STRING avgt 20 77.892 ± 10.471
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 10 PREDEFINED_STRING avgt 20 49.009 ± 4.117
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 100 PREDEFINED_STRING avgt 20 56.731 ± 5.773
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 2 PREDEFINED_STRING avgt 20 0.773 ± 0.033
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 10 PREDEFINED_STRING avgt 20 1.678 ± 0.047
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 100 PREDEFINED_STRING avgt 20 10.377 ± 1.100
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 2 PREDEFINED_STRING avgt 20 73.660 ± 6.169
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 10 PREDEFINED_STRING avgt 20 67.226 ± 5.832
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 100 PREDEFINED_STRING avgt 20 78.844 ± 8.444
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 2 PREDEFINED_STRING avgt 20 77.861 ± 5.158
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 10 PREDEFINED_STRING avgt 20 74.630 ± 2.464
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 100 PREDEFINED_STRING avgt 20 79.689 ± 6.930
us/op {code}
After:
{code:java}
Benchmark
(character) (dataSize) (fieldsCount) (type) Mode Cnt Score
Error Units
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 2 PREDEFINED_STRING avgt 20 0.466 ± 0.022
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 10 PREDEFINED_STRING avgt 20 1.308 ± 0.075
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 100 PREDEFINED_STRING avgt 20 12.809 ± 0.103
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 2 PREDEFINED_STRING avgt 20 14.582 ± 0.589
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 10 PREDEFINED_STRING avgt 20 14.574 ± 0.539
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 100 PREDEFINED_STRING avgt 20 24.999 ± 1.247
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 2 PREDEFINED_STRING avgt 20 14.641 ± 0.849
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 10 PREDEFINED_STRING avgt 20 14.916 ± 0.953
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 100 PREDEFINED_STRING avgt 20 24.170 ± 2.396
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 2 PREDEFINED_STRING avgt 20 0.643 ± 0.028
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 10 PREDEFINED_STRING avgt 20 1.554 ± 0.093
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 100 PREDEFINED_STRING avgt 20 13.936 ± 0.504
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 2 PREDEFINED_STRING avgt 20 54.746 ± 2.978
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 10 PREDEFINED_STRING avgt 20 51.837 ± 3.074
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 100 PREDEFINED_STRING avgt 20 58.439 ± 4.121
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 2 PREDEFINED_STRING avgt 20 57.267 ± 3.959
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 10 PREDEFINED_STRING avgt 20 74.319 ± 6.647
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 100 PREDEFINED_STRING avgt 20 59.012 ± 4.787
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 2 PREDEFINED_STRING avgt 20 0.708 ± 0.059
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 10 PREDEFINED_STRING avgt 20 1.563 ± 0.107
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 100 PREDEFINED_STRING avgt 20 11.057 ± 0.639
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 2 PREDEFINED_STRING avgt 20 74.944 ± 5.712
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 10 PREDEFINED_STRING avgt 20 65.757 ± 6.540
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 100 PREDEFINED_STRING avgt 20 83.319 ± 2.543
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 2 PREDEFINED_STRING avgt 20 80.154 ± 5.135
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 10 PREDEFINED_STRING avgt 20 65.881 ± 6.538
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 100 PREDEFINED_STRING avgt 20 83.470 ± 4.079
us/op{code}
was (Author: ibessonov):
I decided not to implement string introspection optimizations this time, so
that results are cleaner and the code is less controversial. Results are best
visible on shorter strings (less fluctuations) and large number of fields.
Before:
{code:java}
Benchmark
(character) (dataSize) (fieldsCount) (type) Mode Cnt Score
Error Units
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 2 PREDEFINED_STRING avgt 20 0.464 ± 0.033
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 10 PREDEFINED_STRING avgt 20 1.278 ± 0.113
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 100 PREDEFINED_STRING avgt 20 13.292 ± 0.445
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 2 PREDEFINED_STRING avgt 20 14.046 ± 0.758
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 10 PREDEFINED_STRING avgt 20 13.887 ± 0.730
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 100 PREDEFINED_STRING avgt 20 25.318 ± 1.105
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 2 PREDEFINED_STRING avgt 20 14.998 ± 0.657
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 10 PREDEFINED_STRING avgt 20 14.697 ± 0.723
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 100 PREDEFINED_STRING avgt 20 25.915 ± 0.363
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 2 PREDEFINED_STRING avgt 20 0.668 ± 0.047
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 10 PREDEFINED_STRING avgt 20 1.646 ± 0.070
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 100 PREDEFINED_STRING avgt 20 13.829 ± 0.822
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 2 PREDEFINED_STRING avgt 20 49.791 ± 4.246
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 10 PREDEFINED_STRING avgt 20 50.413 ± 2.606
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 100 PREDEFINED_STRING avgt 20 54.271 ± 5.362
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 2 PREDEFINED_STRING avgt 20 77.892 ± 10.471
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 10 PREDEFINED_STRING avgt 20 49.009 ± 4.117
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 100 PREDEFINED_STRING avgt 20 56.731 ± 5.773
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 2 PREDEFINED_STRING avgt 20 0.773 ± 0.033
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 10 PREDEFINED_STRING avgt 20 1.678 ± 0.047
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 100 PREDEFINED_STRING avgt 20 10.377 ± 1.100
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 2 PREDEFINED_STRING avgt 20 73.660 ± 6.169
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 10 PREDEFINED_STRING avgt 20 67.226 ± 5.832
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 100 PREDEFINED_STRING avgt 20 78.844 ± 8.444
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 2 PREDEFINED_STRING avgt 20 77.861 ± 5.158
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 10 PREDEFINED_STRING avgt 20 74.630 ± 2.464
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 100 PREDEFINED_STRING avgt 20 79.689 ± 6.930
us/op {code}
After:
{code:java}
Benchmark
(character) (dataSize) (fieldsCount) (type) Mode Cnt Score
Error Units
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 2 PREDEFINED_STRING avgt 20 0.433 ± 0.029
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 10 PREDEFINED_STRING avgt 20 1.261 ± 0.004
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 250 100 PREDEFINED_STRING avgt 20 11.384 ± 0.473
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 2 PREDEFINED_STRING avgt 20 14.465 ± 0.677
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 10 PREDEFINED_STRING avgt 20 14.076 ± 0.835
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 64000 100 PREDEFINED_STRING avgt 20 22.665 ± 1.435
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 2 PREDEFINED_STRING avgt 20 14.263 ± 0.937
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 10 PREDEFINED_STRING avgt 20 14.680 ± 0.752
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
a 66000 100 PREDEFINED_STRING avgt 20 23.411 ± 1.239
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 2 PREDEFINED_STRING avgt 20 0.646 ± 0.040
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 10 PREDEFINED_STRING avgt 20 1.438 ± 0.083
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 250 100 PREDEFINED_STRING avgt 20 12.309 ± 0.704
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 2 PREDEFINED_STRING avgt 20 75.921 ± 9.547
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 10 PREDEFINED_STRING avgt 20 54.723 ± 4.229
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 64000 100 PREDEFINED_STRING avgt 20 55.887 ± 5.552
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 2 PREDEFINED_STRING avgt 20 60.102 ± 1.936
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 10 PREDEFINED_STRING avgt 20 52.014 ± 3.177
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
ж 66000 100 PREDEFINED_STRING avgt 20 56.229 ± 4.465
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 2 PREDEFINED_STRING avgt 20 0.655 ± 0.059
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 10 PREDEFINED_STRING avgt 20 1.495 ± 0.063
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 250 100 PREDEFINED_STRING avgt 20 10.215 ± 0.575
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 2 PREDEFINED_STRING avgt 20 75.472 ± 4.778
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 10 PREDEFINED_STRING avgt 20 69.885 ± 2.873
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 64000 100 PREDEFINED_STRING avgt 20 80.045 ± 5.762
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 2 PREDEFINED_STRING avgt 20 80.989 ± 4.208
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 10 PREDEFINED_STRING avgt 20 65.969 ± 6.302
us/op
TupleMarshallerVarlenOnlyBenchmark.measureTupleBuildAndMarshallerCost
我 66000 100 PREDEFINED_STRING avgt 20 75.856 ± 8.841
us/op {code}
> Optimize marshaling according to TupleMarshallerVarlenOnlyBenchmark
> -------------------------------------------------------------------
>
> Key: IGNITE-24038
> URL: https://issues.apache.org/jira/browse/IGNITE-24038
> Project: Ignite
> Issue Type: Improvement
> Reporter: Ivan Bessonov
> Assignee: Ivan Bessonov
> Priority: Major
> Labels: ignite-3
> Time Spent: 10m
> Remaining Estimate: 0h
>
> There are a few things that could be easily optimized:
> * Some string manipulations in column names are obviously inefficient
> * -Adding string to binary tuple always leads to array allocation, it might
> be avoided-
> * {{BinaryTupleSchema.createKeySchema}} is called for every tuple, but it's
> always the same
--
This message was sent by Atlassian Jira
(v8.20.10#820010)