module RubyVM::YJIT
Dieses Modul ermöglicht die Introspektion von YJIT, dem Just-in-Time-Compiler von CRuby. Alles in diesem Modul ist stark implementierungsspezifisch und die API kann im Vergleich zur Standardbibliothek weniger stabil sein.
Dieses Modul existiert möglicherweise nicht, wenn YJIT die spezifische Plattform, für die CRuby erstellt wurde, nicht unterstützt.
Öffentliche Klassenmethoden
Source
# File yjit.rb, line 253 def self.code_gc Primitive.rb_yjit_code_gc end
Verwirft den vorhandenen kompilierten Code, um Speicher freizugeben und zukünftige Rekompilierungen zu ermöglichen.
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 speichert die Exit-Locations in der angegebenen Datei.
Verwendung
Wenn --yjit-exit-locations übergeben wird, wird automatisch eine Datei namens „yjit_exit_locations.dump“ generiert.
Wenn Sie Spuren manuell sammeln möchten, rufen Sie dump_exit_locations direkt auf.
Beachten Sie, dass das Aufrufen dieser Methode in einem Skript nach dem Erstellen des Dumps Statistiken generiert, sodass die Statistikdaten möglicherweise Exits aus dem Dump selbst enthalten.
Aufruf in einem Skript
at_exit do RubyVM::YJIT.dump_exit_locations("my_file.dump") end
Führen Sie dann die Datei mit den folgenden Optionen aus
ruby --yjit --yjit-trace-exits test.rb
Sobald der Code ausgeführt wurde, verwenden Sie Stackprof, um die Dump-Datei zu lesen. Weitere Optionen finden Sie in der Stackprof-Dokumentation.
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
Aktiviert die YJIT-Kompilierung. Die Option stats bestimmt, ob YJIT-Statistiken aktiviert werden sollen oder nicht. log bestimmt, ob die Protokollierung der YJIT-Kompilierung aktiviert werden soll oder nicht. Optionale Werte für mem_size und call_threshold können angegeben werden, um die Standardkonfiguration zu überschreiben.
-
stats:-
false: Statistiken nicht aktivieren. -
true: Statistiken aktivieren. Statistiken beim Beenden ausgeben. -
:quiet: Statistiken aktivieren. Statistiken beim Beenden nicht ausgeben.
-
-
log:-
false: Protokollierung nicht aktivieren. -
true: Protokollierung aktivieren. Protokoll beim Beenden ausgeben. -
:quiet: Protokollierung aktivieren. Protokoll beim Beenden nicht ausgeben.
-
Source
# File yjit.rb, line 12 def self.enabled? Primitive.cexpr! 'RBOOL(rb_yjit_enabled_p)' end
Prüft, ob YJIT aktiviert ist.
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
Gibt ein Array von Protokolleinträgen zurück. Gibt nil zurück, wenn die Option nicht übergeben wurde oder nicht verfügbar ist.
Source
# File yjit.rb, line 22 def self.log_enabled? Primitive.rb_yjit_log_enabled_p end
Prüft, ob --yjit-log verwendet wird.
Source
# File yjit.rb, line 32 def self.reset_stats! Primitive.rb_yjit_reset_stats_bang end
Verwirft die für --yjit-stats gesammelten Statistiken.
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
Gibt einen Hash mit den Statistiken zurück, die für die Befehlszeilenoption --yjit-stats generiert wurden. Gibt nil zurück, wenn die Option nicht übergeben wurde oder nicht verfügbar ist. Wenn ein Symbolargument bereitgestellt wird, wird nur der Wert für die benannte Statistik zurückgegeben. Wenn ein anderer Typ bereitgestellt wird, wird eine Ausnahme TypeError ausgelöst.
Source
# File yjit.rb, line 17 def self.stats_enabled? Primitive.rb_yjit_stats_enabled_p end
Prüft, ob --yjit-stats verwendet wird.
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
Formatiert und gibt Zähler als String aus. Dies gibt nur dann einen nicht leeren Inhalt zurück, wenn --yjit-stats aktiviert ist.