내 프로세스가 커널에 의해 선점되는지 여부와 빈도를 어떻게 확인합니까?

내 프로세스가 커널에 의해 선점되는지 여부와 빈도를 어떻게 확인합니까?

프로그램을 분석하기 위해 하나의 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의 벤치마크 설정 문서문제와 문제를 완화하기 위한 기술에 대한 좋은 개요를 제공합니다. 그의 기사는 주로 벤치마킹에 중점을 두고 있지만 대부분은 다른 상황에도 적용됩니다.

관련 정보