| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
[Feature #19425]
|
|
|
|
|
|
|
|
|
|
| |
I noticed this while running test_yjit with --mjit-call-threshold=1,
which redefines `Integer#<`. When Ruby is monkey-patched,
MJIT itself could be broken.
Similarly, Ruby scripts could break MJIT in many different ways. I
prepared the same set of hooks as YJIT so that we could possibly
override it and disable it on those moments. Every constant under
RubyVM::MJIT is private and thus it's an unsupported behavior though.
|
|
|
|
|
|
|
| |
* MJIT: Compile methods in batches
* MJIT: make mjit-bindgen
* MJIT: Fix RubyVM::MJIT tests
|
| |
|
| |
|
| |
|
|
|
|
| |
I'm gonna add another type of unit shortly.
|
|
|
|
| |
There's no MJIT worker thread anymore
|
| |
|
| |
|
|
|
|
|
| |
It looks like the current way of marking objects was breaking
eightbitraptor's upcoming VWA changes and this seems to fix it.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
now that we use ZALLOC_N for allocating units
|
| |
|
|
|
|
| |
We no longer use an MJIT worker thread, so there's no need to avoid GC.
|
|
|
|
| |
I plan to rebuild MJIT metrics later, not using debug counters.
|
|
|
|
|
|
| |
All values should have a MJIT_ prefix. We could address the warning for
the end mark if we just define the macro for the check next to the enum.
It even simplifies some code for checking the enum.
|
|
|
|
| |
The distinction doesn't make much difference today.
|
|
|
|
| |
It's no longer about the compiler logic itself.
|
|
|
|
| |
to obviate one rb_funcall. This also removes rb_ptr as refactoring.
|
|
|
|
|
|
|
| |
* Revert "Revert "MJIT: Make it parsable by Solargraph""
This reverts commit 8e18761da1932df88bfb6505acbda4740e1b2930.
* Call rb_gc_register_mark_object
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit ccd8dd6ad395bbd9f5290e0fcb7929e5e5d36767.
Revert "MJIT: Fix miniruby with MJIT_FORCE_ENABLE"
This reverts commit b033775ed9d9226ba73c1d4a197e55ba89575142.
GitHub Actions is failing. I ran out of time today to investigate it.
will try it again tomorrow.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
process. Completely isolating the MJIT compilation process complicates a
lot of things for ensuring consistency before and after the fork.
Just running this synchronously makes things a lot easier, for example
the race condition of capture_cc_entries could be fixed by this patch
alone. Hopefully, the bottleneck is the C compiler and not this Ruby
code. Also, this change doesn't negatively impact MJIT's final numbers
on yjit-bench while "1st itr" is degraded for sure.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These days we benchmark MJIT using yjit-bench. The warmup duration in
yjit-bench is very short, so compiling many methods comes at a cost even
while it's actually optimal for MJIT to compile everything / tens of
thousands of methods once it reaches the peak performance.
yjit-bench doesn't necessarily represent the peak performance on production.
It measures the performance of Ruby 30~60s after boot. If your JIT takes
more than 1 minute to warm up, there's no way for the JIT to make the numbers
good on yjit-bench.
Until we make MJIT's compilation much faster, we don't afford compiling
10,000 methods on yjit-bench.
This change alone makes MJIT's benchmark number on railsbench 2x better :p
|
| |
|
|
|
| |
for consistency with YJIT
|
| |
|
| |
|
|
|
|
|
|
|
| |
* Make mjit_cont sharable with YJIT
* Update dependencies
* Update YJIT binding
|
| |
|
|
|
|
| |
I meant the other one. Otherwise this option doesn't make sense.
|
|
|
|
| |
to let mjit_add_iseq_to_process work
|
| |
|
|
|
|
| |
fixing the behavior of b726c06e7eeafff52e368179dbe79a11b1aff975
|
|
|
|
|
| |
The interface is similar to RubyVM::ISeq.translate; it's used if defined.
Same as --mjit=pause, this is an undocumented feature for MJIT experiments.
|
|
|
|
| |
for performance
|
|
|
|
|
|
| |
You may use `RUBYOPT=--mjit=pause irb` to play with RubyVM::MJIT::C,
control the boot timing of MJIT, or customize the implementation while
paused. It's an undocumented feature for such experiments.
|
|
|
|
|
| |
fork is for parallel compilation, but --mjit-wait cancels it.
It's more useful to not fork it for binding.irb, debugging, etc.
|
|
|
|
| |
http://ci.rvm.jp/results/trunk-mjit@phosphorus-docker/4225469
|
| |
|
|
|
|
| |
This takes care of signal_self_pipe and other things.
|
|
|
|
| |
same motivation as d6f21b308bcff03e82f8b3dbf11a852ce111b3b3
|
| |
|
|
|
|
|
|
|
| |
The current MJIT relies on SIGCHLD and fork(2) to be performant, and
it's something mswin can't offer. You could run Linux MJIT on WSL
instead.
[Misc #18968]
|
|
|
| |
[Misc #18968]
|