2013-04-29 1 views
0

우리 회사는 방금 모니터링 스레드 (활성화 된 경우)를 생성하는 소프트웨어 API를 가져 왔습니다. 이 모니터링 스레드는 매우 유용하지만 Linux의 코어 0에 잠그고 싶습니다. 그러나 정상적인 방법으로 정상적으로 작업 집합을 사용할 수 없습니다.리눅스에서 taskset과 알 수없는 스레드

# taskset -c 2,3 12345 

모니터링 스레드의 PID를 알지 못하기 때문에 사용할 수 없습니다. 나는 공급 업체에게 스레드 파일의 PID를 로그 파일이나 유사한 것으로 출력 할 수 있는지 물어 봤고 그들은 "우리가 조사 할 것이다"라고 말했습니다.

그래서 내 질문은 당신이 taskset 수 있도록 외부 에서이 모니터링 스레드의 PID를 어떻게 찾습니까?

+0

왜 스레드를 코어 0에 잠그시겠습니까? 커널 스케줄러를 신뢰하지 않는 구체적인 이유는 무엇입니까? 그리고 스레드는 고유 한 PID를 가지지 않지만 고유 한 tid를가집니다 (Linux 관련 [gettid (2)] (http://man7.org/linux/man-pages/man2/gettid.2.html) syscall을 참조하십시오) –

답변

0

libnuma에서 numactl을 살펴보십시오. 이를 사용하여 핵심 선호도 정책을 설정하고 이미 적용된 정책을 사용하여 프로그램을 시작할 수 있습니다.

맨 페이지를 자세히 읽지는 않았지만 시작 프로그램이 처음부터 그렇게 작성된 경우 해당 시스템 호출을 작성하여 해당 정책을 재정의 할 수있는 자유가 있다고 의심됩니다. 그러나 프로그램이 스스로 결정을 내리지 않으면 모든 프로세스를 원하는 핵심으로 제한 할 수 있다고 생각합니다.

아마도 numactl이 0 코어로 제한되어있을 때 프로그램을 실행할 수 있습니다. 그러면 타사 라이브러리가 스레드를 시작할 때 (아마도 모니터 스레드를 생성하는 라이브러리 초기화 루틴을 호출하고있는 것 같습니다) numactl에서 상속 된 핵심 유사성 정책을 완화하기 위해 시스템이 호출합니다.

그러나 Basile Starynkevitch에 동의합니다. 핵심적인 친화력으로 어지럽히기 전에 아주 특별한 상황이 필요합니다. 내 경험에 의하면 프로그램에 메모리 시스템을 망치고있는 많은 스레드가 있고 메모리 유사성 문제 (libnuma로 할 수있는 또 다른 문제)를 해결 한 경우에만 무언가를 얻을 수 있습니다. 인텔과 AMD의 하드웨어는 정말 훌륭합니다. 리눅스 스케줄러의 결정을 향상시키기 위해서는 정말로 열심히 노력해야 할 것입니다.

Redhat MRG 또는 CERNs Scientific Linux로 미리 패키지화 된 PREEMPT_RT 커널 패치를 고려해보십시오. 최대 및 평균 컨텍스트 전환 시간면에서 Linux에서 일정을보다 일관되게 유지하는 것이 좋습니다. 나는 당신이 그런 말을하지는 않았지만, 당신이 정말로 원하는 것은 다른 스레드가 더 안정적으로,보다 일관성있게 스케쥴을 잡는다는 것을 느낄 수 있기 때문입니다. PREEMPT_RT는 좋은 일을합니다.

관련 문제