[SCore-users-jp] MPICH+threadジョブ実行時に発生する不具合について

Keiichi Okazaki k-okazaki @ pst.fujitsu.com
2004年 5月 25日 (火) 11:37:38 JST


SCore開発関係者様

  富士通プライムソフトテクノロジの岡崎と申します。
  お世話になります。

MPICH+threadジョブのチェックポイント/リスタートを行うと、
チェックポイント時点からのリスタート時にSIGSEGVが発生する
現象が起きています。
実行環境は、RedHat8.0 + SCore5.6.1 です。

SIGSEGVを回避するにはどうすればよいのでしょうか?

以下に、こちらで調査したことを記します。

----
  score_syscall 内で__pthread_initial_thread_bos を
  以前のスタック値へ書き換えてしまう処理があるようです。

  ----
  (gdb) ni
  0x080a0816 in read ()
  (gdb) x __pthread_initial_thread_bos
  0x8167c60 <score_ckpt_now_checkpointing+230584>:        0x000000ff
  ~~~~~~~~~ ※ここまでは正常

  (gdb) ni  ※1命令動かすと
  0x080a081b in read ()
  (gdb) x __pthread_initial_thread_bos
  0xbfa00000:     0x00000000
  ~~~~~~~~~~ ※書き変わっている

  0x80a0815 <read+129>:   push   %eax
  0x80a0816 <read+130>:   call   0x809fd70 <score_syscall>  ★
  0x80a081b <read+135>:   add    $0x20,%esp
  -----

  更に score_syscall の中を見てみると、
  (score_syscall_nowrap)->__pthread_alt_unlock と呼び出されます。その
  延長で __pthread_restart_new が呼び出されます。

  __pthread_restart_new 内で自分自身にリスタートシグナルを送って
  いるため、pthread_initialize が走ってしまい、
  __pthread_initial_thread_bos を初期状態に戻してしまっているようです。

  これによって、libpthread.a 内 errno.o :__errno_location()→
  thread_self()内のスレッドディスクリプタ特定処理で失敗。
  __errno_location() はヌルポインタを返却し、ここにerrnoを
  書き込むことでSIGSEGVが発生しているようです。
----


以上、よろしくお願い致します。
-- 
------------------------------------------
岡崎
E-mail : k-okazaki @ pst.fujitsu.com




SCore-users-jp メーリングリストの案内