안녕하세요.
아래 링크에 소개된 프로그램과 같은 일을 해주는 공개소프트웨어가 있으면 소개좀 부탁드립니다.
http://www.xlsoft.com/kr/products/intel/Threading_Tools/reseller_productpage_thread_checker_linux.html#Features
작업하는 프로그램에서 데드락이 발생하는것 같은데.. 지쳐갑니다.. 막막하네요.
답변좀 부탁드립니다.
힘드시겠네요.
쓰레드가 접근하는 Synchronize 객체인 Mutex에 대해서
Ordering이 지켜지는지 먼저 확인해 보십시요.
하나의 쓰레드가 2개 이상의 Mutex를 동시에 잡는 것으로 보이는데요,
만일 Ordering에 대한 가이드 라인이 없으시다면, 끝나지 않는 전쟁을
하고 계신겁니다.
제 팀에서는 이러한 것들을 검증하기 위해서 mutex를 잡는
로직에 대해서 pseudo code로 itemize를 해서
각 mutex에 대해 번호를 매기고,
쓰레드가 이러한 mutex에 대해서 hold할 수 있는 가능성에 대해서
순서대로 번호를 기입합니다.
예를 들면, 해당 시스템에 1, 2, 3, 4 라는 mutex가 있고(더 많겠지요?)
1 logic : 1 2(hold) | 2 1(release) 2 logic : 1 3 | 3 1 3 logic : 2 3 | 3 2 4 logic : 2 1 | 1 2
이렇게 결과가 나왔다면, 1번 로직과 4번 로직에 의해서 deadlock이 발생할
수 있는 경우입니다.
이러한 문제는 테스팅 툴로 해결될 것이 아니고, 로직을 자세히 review하셔야
할 것으로 보입니다.
건투를 ...
김성진
급한 마음에 툴을 찾았지만, 역시나 해답은 code review일것 같습니다.
편한 마음으로 하나씩 훑어보고 있는데, 네트웍과 연관된 상황이라 쉽게 잡힐것 같지는 않네요.
일단 돌아가는 코드에 말씀하신것과 비슷한 로그를 추가해 올려놨습니다.
좋은 결과가 있기를 바래야죠.
주신 의견 감사드립니다~
---- jai guru deva om...
현제 운영중인 배포판이 RedHat 9 이상이시라면
POSIX Thread가 NPTL일겁니다.
아래에 NPTL Trace tool 사이트를 링크합니다.
http://sourceforge.net/projects/nptltracetool/http://nptltracetool.sourceforge.net/
이 툴을 이용하면 아래와 같은 루틴들을 trace 할 수 있습니다.
pthread_create pthread_join pthread_cancel pthread_cond_init pthread_cond_wait pthread_cond_signal pthread_cond_broadcast pthread_cond_destroy
pthread_mutex_init pthread_mutex_lock pthread_mutex_unlock pthread_mutex_destroy pthread_barrier_init pthread_barrier_wait pthread_barrier_destroy
sem_init sem_open sem_unlink sem_post sem_wait sem_trywait sem_destroy
이 툴이 도움이 된다면 좋겠네요.
리눅스 스레드 race condition 디버깅이 제 관심분야입니다. ^^
================== In-Bon Kuhhttp://inbon.net
GNU OSLab.http://race.gnu.kr
==================== In-Bon Kuhhttp://inbon.net
GNU OSLab.http://race.gnu.kr ====================
시간이 촉박하다보니, 결국 문제를 일으킬만한 두개의 스레드를 하나의 스레드로 통합하고
mutex를 제거했습니다.
NPTL Trace tool도 다시 살펴봐야겠네요.
답변주신 두분 감사드립니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
힘드시겠네요. 쓰레드
힘드시겠네요.
쓰레드가 접근하는 Synchronize 객체인 Mutex에 대해서
Ordering이 지켜지는지 먼저 확인해 보십시요.
하나의 쓰레드가 2개 이상의 Mutex를 동시에 잡는 것으로 보이는데요,
만일 Ordering에 대한 가이드 라인이 없으시다면, 끝나지 않는 전쟁을
하고 계신겁니다.
제 팀에서는 이러한 것들을 검증하기 위해서 mutex를 잡는
로직에 대해서 pseudo code로 itemize를 해서
각 mutex에 대해 번호를 매기고,
쓰레드가 이러한 mutex에 대해서 hold할 수 있는 가능성에 대해서
순서대로 번호를 기입합니다.
예를 들면, 해당 시스템에 1, 2, 3, 4 라는 mutex가 있고(더 많겠지요?)
1 logic : 1 2(hold) | 2 1(release)
2 logic : 1 3 | 3 1
3 logic : 2 3 | 3 2
4 logic : 2 1 | 1 2
이렇게 결과가 나왔다면, 1번 로직과 4번 로직에 의해서 deadlock이 발생할
수 있는 경우입니다.
이러한 문제는 테스팅 툴로 해결될 것이 아니고, 로직을 자세히 review하셔야
할 것으로 보입니다.
건투를 ...
김성진
급한 마음에 툴을
급한 마음에 툴을 찾았지만, 역시나 해답은 code review일것 같습니다.
편한 마음으로 하나씩 훑어보고 있는데, 네트웍과 연관된 상황이라 쉽게 잡힐것 같지는 않네요.
일단 돌아가는 코드에 말씀하신것과 비슷한 로그를 추가해 올려놨습니다.
좋은 결과가 있기를 바래야죠.
주신 의견 감사드립니다~
----
jai guru deva om...
----
jai guru deva om...
NPTL Trace Tool을 써보심은 어떤지요?
현제 운영중인 배포판이 RedHat 9 이상이시라면
POSIX Thread가 NPTL일겁니다.
아래에 NPTL Trace tool 사이트를 링크합니다.
http://sourceforge.net/projects/nptltracetool/
http://nptltracetool.sourceforge.net/
이 툴을 이용하면 아래와 같은 루틴들을 trace 할 수 있습니다.
pthread_create
pthread_join
pthread_cancel
pthread_cond_init
pthread_cond_wait
pthread_cond_signal
pthread_cond_broadcast
pthread_cond_destroy
pthread_mutex_init
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_destroy
pthread_barrier_init
pthread_barrier_wait
pthread_barrier_destroy
sem_init
sem_open
sem_unlink
sem_post
sem_wait
sem_trywait
sem_destroy
이 툴이 도움이 된다면 좋겠네요.
리눅스 스레드 race condition 디버깅이 제 관심분야입니다. ^^
==================
In-Bon Kuh
http://inbon.net
GNU OSLab.
http://race.gnu.kr
====================
In-Bon Kuh
http://inbon.net
GNU OSLab.
http://race.gnu.kr
====================
시간이
시간이 촉박하다보니, 결국 문제를 일으킬만한 두개의 스레드를 하나의 스레드로 통합하고
mutex를 제거했습니다.
NPTL Trace tool도 다시 살펴봐야겠네요.
답변주신 두분 감사드립니다.
----
jai guru deva om...
----
jai guru deva om...
댓글 달기