오늘 아주 이상한 문제가 발견되었습니다. Redhat Enterprise Linux 6를 실행했으며 CPU는 Intel E31275 (4 코어, 8 스레드)입니다. 하나의 커널 스레드 (my_thread라고 부름)가 올바르게 작동하지 않는 것을 발견했습니다.스레드의 상태가 실행되고 있지만 CPU를 사용하지 않는 이유는 무엇입니까?
ps ax
5545 ? R 3:14 [my_thread]
15774 ttyS0 Ss 0:00 -bash
...
그러나 그것의 실행 시간은 항상 3시 14분했다 "PS"명령으로 , 나는 my_thread의 상태가 항상 실행중인 발견했다. 실행 중이므로 왜 총 시간이 증가하지 않았습니까? proc 파일/proc/5545/sched에서이 스레드에 대한 wakeups count (se.nr_wakeups)를 포함한 모든 통계가 항상 동일하다는 것을 알았습니다.
는/proc 디렉토리/5545/스택에서,이 함수를 호출이 스레드를 발견 결코 반환 : 다른 스레드가 스레드를 깨어하지 않는 경우
가interruptible_sleep_on_timeout(&q, 3*HZ);
이론적으로이 기능은 매 3 초마다 반환합니다. 함수가 반환 된 후에는/proc/5545/sched에있는 se.nr_wakeups가 1 씩 증가합니다.하지만 스레드에 문제가있는 것을 발견 한 후에는 이런 일이 발생하지 않았습니다.
어떤 아이디어가 있습니까? interruptible_sleep_on_timeout()이 결코 반환하지 않을 가능성이 있습니까?
업데이트 : 이 스레드에 대한 CPU 선호도를 설정하면 문제가 발생하지 않습니다. 전용 코어에 고정하면 모든 것이 정상입니다. SMP 스케줄링에 문제가 있습니까?
다시 업데이트 : BIOS에서 하이퍼 스레딩을 해독 한 후 지금까지 그런 문제를 보지 못했습니다.
스택의 'interruptible_sleep_on_timeout'보다 위에 무엇입니까? 이것은 커널 스레드입니까? –