2011-09-18 5 views
2

이 궁금해? 언제 표시할까요?컨텍스트 스위치 시간을 측정

누군가 나를 도와 줄 수 있습니까?

이 사실을 알고있는 전문가가 있습니까?

+0

당신이 말하는 커널 * what */kernel (리눅스, OSX/Darwin, Windows 등)을 지정하는 태그를 추가하면 아마도 도움이 될 것입니다. –

+1

[C 프로그램으로 측정하기 리눅스 OS에서 문맥 전환에 소비 된 시간] (http://stackoverflow.com/questions/2368384/write-ac-program-to-measure-time-spent-in-context-switch-in-linux-os) –

+0

@ Jerry Coffin 리눅스 커널입니다. – soker

답변

5

파이프를 통해 통신하는 두 개의 스레드를 갖는 것이 훨씬 간단합니다. 하나 개의 스레드 할 것이다 (의사 코드)

for(n = 1000; n--;) { 
    now = clock_gettime(CLOCK_MONOTONIC_RAW); 
    write(pipe, now); 
    sleep(1msec); // to make sure that the other thread blocks again on pipe read 
} 

다른 스레드 할 것이다 :이고

context_switch_times[1000]; 
while(n = 1000; n--;) { 
    time = read(pipe); 
    now = clock_gettime(CLOCK_MONOTONIC_RAW); 
    context_switch_times[n] = now - time; 
} 

, 그것은 데이터가 하나 개의 스레드에 의해 파이프에 기록 될 때의 시간 간격을 측정 할 그리고 다른 스레드가 깨어나서 그 데이터를 읽을 시간. context_switch_times 배열의 히스토그램은 컨텍스트 전환 시간의 분포를 보여줍니다.

시간에는 파이프 읽기 및 쓰기 오버 헤드가 포함되어 시간을 얻지 만 컨텍스트 전환 시간이 길다는 것이 좋습니다.

과거에는 Fedora 13 커널 및 실시간 FIFO 스레드를 사용하여 유사한 테스트를 수행했습니다. 내가 얻은 최소 컨텍스트 전환 시간은 4-5 usec 정도였습니다.

3

우리는 커널에서와 같이 사용자 공간에서이 시간을 실제로 측정 할 수 있다고 생각하지 않습니다. 시간 조각이 만료 된 후 프로세스가 선택되면 절대 알 수 없습니다. 따라서 사용자 공간에서 얻는 것이면 지연 스케줄링도 포함됩니다. 그러나 사용자 공간에서보다 정확한 측정을 얻을 수는 있지만 항상 정확한 것은 아닙니다. 지피 (jiffy) 지연조차도 중요합니다.

1

나는 특히 LTTng을 사용하여 컨텍스트 전환 타이밍의 자세한 흔적을 캡처 할 수 있다고 믿습니다.

관련 문제