Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Track Progress of Off-Heap Technology #11438

Open
1 of 7 tasks
bragaigor opened this issue Dec 10, 2020 · 0 comments
Open
1 of 7 tasks

Track Progress of Off-Heap Technology #11438

bragaigor opened this issue Dec 10, 2020 · 0 comments

Comments

@bragaigor
Copy link
Contributor

bragaigor commented Dec 10, 2020

Creating this issue to keep track of off-heap (know as sparse-heap internally) technology delivery course.

Technology summary:

Introduce an optimized memory management for large arrays in region-based garbage collector, more specifically a new heap scheme and large object organization (in-heap and off-heap), enhanced method for allocating large objects (proxy objects) and an optimized technique of accessing large array during runtime (JIT optimizations).
This organization not only unburdens large segregated array allocation from the heap, but it also preserves the illusion to the Just-In-Time (JIT) compiler through a clever object layout that all array elements can be accessed as if all arrays were contiguous. Furthermore, we can leverage such object layout (object proxies) to optimize memory management for large objects in a heap, by introducing off-heap.

Deliverables (action items):

  • Proxy objects (headers), which resides in heap and points to data residing outside the heap (later introduced as sparse-heap);

  • Phase 1: Introduce extra U_64 data field to Indexable Object Headers Add extra U_64 data field to Indexable Object Headers #11755

  • Phase 2: Make sure dataAddr field always contain the correct value, which is the address pointing right after array header

  • Phase 3: Make use of introduced extra void * data field

  • Mechanism that provides a way to map sparse-heap data back to proxy objects.

  • Introduce an off-heap/secondary-heap for very large object. This heap relies on vast, under-utilized 64-bit address space; hence, it is large enough to store any large object without the need of compaction ever.

  • Mechanism to identify all off-heap objects. Since there's no need to ever compact the off-heap, we'll introduce a mechanism that identifies large objects in the off-heap area and release them whenever they die.

cc: @amicic @dmitripivkine @fjeremic @vijaysun-omr

bragaigor added a commit to bragaigor/openj9 that referenced this issue Jan 7, 2021
Preliminary work to incorporate extra 64 bit field to
Indexable object headers. In case of contiguous arraylets
the extra field will hold the address of where the data
starts, which is right after the header. In case of
discontiguous arraylets the extra field will hold the
address of:

- The contiguous double mapped region (assuming double map
  is enabled).
- The contiguous sparse-heap region outside the heap (assuming
  sparse heap is enabled).
- If double mapping an sparse heap are both disabled, dataAddr
  will point to the address right adter the header, in this
  case to the first arrayoid.

This is the first phase concerning a series of deliverables.
Here, we introduce the extra U_64 data field along with helper
functions such as getters and setters that will be needed in
the future. Now dataAddr is only introduced and never used.
Once it’s stable we’ll deliver the second phase of changes
that makes use of dataAddr.

Please refer to eclipse-openj9#11438
for more info. This set of changes concern part of the first
action item of such issue.

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 2, 2021
Update GC code to make sure whenever an indexable object
moves, it will always contain the correct dataAddr value,
which is the address pointing right after array header

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 2, 2021
Update GC code to make sure whenever an indexable object
moves, it will always contain the correct dataAddr value,
which is the address pointing right after array header

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 2, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 2, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 4, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 9, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 10, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 10, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 10, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 10, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 13, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

Introduce pre/postObjectCompact wrapers for EnvironmentDeletegate
pre/postObjectCompact API for object compaction fixup

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/omr that referenced this issue Feb 13, 2021
Update GC code to make sure whenever an indexable object
moves, the object  will always contain the correct dataAddr
value, which is the address pointing right after array
header.

Introduce pre/postObjectCompact wrapers for EnvironmentDeletegate
pre/postObjectCompact API for object compaction fixup

This is phase 2 of eclipse-openj9/openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
bragaigor added a commit to bragaigor/openj9 that referenced this issue Feb 13, 2021
Update GC code to make sure whenever an indexable object
moves, the object will always contain the correct dataAddr
value, which is the address pointing right after array
header.

We introduce pre/postObjectMoveForCompact in EnvironmentDelegate
as well as struct GCmovedObjectHashCode which is being moved
from OMR_VMThread to EnvironmentDelegate.

This is phase 2 of eclipse-openj9#11438

Signed-off-by: Igor Braga <higorb1@gmail.com>
VermaSh added a commit to VermaSh/openj9 that referenced this issue Apr 6, 2023
Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the
array header for multidimensional array. Two cases addressed here are:
- Both 1st and 2nd dimension arrays are zero size.
- 1st dimension array is of size non-zero and 2nd dimension array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
VermaSh added a commit to VermaSh/openj9 that referenced this issue Apr 6, 2023
Adapt `multianewArrayEvaluator` to populate `dataAddr` field of
multidimensional arrays. Two cases we address are:
- Both 1st and 2nd dimensional arrays are zero size
- 1st dimensional array is of size non-zero and 2nd dimensional array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
VermaSh added a commit to VermaSh/openj9 that referenced this issue Apr 6, 2023
This change has been pulled in as part of JIT dual header PR
eclipse-openj9#16420

Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the
array header for multidimensional array. Two cases addressed here are:
- Both 1st and 2nd dimension arrays are zero size.
- 1st dimension array is of size non-zero and 2nd dimension array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
VermaSh added a commit to VermaSh/openj9 that referenced this issue Apr 6, 2023
This change has been pulled in as part of JIT dual header PR
eclipse-openj9#16420

Adapt `multianewArrayEvaluator` to populate `dataAddr` field of
multidimensional arrays. Two cases we address are:
- Both 1st and 2nd dimensional arrays are zero size
- 1st dimensional array is of size non-zero and 2nd dimensional array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas pushed a commit to rmnattas/openj9 that referenced this issue Aug 14, 2023
Adapt `multianewArrayEvaluator` to populate `dataAddr` field of
multidimensional arrays. Two cases we address are:
- Both 1st and 2nd dimensional arrays are zero size
- 1st dimensional array is of size non-zero and 2nd dimensional array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas pushed a commit to rmnattas/openj9 that referenced this issue Aug 14, 2023
This change has been pulled in as part of JIT dual header PR
eclipse-openj9#16420

Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the
array header for multidimensional array. Two cases addressed here are:
- Both 1st and 2nd dimension arrays are zero size.
- 1st dimension array is of size non-zero and 2nd dimension array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas pushed a commit to rmnattas/openj9 that referenced this issue Aug 14, 2023
This change has been pulled in as part of JIT dual header PR
eclipse-openj9#16420

Adapt `multianewArrayEvaluator` to populate `dataAddr` field of
multidimensional arrays. Two cases we address are:
- Both 1st and 2nd dimensional arrays are zero size
- 1st dimensional array is of size non-zero and 2nd dimensional array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas pushed a commit to rmnattas/openj9 that referenced this issue Aug 22, 2023
This change has been pulled in as part of JIT dual header PR
eclipse-openj9#16420

Adapt `multianewArrayEvaluator` to populate `dataAddr` field in the
array header for multidimensional array. Two cases addressed here are:
- Both 1st and 2nd dimension arrays are zero size.
- 1st dimension array is of size non-zero and 2nd dimension array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
rmnattas pushed a commit to rmnattas/openj9 that referenced this issue Aug 22, 2023
This change has been pulled in as part of JIT dual header PR
eclipse-openj9#16420

Adapt `multianewArrayEvaluator` to populate `dataAddr` field of
multidimensional arrays. Two cases we address are:
- Both 1st and 2nd dimensional arrays are zero size
- 1st dimensional array is of size non-zero and 2nd dimensional array is
  of size zero.

Part of phase 2 of eclipse-openj9#11438.

Signed-off-by: Shubham Verma shubhamv.sv@gmail.com
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants