[Feedback] r47670 make benchmark/bm_vm_thread_create_join.rb slow

Issue #10297 has been updated by Akira T…

Status changed from Open to Feedback

なるほど。たしかに遅くなっているようです。

strace でみると、周辺の処理に比べて桁違いに時間がかかっているわけではないようなので、
ハングしたときとかにスレッドが何者なのか ps で見れるようにするコストということでどうかなぁ。

% strace -f -r ./miniruby -e 'Thread.new{}.join'
...
[pid  5243]      0.000015 munmap(0x7f4118000000, 54882304) = 0
[pid  5243]      0.000014 mprotect(0x7f4114000000, 135168, 
PROT_READ|PROT_WRITE) = 0
[pid  5243]      0.000017 sched_getaffinity(5243, 32, {f, 0, 0, 0}) = 32
[pid  5243]      0.000017 sigaltstack({ss_sp=0x7f411df7a230, ss_flags=0, 
ss_size=8192}, {ss_sp=0, ss_flags=SS_DISABLE, ss_size=0}) = 0
[pid  5243]      0.000022 prctl(PR_SET_NAME, 0x7f411b556e80, 0x4, 0x8, 
0) = 0
[pid  5243]      0.000019 futex(0x7f411ddef6f4, FUTEX_WAKE_OP_PRIVATE, 
1, 1, 0x7f411ddef6f0, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
[pid  5241]      0.000013 <... futex resumed> ) = 0
[pid  5243]      0.000008 madvise(0x7f411b457000, 1028096, MADV_DONTNEED 
<unfinished ...>
[pid  5241]      0.000006 futex(0x7f411ddef768, FUTEX_WAKE_PRIVATE, 1 
<unfinished ...>
...

prctl のところがスレッドの名前を登録するところです。


misc #10297: r47670 make benchmark/bm_vm_thread_create_join.rb slow
https://bugs.ruby-lang.org/issues/10297#change-49129

  • Author: Narihiro N.
  • Status: Feedback
  • Priority: Normal
  • Assignee: Akira T.
  • Category: core
  • Target version: current: 2.2.0

nariです。

r47670でbm_vm_thread_create_join.rbが10%ほど遅くなったようです。
スレッドをバンバン生成するベンチマークなので、スレッドに名前付けするところの影響がでているかなと思いました(が詳しいところは計測できていません…)。

r47669
% time ./miniruby -e ‘10000.times{ Thread.new{}.join }’
./miniruby -e ‘10000.times{ Thread.new{}.join }’ 1.83s user 3.90s
system 90% cpu 6.320 total

r47670
% time ./miniruby -e ‘10000.times{ Thread.new{}.join }’
./miniruby -e ‘10000.times{ Thread.new{}.join }’ 2.30s user 5.30s
system 94% cpu 8.038 total