[
https://issues.apache.org/jira/browse/IGNITE-10877?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16746171#comment-16746171
]
Alexei Scherbakov commented on IGNITE-10877:
--------------------------------------------
[~voropava],
My comments:
# I do not like IGNITE_AFFINITY_BACKUPS_THRESHOLD property. You already know
number of nodes in assignment and should automatically choose most optimal way
to store assignements depending on benchmark results.
# In addition to 1 please introduce new system property like
IGNITE_DISABLE_AFFINITY_MEMORY_OPTIMIZATION to force old implementation.
# Please introduce test which automatically compares heap occupation with
enabled and disabled optimization with various topology/partitions/caches
sizes. Optimized mode must always be better than previous implementation. You
can use techniques like ObjectGraphMeasurer for estimating object graph size
from application.
# I do not like class BitSetIntSet. It's better to introduce interface
GridIntSet implementing Set<Integer> and providing primitive(batch)
iterators/getters API. In future where might be other implementations, on
example compressed bit sets (see IGNITE-4554). I think this might be done in
separate ticket and not crucial for this contribution.
> GridAffinityAssignment.initPrimaryBackupMaps memory pressure
> ------------------------------------------------------------
>
> Key: IGNITE-10877
> URL: https://issues.apache.org/jira/browse/IGNITE-10877
> Project: Ignite
> Issue Type: Improvement
> Reporter: Pavel Voronkin
> Assignee: Pavel Voronkin
> Priority: Major
> Attachments: grid.srv.node.1.0-29.12.2018-12.50.15.jfr,
> image-2019-01-17-12-58-07-382.png, image-2019-01-17-12-59-52-137.png,
> image-2019-01-17-15-45-49-561.png, image-2019-01-17-15-45-53-043.png,
> image-2019-01-17-15-46-32-872.png, image-2019-01-18-11-36-57-451.png,
> image-2019-01-18-11-38-39-410.png, image-2019-01-18-11-55-39-496.png,
> image-2019-01-18-11-56-10-339.png, image-2019-01-18-11-56-18-040.png,
> image-2019-01-18-12-09-04-835.png, image-2019-01-18-12-09-32-876.png
>
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
> 1) While running tests with JFR we observe huge memory allocation pressure
> produced by:
> *Stack Trace TLABs Total TLAB Size(bytes) Pressure(%)*
> java.util.HashMap.newNode(int, Object, Object, HashMap$Node) 481 298 044 784
> 100
> java.util.HashMap.putVal(int, Object, Object, boolean, boolean) 481 298 044
> 784 100
> java.util.HashMap.put(Object, Object) 481 298 044 784 100
> java.util.HashSet.add(Object) 480 297 221 040 99,724
>
> org.apache.ignite.internal.processors.affinity.GridAffinityAssignment.initPrimaryBackupMaps()
> 1 823 744 0,276
> org.apache.ignite.internal.processors.affinity.GridAffinityAssignment.<init>(AffinityTopologyVersion,
> List, List) 1 823 744 0,276
> *Allocation stats*
> Class Average Object Size(bytes) Total Object Size(bytes) TLABs Average TLAB
> Size(bytes) Total TLAB Size(bytes) Pressure(%)
> java.util.HashMap$Node 32 15 392 481 619 635,726 298 044 784 32,876
> java.lang.Object[] 1 470,115 461 616 314 655 019,236 205 676 040 22,687
> java.util.HashMap$Node[] 41 268,617 6 149 024 149 690 046,067 102 816 864
> 11,341
> java.lang.Integer 16 1 456 91 662 911,385 60 324 936 6,654
> java.util.ArrayList 24 1 608 67 703 389,97 47 127 128 5,198
> 2) Also another hot place found
> Stack Trace TLABs Total TLAB Size(bytes) Pressure(%)
> java.util.ArrayList.grow(int) 7 5 766 448 9,554
> java.util.ArrayList.ensureExplicitCapacity(int) 7 5 766 448 9,554
> java.util.ArrayList.ensureCapacityInternal(int) 7 5 766 448 9,554
> java.util.ArrayList.add(Object) 7 5 766 448 9,554
>
> org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopologyImpl.nodes(int,
> AffinityTopologyVersion, GridDhtPartitionState, GridDhtPartitionState[]) 7 5
> 766 448 9,554
> The reason of that is defail
> I think we need to improve memory efficiency by switching from from Sets to
> BitSets
>
> JFR attached, see Allocations in 12:50:28 - 12:50:29
>
>
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)