내 프로세스가 커널에 의해 선점되는지 여부/얼마나 자주 확인하는 방법은 무엇입니까?

내 프로세스가 커널에 의해 선점되는지 여부/얼마나 자주 확인하는 방법은 무엇입니까?

프로그램을 프로파일링할 목적으로 하나의 CPU에서 중단 없이 실행하고 싶습니다. 이를 위해 taskset다음과 같은 조합을 사용합니다 chrt.

# taskset -c 1 chrt -f 99 ./my_program

이제 내 질문은 커널에 대한 컨텍스트 전환으로 인해 프로세스가 중단되는지 여부/얼마나 자주 중단되는지 확인할 수 있는 도구가 있는지 여부입니다.

답변1

당신이 사용할 수있는perf; 예를 들어,

perf stat -e context-switches,cpl_cycles.ring0,cpl_cycles.ring123 your_command

다음과 유사한 요약이 생성됩니다.

 Performance counter stats for 'your_command':

                 1      context-switches                                            
        11,890,096      cpl_cycles.ring0                                            
         9,980,265      cpl_cycles.ring123                                          

       0.011218937 seconds time elapsed

       0.007533000 seconds user
       0.003766000 seconds sys

이는 의 실행 중에 하나의 컨텍스트 전환(커널이 아닌 다른 프로세스로)이 있었고 your_commandCPU는 커널 코드를 실행하는 데 54%의 시간을 소비했음을 보여줍니다.

특정 프로세스가 CPU의 관심을 최대한 많이 받도록 하는 것은 꽤 복잡해질 수 있습니다.Victor Stinner의 벤치마크 설정 문서문제에 대한 좋은 개요와 문제를 완화하는 기술을 제공합니다. 그의 글은 벤치마킹에 초점을 맞추고 있지만 대부분은 다른 상황에도 적용 가능합니다.

관련 정보