Issue #14830 has been updated by k0kubun (Takashi Kokubun).


> 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.

----------------------------------------
Feature #14830: RubyVM::MJIT.pause / RubyVM::MJIT.resume
https://bugs.ruby-lang.org/issues/14830#change-72583

* Author: k0kubun (Takashi Kokubun)
* Status: Closed
* Priority: Normal
* Assignee: k0kubun (Takashi Kokubun)
* Target version: 2.6
----------------------------------------
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

~~~ ruby
# 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.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>