Project

General

Profile

Feature #14830

RubyVM::MJIT.pause / RubyVM::MJIT.resume

Added by k0kubun (Takashi Kokubun) 6 months ago. Updated 6 months ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-core:87428]

Description

This ticket is picking only MJIT.pause from https://bugs.ruby-lang.org/issues/14491 and adding MJIT.resume.

Purpose

  • When benchmarking JIT-ed code, I want to get rid of bad impact for performance that comes from ongoing JIT compilation, without waiting for all JIT compilation finish.
  • To make it easy to maintain Ruby's test cases that expect there is no child process with --jit. Using --jit makes them fail by existence of gcc or clang process, and I don't want to wait all JIT compilation finish to make it pass.

Proposals

# Pause MJIT compilations but keep JIT-ed code available
RubyVM::MJIT.pause

# Start MJIT compilations again after the MJIT.pause
RubyVM::MJIT.resume

Details

RubyVM::MJIT.pause

  • When MJIT is disabled (without --jit), it raises RuntimeError: "MJIT is not enabled".
  • When MJIT is enabled,
    • and when MJIT is paused, it does nothing and returns false.
    • and when MJIT is running, it blocks to wait for current JIT finish, pauses MJIT worker and returns true.

RubyVM::MJIT.resume

  • When MJIT is disabled (without --jit), it raises RuntimeError: "MJIT is not enabled".
  • When MJIT is enabled,
    • and when MJIT is paused, it starts MJIT worker and returns true. It raises RuntimeError if it fails to resume (very rare).
    • and when MJIT is running, it does nothing and returns false.

Related issues

Related to Ruby trunk - Bug #14867: Process.wait can wait for MJIT compiler processClosed
Related to Ruby trunk - Feature #14954: Add :wait option to RubyVM::MJIT.pauseClosed
Follows Ruby trunk - Feature #14491: MJIT needs internal debugging methodsClosed

Associated revisions

Revision 0af19735
Added by k0kubun (Takashi Kokubun) 6 months ago

mjit.c: RubyVM::MJIT.pause / RubyVM::MJIT.resume

[Feature #14830]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 63710
Added by k0kubun (Takashi Kokubun) 6 months ago

mjit.c: RubyVM::MJIT.pause / RubyVM::MJIT.resume

[Feature #14830]

History

#1 [ruby-core:87429] Updated by k0kubun (Takashi Kokubun) 6 months ago

I already created a patch for this https://github.com/ruby/ruby/pull/1882. Please check it out if you're interested in the details.

#2 Updated by k0kubun (Takashi Kokubun) 6 months ago

#3 [ruby-core:87563] Updated by mame (Yusuke Endoh) 6 months ago

  • Status changed from Open to Assigned

We discussed this ticket at the developers' meeting. There is no objection (because RubyVM is just for internal features), and matz approved. Please go ahead.

One point: Using MJIT.pause to "maintain Ruby's test cases that expect there is no child process with --jit", may indicate another issue. For example, waitpid(-1) waits for any child process. If waitpid(-1) detects termination of gcc process, it is not an expected behavior. If the test in question checks this kind of issues, "fixing" it by using MJIT.pause does not solve the issue itself.

#4 Updated by k0kubun (Takashi Kokubun) 6 months ago

  • Status changed from Assigned to Closed

Applied in changeset trunk|r63710.


mjit.c: RubyVM::MJIT.pause / RubyVM::MJIT.resume

[Feature #14830]

#5 [ruby-core:87577] Updated by k0kubun (Takashi Kokubun) 6 months ago

If the test in question checks this kind of issues, "fixing" it by using MJIT.pause does not solve the issue itself.

That makes sense. I had thought it's a kind of limitation with MJIT, but I rethought that we should have some special fix for waitpid(-1) and related things, considering the real usage. So I'll forget the second purpose, just skip the test for now and really fix it later. I committed this feature for the first purpose anyway.

#6 Updated by k0kubun (Takashi Kokubun) 6 months ago

  • Related to Bug #14867: Process.wait can wait for MJIT compiler process added

#7 Updated by k0kubun (Takashi Kokubun) 5 months ago

  • Related to Feature #14954: Add :wait option to RubyVM::MJIT.pause added

Also available in: Atom PDF