2012-12-29 5 views
0

Solaris에서 processor_bind은 스레드에 대한 선호도를 설정하는 데 사용됩니다. 대상 스레드의 LWPID를 알아야하거나 상수를 참조하려면 상수 P_MYID을 사용해야합니다.Solaris에서 pthread_t의 LWP ID를 가져 와서 processor_bind와 함께 사용하십시오.

나는이처럼 보이는 기능이 있습니다

내 기능은 내가 명확성을 위해 생략 한 그것의 크로스 플랫폼 잔뜩 가지고 실제로
void set_affinity(pthread_t thr, int cpu_number) 
{ 
    id_t lwpid = what_do_I_call_here(thr); 
    processor_bind(P_LWPID, lwpid, cpu_number, NULL); 
} 

.

중요한 점은 임의의 pthread_t의 선호도를 설정하여 P_MYID을 사용할 수 없다는 것입니다.

processor_bind 또는 다른 인터페이스를 사용하여 어떻게하면됩니까?

답변

0

이 위로 따라, 인해 내 혼란 :

lwpid이

pthread_create(&lwpid, NULL, some_func, NULL); 

스레드 데이터에 의해 만들어진 것입니다 것은 외부가 아닌 프로세스에 사용할 수 있습니다 하나는 /proc 인터페이스를 통해 pthread_create() 전화를 걸기입니다.

/proc/<pid>/lwp/<lwpid>/ lwpid == 1 is the main thread, 2 .. n are the lwpid in the above example. 

그러나 이것은 위의 예제에서 lwpid라는 점을 제외하고는 어떤 스레드에 대해 처리하는지 거의 알려주지 않습니다.

/proc/pid/lwp/lwpid/lwpsinfo 

는 원하는 스레드에서 찾고 있다면 당신은 확인할 수있을있는 좀 더 많은 정보를 가지고있는 구조체 lwpsinfo로 읽을 수 있습니다. 솔라리스 10 및 11>가 pthread_t - /usr/include/sys/procfs.h

또는 man -s 4 proc

+0

이는 pthread_create()는 lwpid를 매핑 보장을 참조하십시오? –

+0

pthread_t는 데이터 유형입니다. pthread_create의 첫 번 0 인수는 인수 1을 SUCCESSFULLY 스레드에 대한 lwpid 값으로 수정합니다. 예, 보장됩니다. Solaris 10 및 11 모두에서 /usr/include/sys/types.h:typedef uint_t pthread_t;/* = thread.h의 thread_t * / –

0

Solaris 11 커널에는 중요한 스레드 최적화가 있습니다. 어떤 쓰레드가 특별한주의가 필요하다면 커널은 나머지를 처리한다. 이것은 당신이 원하는 것으로 보입니다. 이 짧은 설명을 읽고 내가 원하는 것을 이해했는지 확인하십시오.

https://blogs.oracle.com/observatory/entry/critical_threads_optimization 

위의 내용은 대체 이름입니다. 그것은 당신을 위해 전혀 날지 않을지도 모른다. 그러나 오라클마다 선호되는 메커니즘입니다.

솔라리스 10에 대한

processor_bind에 전화에 P_LWPIDidtype_t와 LWP의 pthread_t tid를 사용합니다. 이것은 Solaris 8 -> 11에서 작동합니다. 프로세스에서 LWP에 대해서만 작동합니다. 그게 당신 모델인지 분명하지 않습니다.

HTH

관련 문제