2012-12-14 5 views
0

컨텍스트 스위치를 사용하지 않고 C에서 코드 블록을 실행할 수있는 방법이 있습니까?컨텍스트 스위치없이 코드 블록 실행

주기적으로 카운터를 샘플링하기 위해 perf stat를 수정했습니다. 이 방법이 작동하는 동안, 0 사이클 x 명령어와 같은 나쁜 데이터 포인트를 제공하게됩니다.

나는 이런 일이 발생하는 이유는 컨텍스트 전환 때문이라고 생각합니다.

내 코드는 항상 명령 카운터 이전에주기 카운터 값을 가져오고주기 카운터 값을 가져온 후 컨텍스트 전환이 발생하면 스케줄링 퀀텀의 일부분에 대해 프로파일 링 프로세스가 실행중인 경우 최종적으로 명령 카운터 값을 꺼냈다면 이미 끌어 낸 사이클 카운터 값 중 하나가됩니다.

컨텍스트 전환을 허용하지 않고 코드 블록을 실행할 수있는 방법이 있습니까?

답변

1

아니요, 컨텍스트 스위치없이 코드를 실행하는 쉬운 방법은 없습니다. (코드가 커널 내부에서 실행 중이지만 어쨌든 인터럽트를 처리하려는 경우는 예외입니다.)

clock_gettime(2)을 사용하여 Linux 응용 프로그램에서 시간을 측정 할 수 있습니다. 신중하게 time(7)을 읽으십시오.

그런데 컨텍스트 전환을 원하십니까? 컴퓨터가 없으면 일부 컴퓨터는 물리적으로 너무 뜨거워지고 물리적으로 손상 될 수 있습니다. (일부 기계는 소프트웨어로 팬을 처리합니다.)

+0

시간을 측정하여 컨텍스트 전환이 발생했는지 확인하려고했습니다. 일반적으로 하나의 카운터 값을 가져 오는 데 걸리는 시간은 약 60 ~ 80ns입니다. 그러나 싸이클 카운터 읽기가 끝나고 명령 카운터가 끝날 때까지 걸리는 시간이이 시간 내에 있더라도 내 명령 카운터가 진행되는 것처럼 보입니다. 시간 지연을 사용하지 않고 컨텍스트 전환의 발생을 식별 할 수있는 방법이 있습니까? (지연이 컨텍스트 스위칭에 자신있게 기인하는만큼 크지 않기 때문에) –