🔍

No recent searches

# module RubyVM::YJIT

This module allows for introspection of YJIT, CRuby’s just-in-time compiler. Everything in the module is highly implementation specific and the API might be less stable compared to the standard library.

This module may not exist if YJIT does not support the particular platform for which CRuby is built.

### Public Class Methods

code_gc ()
Source

    # File yjit.rb, line 253
    def self.code_gc
      Primitive.rb_yjit_code_gc
    end

Discard existing compiled code to reclaim memory and allow for recompilations in the future.

dump_exit_locations (filename)
Source

    # File yjit.rb, line 176
    def self.dump_exit_locations(filename)
      unless trace_exit_locations_enabled?
        raise ArgumentError, "--yjit-trace-exits must be enabled to use dump_exit_locations."
      end

      File.binwrite(filename, Marshal.dump(RubyVM::YJIT.exit_locations))
    end

`Marshal` dumps exit locations to the given filename.

Usage:

If `--yjit-exit-locations` is passed, a file named “yjit_exit_locations.dump” will automatically be generated.

If you want to collect traces manually, call `dump_exit_locations` directly.

Note that calling this in a script will generate stats after the dump is created, so the stats data may include exits from the dump itself.

In a script call:

    at_exit do
      RubyVM::YJIT.dump_exit_locations("my_file.dump")
    end

Then run the file with the following options:

    ruby --yjit --yjit-trace-exits test.rb

Once the code is done running, use Stackprof to read the dump file. See Stackprof documentation for options.

enable (stats: false, log: false, mem_size: nil, call_threshold: nil)
Source

    # File yjit.rb, line 48
    def self.enable(stats: false, log: false, mem_size: nil, call_threshold: nil)
      return false if enabled?

      if Primitive.cexpr! 'RBOOL(rb_zjit_enabled_p)'
        warn("Only one JIT can be enabled at the same time.")
        return false
      end

      if mem_size
        raise ArgumentError, "mem_size must be a Integer" unless mem_size.is_a?(Integer)
        raise ArgumentError, "mem_size must be between 1 and 2048 MB" unless (1..2048).include?(mem_size)
      end

      if call_threshold
        raise ArgumentError, "call_threshold must be a Integer" unless call_threshold.is_a?(Integer)
        raise ArgumentError, "call_threshold must be a positive integer" unless call_threshold.positive?
      end

      at_exit { print_and_dump_stats } if stats
      Primitive.rb_yjit_enable(stats, stats != :quiet, log, log != :quiet, mem_size, call_threshold)
    end

Enable YJIT compilation. `stats` option decides whether to enable YJIT stats or not. `log` decides whether to enable YJIT compilation logging or not. Optional `mem_size` and `call_threshold` can be provided to override default configuration.

- `stats`:

  - `false`: Don’t enable stats.

  - `true`: Enable stats. Print stats at exit.

  - `:quiet`: Enable stats. Do not print stats at exit.

- `log`:

  - `false`: Don’t enable the log.

  - `true`: Enable the log. Print log at exit.

  - `:quiet`: Enable the log. Do not print log at exit.

enabled? ()
Source

    # File yjit.rb, line 12
    def self.enabled?
      Primitive.cexpr! 'RBOOL(rb_yjit_enabled_p)'
    end

Check if YJIT is enabled.

log ()
Source

    # File yjit.rb, line 206
    def self.log
      return nil unless log_enabled?

      Primitive.rb_yjit_get_log.map do |timestamp, path|
        [Time.at(timestamp), path]
      end
    end

Return an array of log entries. Return `nil` when option is not passed or unavailable.

log_enabled? ()
Source

    # File yjit.rb, line 22
    def self.log_enabled?
      Primitive.rb_yjit_log_enabled_p
    end

Check if `--yjit-log` is used.

reset_stats! ()
Source

    # File yjit.rb, line 32
    def self.reset_stats!
      Primitive.rb_yjit_reset_stats_bang
    end

Discard statistics collected for `--yjit-stats`.

runtime_stats (key = nil)
Source

    # File yjit.rb, line 188
    def self.runtime_stats(key = nil)
      raise TypeError, "non-symbol given" unless key.nil? || Symbol === key

      Primitive.rb_yjit_get_stats(key)
    end

Return a hash for statistics generated for the `--yjit-stats` command line option. Return `nil` when option is not passed or unavailable. If a symbol argument is provided, return only the value for the named stat. If any other type is provided, raises `TypeError`.

stats_enabled? ()
Source

    # File yjit.rb, line 17
    def self.stats_enabled?
      Primitive.rb_yjit_stats_enabled_p
    end

Check if `--yjit-stats` is used.

stats_string ()
Source

    # File yjit.rb, line 196
    def self.stats_string
      # Lazily require StringIO to avoid breaking miniruby
      require 'stringio'
      strio = StringIO.new
      _print_stats(out: strio)
      strio.string
    end

Format and print out counters as a `String`. This returns a non-empty content only when `--yjit-stats` is enabled.