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

Allocate cards and boundaries array separately in CardTable for large segment #1507

Open
wants to merge 5 commits into
base: static_h
Choose a base branch
from

Conversation

lavenzg
Copy link
Contributor

@lavenzg lavenzg commented Sep 6, 2024

Summary:
For large segment, the fixed size for cards and boundaries array is
not large enough to manage the entire segment. This diff adds pointers
to the two arrays in SHSegmentInfo. For normal segment, the pointer
just points to the inline array in CardTable. For large segment, it
points to separately allocated array.

Differential Revision: D61747510

@facebook-github-bot facebook-github-bot added the CLA Signed Do not delete this pull request or issue due to inactivity. label Sep 6, 2024
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D61747510

…dHeapSegmentBase (facebook#1510)

Summary:

The large heap segment type should have the same storage layout as
current AlignedHeapSegment, and share a few common methods. Abstract
these to a base class, and make both AlignedHeapSegment and
JumboHeapSegment inherit from the base type.

Differential Revision: D61675022
…er (facebook#1504)

Summary:

Large segment needs to be backed by a large storage size.
StorageProvider currently always allocate fixed size of storage
determined by HERMESVM_LOG_HEAP_SEGMENT_SIZE.

This diffs adds support of allocating larger storage with below
changes:
1. `newStorage()` and `deleteStoragr()` takes addition `sz` parameter.
2. For `MallocStorageProvider` and `VMAllocateStorageProvider`, simply
change the previous fixed storage size to passed in `sz`.
3. For `ContiguousVAStorageProvider`, use a BitVector to manage
allocations and deallocations. This can be improved later if we observe
fragmentations.

The support of enabling different sizes of heap segment will be added
later.

Differential Revision: D61676721
Summary:

Currently `SHSegmentInfo` lives in the prefix of CardTable inline
storage (to be specific, prefix of the `cards_` array). But this is
only defined in one comment. Add it into a union with the `cards_`
array to make it clear. It also simplifies the reasoning of following
diffs, in which we need to add more fields to `SHSegmentInfo`.

In addition, `kFirstUsedIndex` should take into account of the size of
`SHSegmentInfo`, since the size of `SHSegmentInfo` could be larger than
`(2 * kCardTableSize) >> kLogCardSize)` for small segment size.

Differential Revision: D61747499
Summary:

We need the segment size in several places, such as CardTable, heap
segment itself and getting sizes for large object GCCell. Add this size
into `SHSegmentInfo`.

In addition, in CardTableNCTest, when search dirty bits, we should
start from kFirstUsedIndex instead of 0, since the value of
`SHSegmentInfo` may write some bytes to non-zero.

Differential Revision: D61807366
… segment (facebook#1507)

Summary:

For large segment, the fixed size for `cards` and `boundaries` array is
not large enough to manage the entire segment. This diff adds pointers
to the two arrays in SHSegmentInfo. For normal segment, the pointer
just points to the inline array in CardTable. For large segment, it
points to separately allocated array.

Differential Revision: D61747510
@lavenzg lavenzg force-pushed the export-D61747510-to-static_h branch from 842e1eb to 35204a9 Compare October 21, 2024 23:21
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D61747510

lavenzg added a commit to lavenzg/hermes that referenced this pull request Oct 22, 2024
… segment (facebook#1507)

Summary:

For large segment, the fixed size for `cards` and `boundaries` array is
not large enough to manage the entire segment. This diff adds pointers
to the two arrays in SHSegmentInfo. For normal segment, the pointer
just points to the inline array in CardTable. For large segment, it
points to separately allocated array.

Differential Revision: D61747510
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CLA Signed Do not delete this pull request or issue due to inactivity. fb-exported
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants