
프로그램을 프로파일링할 목적으로 하나의 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_command
CPU는 커널 코드를 실행하는 데 54%의 시간을 소비했음을 보여줍니다.
특정 프로세스가 CPU의 관심을 최대한 많이 받도록 하는 것은 꽤 복잡해질 수 있습니다.Victor Stinner의 벤치마크 설정 문서문제에 대한 좋은 개요와 문제를 완화하는 기술을 제공합니다. 그의 글은 벤치마킹에 초점을 맞추고 있지만 대부분은 다른 상황에도 적용 가능합니다.