[FLINK-3322] MemoryManager creates too much GC pressure with iterative jobs. #1769
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 fix uses the approach suggested by Gábor Gévay on the mailing list: http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Memory-manager-behavior-in-iterative-jobs-tt10066.html
Instead of making the GC to free the segments, they are returned to the pool and allocation of new segments are modified to work accordingly. Note that, the size of the pool is never decreasing, but right now that is unlikely to cause any trouble. If once it is desired to decrease the size of the pool dynamically soft references can be used.
Some benchmarks using the new test case:
preAllocateMemory == false
Before the patch: 7s with 500m heap, 55s with 5000m heap
After the patch: 5s with 500m heap, 8s with 5000m heap
preAllocateMemory == true
Before the patch: 4s with 500m heap, 8s with 5000m heap
After the patch: 5s with 500m heap, 8s with 5000m heap