Project

General

Profile

Bug #270

lazy timer thraed creation

Added by ko1 (Koichi Sasada) almost 10 years ago. Updated about 7 years ago.

Status:
Closed
Priority:
Normal
Target version:
ruby -v:
ruby 1.8.8dev (2010-01-17 revision 26335) [i386-netbsdelf5.0.1]
[ruby-dev:35471]

Description

=begin
 ささだです.

 現在,1.9 では timer thread というものを起動時に作って,以下の用途
に利用しています.

a) スレッドスイッチの契機
b) signal の集約
c) sampling profiling

 (a) は SIGVTALRM の代わりに,select で polling して,定期的に ruby
threads に対してスレッド切り替えを促します.

 (b) は,一度 signal を timer thread に集約して,その後 ruby thread
に signal の情報を渡すように実装しています.

 (c) は,あまり活用されていませんが,sampling profiler として利用す
ることができます.今後の拡張用です.

 ただ,最近のFreeBSDやNetBSDは,一度 pthread を作ると,後始末をして
も fork 後,pthread を作ろうとすると刺さるので,必ず timer thread を
作る 1.9 では fork が出来ません.そこで,最初に Thread.new するま
で,つまり,マルチスレッド実行を行うまで timer thread の遅延を遅らせ
るような提案を受けています.

 (b) に関しては実装についてケアが必要で(これまで,ruby thread で
signal を受ける心配をする必要がなかった),(c) についてはあきらめな
ければなりませんが,FreeBSD, NetBSD などの広く利用されている OS で
fork が動かないのはまずかろう,という意見です.

 fork をこれ以上使うな,という意見もあるかとは思いますが,この提案
については前向きに検討していきます.

 忘れないように redmine に登録しておきます.

 ご意見募集中です.
--
// SASADA Koichi at atdot dot net
=end


Related issues

Related to Ruby trunk - Bug #2097: fork NotImplementedError on FreeBSDThird Party's Issue2009-09-14
Related to Ruby 1.8 - Bug #1872: [ruby_1_8] Kernel#system doesn't work in forked processClosed2009-08-04
Related to Backport187 - Backport #2603: NetBSD 5.0以降でpthreadの処理に由来する不具合Closed2010-01-14
Related to Ruby 1.8 - Bug #2648: Mac OS X 10.6/10.5で--enable-pthreadのときtest-allでSEGVするClosed2010-01-23
Related to Backport187 - Backport #2659: Problem when building with pthreads enabledClosed2010-01-26
Related to Backport187 - Backport #2663: Hard hang (needs -9 to kill) in 1.8.7 build 248Closed2010-01-27
Related to Ruby 1.8 - Bug #1402: test_cookie(TestCookie)でtest-allが止まるClosed2009-04-24
Related to Ruby trunk - Bug #2724: fork from other than the main thread causes wrong pthread condition on NetBSDThird Party's Issue2010-02-09
Related to Ruby trunk - Bug #6341: SIGSEGV: Thread.new { fork { GC.start } }.joinThird Party's Issue2012-04-22

Associated revisions

Revision e8e7e1aa
Added by hsbt (Hiroshi SHIBATA) about 5 years ago

doumentation by toolmantim (Tim Lucas) [GH fixes #270]

  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40015 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 40015
Added by hsbt (Hiroshi SHIBATA) about 5 years ago

doumentation by toolmantim (Tim Lucas) [GH fixes #270]

  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

Revision 40015
Added by hsbt (Hiroshi SHIBATA) about 5 years ago

doumentation by toolmantim (Tim Lucas) [GH fixes #270]

  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

Revision 40015
Added by hsbt (Hiroshi SHIBATA) about 5 years ago

doumentation by toolmantim (Tim Lucas) [GH fixes #270]

  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

Revision 40015
Added by hsbt (Hiroshi SHIBATA) about 5 years ago

doumentation by toolmantim (Tim Lucas) [GH fixes #270]

  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

Revision 40015
Added by hsbt (Hiroshi SHIBATA) about 5 years ago

doumentation by toolmantim (Tim Lucas) [GH fixes #270]

  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

Revision b6a72bcf
Added by usa (Usaku NAKAMURA) about 5 years ago

merge revision(s) 40015: [Backport #8196]

doumentation by @toolmantim [GH fixes #270]
  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@40055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision f3c5e92d
Added by nagachika (Tomoyuki Chikanaga) about 5 years ago

merge revision(s) 40015: [Backport #8197]

doumentation by @toolmantim [GH fixes #270]
  • timeout.rb: Document Timeout::timeout 0 and nil argument behavior

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@40296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

History

#1 Updated by ko1 (Koichi Sasada) almost 10 years ago

  • Assignee set to ko1 (Koichi Sasada)

=begin

=end

#2 Updated by yugui (Yuki Sonoda) over 9 years ago

  • Target version set to 2.0.0

=begin

=end

#3 Updated by naruse (Yui NARUSE) over 8 years ago

  • Status changed from Open to Closed
  • ruby -v set to ruby 1.8.8dev (2010-01-17 revision 26335) [i386-netbsdelf5.0.1]

=begin
本件ですが、まず FreeBSD 7.2 あたり、NetBSD 5.0 あたりで OS 側に対処が入り、
pthread を使った後で fork しても刺さらないようになったようです。
(誰かコミットの特定よろしく)

また、関連する #2603 r26371 から得られた知見を追記すると、
01:04 (unak) 今日のまとめ
01:05 (unak) NetBSDのpthread_atfork()やばい
01:05 (unak) というか、pthread_atfork()の中でpthread_create()しちゃいけないんだろうね。
01:06 (unak) ああ、もう一個あった。
01:07 (unak) NetBSDだとfork()前に余分なスレッドを殺しておくのが吉... ... ...
01:44 (unak) parent handerでpthread_create()が呼ぶと刺さるのはなんか変なので、これはOS側で対応してほしいね。
ということになるようです。
=end

#4 Updated by usa (Usaku NAKAMURA) over 8 years ago

=begin
こんにちは、なかむら(う)です。

In message " Re: Bug #270 lazy timer thraed creation"
on Jan.22,2010 08:54:15, kosaki.motohiro@jp.fujitsu.com wrote:

僕の知見は

pthread_atfork(0, 0, rb_thread_stop_timer); はダメな子

につきるような。この子が意味があるプラットフォーム、あるんだろうか・・・

ですよねー。
子プロセス側ではtimer threadは死んでるに決まってるんだし...

それでは。
--
U.Nakamura usa@garbagecollect.jp

=end

Also available in: Atom PDF