Project

General

Profile

Actions

Feature #14830

closed

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

Added by k0kubun (Takashi Kokubun) over 4 years ago. Updated over 4 years 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 3 (0 open3 closed)

Related to Ruby master - Bug #14867: Process.wait can wait for MJIT compiler processClosednormalperson (Eric Wong)Actions
Related to Ruby master - Feature #14954: Add :wait option to RubyVM::MJIT.pauseClosedActions
Follows Ruby master - Feature #14491: MJIT needs internal debugging methodsClosedk0kubun (Takashi Kokubun)Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0