Skip to content

Commit

Permalink
"+MN" in description
Browse files Browse the repository at this point in the history
If `RUBY_MN_THREADS=1` is given, this patch shows `+MN` in
`RUBY_DESCRIPTION` like:

```
$ RUBY_MN_THREADS=1 ./miniruby  --yjit -v
ruby 3.3.0dev (2023-10-17T04:10:14Z master 908f8ff) +YJIT +MN [x86_64-linux]
```

Before this patch, a warning is displayed if `$VERBOSE` is given.
However it can make troubles with tests (with `$VERBOSE`), do not
show any warning with a MN threads configuration.
  • Loading branch information
ko1 committed Oct 17, 2023
1 parent 908f8ff commit 6a36e96
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 29 deletions.
4 changes: 3 additions & 1 deletion ruby.c
Original file line number Diff line number Diff line change
Expand Up @@ -2101,7 +2101,10 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
opt->yjit = true; // set opt->yjit for Init_ruby_description() and calling rb_yjit_init()
}
#endif

ruby_mn_threads_params();
Init_ruby_description(opt);

if (opt->dump & (DUMP_BIT(version) | DUMP_BIT(version_v))) {
ruby_show_version();
if (opt->dump & DUMP_BIT(version)) return Qtrue;
Expand Down Expand Up @@ -2153,7 +2156,6 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
#endif

ruby_gc_set_params();
ruby_mn_threads_params();
ruby_init_loadpath();

Init_enc();
Expand Down
2 changes: 1 addition & 1 deletion test/ruby/test_rubyoptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def test_debug
VERSION_PATTERN_WITH_RJIT =
case RUBY_ENGINE
when 'ruby'
/^ruby #{q[RUBY_VERSION]}(?:[p ]|dev|rc).*? \+RJIT \[#{q[RUBY_PLATFORM]}\]$/
/^ruby #{q[RUBY_VERSION]}(?:[p ]|dev|rc).*? \+RJIT (\+MN )?\[#{q[RUBY_PLATFORM]}\]$/
else
VERSION_PATTERN
end
Expand Down
35 changes: 9 additions & 26 deletions thread_pthread.c
Original file line number Diff line number Diff line change
Expand Up @@ -1626,45 +1626,28 @@ Init_native_thread(rb_thread_t *main_th)
vm->ractor.sched.dnt_cnt = 1;
}

extern int ruby_mn_threads_enabled;

void
ruby_mn_threads_params(void)
{
rb_vm_t *vm = GET_VM();
rb_ractor_t *main_ractor = GET_RACTOR();

const char *mn_threads_cstr = getenv("RUBY_MN_THREADS");
bool enable_mn_threads;
bool enable_mn_threads = false;

if (mn_threads_cstr && (enable_mn_threads = atoi(mn_threads_cstr) > 0)) {
#if USE_MN_THREADS
if (RTEST(ruby_verbose)) {
fprintf(stderr, "RUBY_MN_THREADS = %s (default: 0)\n", mn_threads_cstr);
}
#else
enable_mn_threads = false;
if (RTEST(ruby_verbose)) {
fprintf(stderr, "RUBY_MN_THREADS = %s is specified, but MN threads are not implemented on this executable.", mn_threads_cstr);
}
#endif
}
else {
enable_mn_threads = false; // default: off on main Ractor
if (USE_MN_THREADS && mn_threads_cstr && (enable_mn_threads = atoi(mn_threads_cstr) > 0)) {
// enabled
ruby_mn_threads_enabled = 1;
}
main_ractor->threads.sched.enable_mn_threads = enable_mn_threads;

const char *max_cpu_cstr = getenv("RUBY_MAX_CPU");
const int default_max_cpu = 8; // TODO: CPU num?
int max_cpu;
if (max_cpu_cstr && (max_cpu = atoi(max_cpu_cstr)) > 0) {
if (RTEST(ruby_verbose)) {
#if USE_MN_THREADS
fprintf(stderr, "RUBY_MAX_CPU = %d (default: %d)\n", max_cpu, default_max_cpu);
#else
fprintf(stderr, "RUBY_MAX_CPU = %d is specified, but MN threads are not implemented on this executable.", max_cpu);
#endif
}
}
else {
int max_cpu = default_max_cpu;

if (USE_MN_THREADS && max_cpu_cstr && (max_cpu = atoi(max_cpu_cstr)) > 0) {
max_cpu = default_max_cpu;
}

Expand Down
12 changes: 11 additions & 1 deletion version.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,22 +139,32 @@ Init_version(void)
#define YJIT_OPTS_ON 0
#endif

int ruby_mn_threads_enabled;

void
Init_ruby_description(ruby_cmdline_options_t *opt)
{
static char desc[
sizeof(ruby_description)
+ rb_strlen_lit(YJIT_DESCRIPTION)
+ rb_strlen_lit(" +MN")
];

const char *const jit_opt =
RJIT_OPTS_ON ? " +RJIT" :
YJIT_OPTS_ON ? YJIT_DESCRIPTION :
"";

int n = snprintf(desc, sizeof(desc), "%.*s" /* jit_opt */"%s" "%s",
const char *const threads_opt = ruby_mn_threads_enabled ? " +MN" : "";

int n = snprintf(desc, sizeof(desc),
"%.*s"
"%s" // jit_opt
"%s" // threads_opts
"%s",
ruby_description_opt_point, ruby_description,
jit_opt,
threads_opt,
ruby_description + ruby_description_opt_point);

VALUE description = rb_obj_freeze(rb_usascii_str_new_static(desc, n));
Expand Down

0 comments on commit 6a36e96

Please sign in to comment.