Skip to content

Conversation

@wks
Copy link
Collaborator

@wks wks commented Apr 29, 2024

Change the target type of write barrier functions to Option<ObjectReference>. This allows VM bindings to use the write barrier API when storing NULL references or non-references values to slots.

Fixes: #1129

Change the target type of write barrier functions to
`Option<ObjectReference>`.  This allows VM bindings to use the write
barrier API when storing NULL references or non-references values to
slots.

Fixes: mmtk#1129
wks added a commit to wks/mmtk-openjdk that referenced this pull request Apr 29, 2024
@wks wks changed the title Fix write barrier parameter type. Fix write barrier parameter type Apr 29, 2024
wks added a commit to wks/mmtk-julia that referenced this pull request Apr 29, 2024
@wks
Copy link
Collaborator Author

wks commented Apr 29, 2024

binding-refs
OPENJDK_BINDING_REPO=wks/mmtk-openjdk
OPENJDK_BINDING_REF=fix/write-barrier-option
JULIA_BINDING_REPO=wks/mmtk-julia
JULIA_BINDING_REF=fix/write-barrier-option

@wks wks added the PR-extended-testing Run extended tests for the pull request label Apr 29, 2024
@wks wks marked this pull request as ready for review April 29, 2024 04:37
@wks wks requested a review from qinsoon April 29, 2024 04:37
@wks
Copy link
Collaborator Author

wks commented Apr 29, 2024

It is now ready for review.

Binding PRs:

Only the OpenJDK and the Julia bindings are affected. The master branch of the Ruby binding does not yet contain StickyImmix support, but I tested it offline. JikesRVM and V8 currently do not use write barriers when using Rust MMTk.

///
/// VM bindings should use `object_reference_write_pre` and `object_reference_write_post` instead.
/// Those functions leaves the actual write of the slot to the VM binding.
#[deprecated = "Use `object_reference_write_pre` and `object_reference_write_post` instead"]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't recall we have any discussion about removing the subsuming barrier. If I missed any previous discussion, just let me know.

If I understand you right, there are a few issues with this method right now:

  1. target: ObjectReference cannot represent all the cases. If MMTk does the write for the binding, target needs to be able to represent any value the runtime may hold. Option<ObjectReference> is not sufficient either. We may want something like target: Value.
  2. slot: VM::VMEdge cannot handle writing values that are not references. Though Edge (we want to rename it to Slot) is introduced for updating slots for copying GC, I think it is a valid case of reusing this trait to update slots in write barriers. We could extend the trait to allow it to store any value.

Is there any fundamental reason that we should remove the subsuming barrier instead of trying to correct it?

The reason why write_pre/post work is that we currently do not use the slot argument, and we do not care the target value if it is not a reference (so Option<ObjectReference> is sufficient).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't remove the subsuming barrier, but we need to redesign it. That's why I said "This form of write barrier has multiple issues", not subsuming barriers in general. We will replace this object_reference_write with another function, maybe with the same name, but different parameters.

There are ways to allow the VM customize the write operation of the subsuming barrier. One way is letting the caller givt it a callback that actually writes to the field so that it can write the field in whatever way it likes. The subsuming barrier effectively executes the pre and post barrier between the callback.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see. The attribute deprecated mostly means the function will be removed in the future, thus the use of this function is not encouraged now. Clearly this is different from this case. I think either we make a practical change to this function so it still works, or we mark it as deprecated but make it very clear that this function or the subsuming barrier will not be removed but will be redesigned, we suggest not using it before the redesign.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed the comment and emphasized that we would redesign that function and replace the current one.

Emphasize that the subsuming write barrier will not be removed.
Copy link
Member

@qinsoon qinsoon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@wks wks added this pull request to the merge queue Apr 30, 2024
Merged via the queue into mmtk:master with commit fea59e4 Apr 30, 2024
@wks wks deleted the fix/write-barrier-option branch April 30, 2024 02:40
mmtkgc-bot added a commit to mmtk/mmtk-openjdk that referenced this pull request Apr 30, 2024
Upstream PR: mmtk/mmtk-core#1130

---------

Co-authored-by: mmtkgc-bot <mmtkgc.bot@gmail.com>
mmtkgc-bot added a commit to mmtk/mmtk-julia that referenced this pull request Apr 30, 2024
Upstream PR: mmtk/mmtk-core#1130

---------

Co-authored-by: mmtkgc-bot <mmtkgc.bot@gmail.com>
qinsoon pushed a commit to qinsoon/mmtk-julia that referenced this pull request May 22, 2024
Upstream PR: mmtk/mmtk-core#1130

---------

Co-authored-by: mmtkgc-bot <mmtkgc.bot@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

PR-extended-testing Run extended tests for the pull request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Improper but "silently succeeding" use of post write barrier

2 participants